Ошибки вставки access

Типичные ошибки при выполнении запроса на добавление

Access для Microsoft 365 Access 2021 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Еще…Меньше

При выполнении запроса на добавление можно получить следующее сообщение об ошибке: «Приложению Microsoft Access не удается добавить все записи в запросе на добавление».

Сообщение об ошибке может появиться по одной из следующих причин:

Ошибки преобразования типа.    Вы попытались добавить данные одного типа в поле другого типа. Например, добавление текста в поле, типом данных которого является Число, вызовет сообщение об ошибке. Проверьте типы данных полей в конечной таблице, а затем убедитесь, что вы добавляете в каждое поле данные правильного типа.

Нарушения ключа.    Вы попытались добавить данные в одно или несколько полей, являющихся частью первичного ключа таблицы, такого как поле идентификатора. Проверьте в конструкторе конечной таблицы, выбрано ли для свойства первичного ключа (или другого индекса) Совпадения не допускаются значение Да. Затем убедитесь, что добавляемые данные не нарушают правила конечной таблицы.

Нарушения блокировки.    Если конечная таблица открыта в режиме конструктора или открыта другим пользователем в сети, это может привести к блокировке записей и предотвратить выполнение запроса на добавление записей. Убедитесь, что никто не имеет доступа к базе данных.

Нарушение правил проверки    Проверьте в конструкторе конечной таблицы, есть ли правила проверки. Например, если поле является требоваться, а запрос не предоставляет для него данные, вы получите сообщение об ошибке. Кроме того, проверьте нули в таблице для текстовых полей, для которых свойство «Разрешить нулевую длину» имеет значение «Нет». Если запрос не вмещет в такое поле какие-либо символы, вы получите сообщение об ошибке. Проблема также может быть из-за других правил проверки. Например, для поля «Количество» может быть задействовать следующее правило проверки:

>=10

В таком случае нельзя добавлять записи со значением менее 10.

Дополнительные сведения о создании запросов на добавление см. в статье Добавление записей в таблицу с помощью запроса на добавление.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Типовые ошибки и проблемы, возникающие при выполнении запросов на изменение

Во время выполнения запроса на изменение
Access различает четыре категории ошибок:

1. Дубликаты первичного ключа.Эта
категория ошибок возникает при попытке
добавления или изменения некоторой
записи в таблице, приводя к появлению
дублирующего значения первичного ключа
или уникального индекса. Access не будет
обновлять или добавлять записи, создающие
такие значения. Во избежание конфликта
перед попыткой добавить такие записи
следует изменить значения первичного
ключа в исходной таблице.

2. Ошибки преобразования данных.Ошибки этой категории возникают в тех
случаях, когда вы вставляете данные в
существующую таблицу и при этом
оказывается, что тип данных полей-получателей
не совпадает с типом данных полей-источников
(и данные полей-источников не могут быть
преобразованы к типу данных
полей-получателей). Например, ошибка
возникает, если вы добавляете текстовые
значения к полю, содержащему целочисленные
данные, а текстовое поле содержит
буквенные символы или слишком длинную
строку цифровых символов. В запросе на
обновление ошибка преобразования может
возникнуть, если вы используете формулу, 
которая пытается произвести вычисления
над полем, содержащим буквы.

3. Заблокированные записи. Ошибки
этой категории возникают, когда при
выполнении запроса на удаление или на
обновление вы используете таблицу,
к которой имеют доступ другие пользователи
сети. Access не может произвести обновление
записей, которые в это время обновляются
другими пользователями. Вам следует
подождать некоторое время и попытаться
снова выполнить обновление или удаление
в тот момент, когда данные записи больше
никто не использует.

4. Нарушение условий на значение. Если
вставляемые или обновляемые записи
не удовлетворяют условию на значение
для некоторого поля для таблицы,
Access сообщает вам об ошибке и не производит
вставки или обновления подобных
записей.

7.7. Построение и применение форм

Формы являются основным средством
организации интерфейса пользователя
в приложениях Microsoft Access. Формы могут
применяться для различных целей:

  • Вывод и редактирование данных.Это
    наиболее распространенный способ
    использования форм. Формы обеспечивают
    вывод на экран данных в необходимом
    представлении. С их помощью значительно
    упрощается внесение изменений, добавление
    и удаление данных из базы. В форме можно
    сделать доступными только для чтения
    все данные или некоторую их часть,
    автоматически выбирать информацию из
    других связанных таблиц и помещать ее
    в форму, вычислять выводимые в форме
    значения, скрывать или, наоборот,
    выводить некоторые данные в зависимости
    от значений других полей записи либо
    от выбранных пользователем параметров.

  • Управление ходом выполнения приложения.
    Чтобы автоматизировать вывод
    определенных данных или выполнение
    некоторой последовательности действий,
    создаются формы для работы с макросами
    или процедурами Visual Basic для приложений.
    Для запуска макросов или процедур VBA
    обычно используются элементы управления,
    называемые командными кнопками. С
    помощью макросов и процедур можно
    открывать другие формы, выполнять
    запросы или команды меню, фильтровать
    выводимые на экран данные, устанавливать
    значения в записях и формах, выводить
    меню на экран, печатать отчеты и выполнять
    ряд других действий. Можно так
    спроектировать форму, чтобы макросы
    или функции Visual Basic для приложений
    запускались в ответ на определенные
    события – например, открытие формы,
    активизацию определенного элемента
    управления или изменение данных в
    форме.

  • Ввод данных.Формы, предназначенные
    только для ввода в базу новых данных
    или значений, помогающих автоматизировать
    выполнение приложения.

  • Вывод сообщений. Формы могут
    предоставлять вспомогательную информацию
    о работе приложения или о выполняемых
    действиях. С помощью макрокоманды
    Сообщение или функции MsgBox Visual Basic для
    приложений можно вывести на экран
    информацию, предупреждение или сообщение
    об ошибках.

  • Печать информации.Несмотря на то,
    что для печати информации чаще всего
    используются отчеты, можно распечатать
    информацию, содержащуюся в форме.
    Поскольку для вывода формы на экран
    можно определить один набор параметров,
    а для печати – другой, форма может
    играть двойственную роль. Например,
    можно задать два заголовка и два
    примечания для формы – одну пару
    (заголовок и примечание) для ввода
    заказа, а другую – для печати счета
    по заказу.

Соседние файлы в папке Лекции

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

I have just started to do some coding with Access and trying to create a function that adds a row to a table but this would not work.

I have created a simple table (Table1) with two columns «FirstName» and «LastName» and a button that fires off the following code:

Private Sub Command0_Click()
    AppendRow "Table1", "John", "Doe"
End Sub

Where AppendRow is:

Function AppendRow(toTableName As String, firstName As String, lastName As String) As Boolean
   ' Returns True on success, false otherwise
   ' USAGE: AppendRow "toTableName", "firstName", "lastName"

   On Error GoTo errhandler
   Dim strSql As String

   'Create the SQL string
   strSql = "INSERT INTO " & toTableName & " (FirstName, LastName) " & _
        "VALUES ('" & firstName & "', '" & lastName & "');"


   'Print the SQL so we can paste into the query build if there are errors
   Debug.Print strSql
   MsgBox strSql

   'Run the SQL Query
   CurrentDb.Execute strSql

   'If no errors return true
   AppendRow = True

ExitHere:
   Exit Function

errhandler:
   'There is an error return false
   AppendRow = False
   With Err
      MsgBox "Error " & .Number & vbCrLf & .Description, vbOKOnly Or vbCritical, "AppendTable"
   End With
   Resume ExitHere
End Function

The SQL string looks like this

INSERT INTO Table1 (FirstName, LastName) VALUES ('John', 'Doe')

EDIT: Added missing quotes.

I have a user form that inserts data into «user» table and «organizer» table when I click a button, user data gets inserted with no problem, but it prompts me to enter the value (organization_name) again in a small dialogue box -which supposed to take from the text field and insert into organizer table- ,
then gives me an error saying «ms access set one row null due to validation rule violation»

NOTE: I didn’t put any validation rule for the «organization_name» anywhere

Private Sub InsertSqlIntoOrgTable()
   Dim orgName As String, SqlOrgNameInsert As String

   orgName = txtOrgName.Value  'takes the value from text field
   SqlOrgNameInsert = "INSERT INTO ORGANIZER (ORG_NAME)     VALUES (" & orgName & ") "

   DoCmd.RunSQL SqlOrgNameInsert

End Sub

HansUp's user avatar

HansUp

95.8k11 gold badges76 silver badges135 bronze badges

asked Dec 7, 2015 at 12:37

user3713255's user avatar

3

SqlOrgNameInsert = "INSERT INTO ORGANIZER (ORG_NAME) VALUES ('" & orgName & "') "

if the field name in table ORGANIZER is really ORG_NAME. Show us your complete table definition in case that this doesn’t solve your problem. Because in your last question you posted:

sqlOrgInsertUsrId = "INSERT INTO ORGANIZER (USER_ID) VALUES (" & orgUserId & ")"

Both inserts run into the same table but try to create new independent rows. If USER_ID is primary key then your insert into ORG_NAME can’t work that way.

You should learn more about SQL.

answered Dec 7, 2015 at 13:22

cboden's user avatar

cbodencboden

8139 silver badges14 bronze badges

3

  • Remove From My Forums
  • Вопрос

  • DataSet Test = new DataSet();
    
                {
    
                    DataTable Hour = new DataTable("Hour");
    
    
    
                    
    
                    Hour.Columns.Add(new DataColumn("DateTime", typeof(DateTime)));
    
    
    
                    Test.Tables.Add(Hour);
    
                }
    
    
    
    
    
                Test.Tables["Hour"].Rows.Add();
    
                
    
                Test.Tables["Hour"].Rows[0]["DateTime"] = DateTime.Now;
    
                
    
    
    
    
    
                   myAccessConnect.Open();
    
    
    
                OdbcDataAdapter myDataAdapter = new OdbcDataAdapter();
    
                myDataAdapter.SelectCommand = new OdbcCommand("SELECT DateTime FROM Hour", myAccessConnect);
    
    
    
                myDataAdapter.InsertCommand = new OdbcCommand("INSERT INTO Hour (DateTime) VALUES (?)", myAccessConnect);
    
    
    
                 OdbcParameter argDateTime = myDataAdapter.InsertCommand.Parameters.Add("DateTime", OdbcType.DateTime); argDateTime.SourceColumn = "DateTime";
    
    
    
               
    
                myDataAdapter.Update(Test, "Hour");
    
    
    
    
    
                myAccessConnect.Close();
    
    
    
    

    Получаю ошибку:
    ERROR [42000] [Microsoft][ODBC Microsoft Access Driver] Ошибка синтаксиса в инструкции INSERT INTO.

    Для других аналогичных случаев (другие типы) конструкция работает. Полагаю, есть некоторые особенности использования типа данных DateTime, потому что для других типов все ок.

    В базе данных есть соответствующий столбец DateTime.
    Переименовываю столбец и правлю запрос на другое имя — все работает.
    С именем столбца DateTime не работает. В другой части кода работатет, здесь — нет.

    • Перемещено

      1 октября 2010 г. 21:13
      MSDN Forums Consolidation (От:Технологии .NET Framework: ADO.NET, WCF, WPF etc)

Ответы

  • Переименуйте свой столбец DateTime в как-то по-другому, например DateOfTime. И все заработает.
    DateTime — зарезервированное слово (наверно :))

    • Предложено в качестве ответа
      I.Vorontsov
      15 января 2010 г. 13:44
    • Помечено в качестве ответа
      GL88
      16 января 2010 г. 8:22
    • Помечено в качестве ответа
      GL88
      16 января 2010 г. 8:22

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

Я делаю вставку имени пользователя и пароля в базу данных в vb.net но это дает такую ошибку:

изображение ошибки

может кто-нибудь взглянуть, в чем причина?

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    pro = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersAminsourcereposNando'sNando'suser.accdb"

    connstring = pro
    myconnection.ConnectionString = connstring
    myconnection.Open()
    command = "insert into user ([USERNAME],[PASSWORD]) values ('" amp; USERNAMETextBox.Text amp; "','" amp; PASSWORDTextBox.Text amp; "')"
    Dim cmd As OleDbCommand = New OleDbCommand(command, myconnection)
    cmd.ExecuteNonQuery()
    cmd.Dispose()
    myconnection.Close()

    MsgBox("Record added", MsgBoxStyle.Information)
 

Завершение подзаголовка

Комментарии:

1. В PASSWORDTextBOX.Text enter: a'); DROP TABLE user;-- (серьезно, не делайте) используйте параметры, Using инструкции, чтобы гарантировать, что удаление действительно произойдет, и, наконец, никогда не храните пароли подобным образом.

2. Ну, совершенно ясно, что при чтении сообщения об ошибке что-то не так с инструкцией insert . Используйте параметры, а не конкатенации строк, вы обнаружите, что при правильном выполнении ваша проблема исчезнет

3. И прежде чем следовать совету Codexer, сделайте резервную копию своей базы данных

4. cmd.Parameters.Add(New OleDbParameter("USERNAME", CType(USERNAMETextBox.Text, String))) параметры также выдают ту же ошибку @Hursey

5. Неиспользование параметров откроет шлюзы, вы этого не хотите. Я хочу сказать, что кто-то может создать удобный запрос во входных данных, который может быть выполнен, и с помощью параметров помогает предотвратить это.

Ответ №1:

Я меняю это:

 command = "insert into user ([USERNAME],[PASSWORD]) values ('" amp; USERNAMETextBox.Text amp; "','" amp; PASSWORDTextBox.Text amp; "')"
 

к этому:

 command = "insert into [user] ([USERNAME],[PASSWORD]) values ('" amp; USERNAMETextBox.Text amp; "','" amp; PASSWORDTextBox.Text amp; "')"
 

Я просто поставил скобку, user и это решено.
Плохо то, что я ходил взад и вперед между учебниками в течение нескольких дней, но ни один из них не решил ее, потому что ошибка была в имени таблицы, но она, наконец, решена. Спасибо Hursey за упоминание зарезервированных слов.

Комментарии:

1. Возможно, вы решили свою непосредственную проблему, но, пожалуйста, научитесь использовать параметры, чтобы избежать внедрения sql и других проблем. Кроме того, ПОЖАЛУЙСТА , не храните пароли в виде обычного текста.

Типовые ошибки и проблемы, возникающие при выполнении запросов на изменение

Во время выполнения запроса на изменение
Access различает четыре категории ошибок:

1. Дубликаты первичного ключа.Эта
категория ошибок возникает при попытке
добавления или изменения некоторой
записи в таблице, приводя к появлению
дублирующего значения первичного ключа
или уникального индекса. Access не будет
обновлять или добавлять записи, создающие
такие значения. Во избежание конфликта
перед попыткой добавить такие записи
следует изменить значения первичного
ключа в исходной таблице.

2. Ошибки преобразования данных.Ошибки этой категории возникают в тех
случаях, когда вы вставляете данные в
существующую таблицу и при этом
оказывается, что тип данных полей-получателей
не совпадает с типом данных полей-источников
(и данные полей-источников не могут быть
преобразованы к типу данных
полей-получателей). Например, ошибка
возникает, если вы добавляете текстовые
значения к полю, содержащему целочисленные
данные, а текстовое поле содержит
буквенные символы или слишком длинную
строку цифровых символов. В запросе на
обновление ошибка преобразования может
возникнуть, если вы используете формулу, 
которая пытается произвести вычисления
над полем, содержащим буквы.

3. Заблокированные записи. Ошибки
этой категории возникают, когда при
выполнении запроса на удаление или на
обновление вы используете таблицу,
к которой имеют доступ другие пользователи
сети. Access не может произвести обновление
записей, которые в это время обновляются
другими пользователями. Вам следует
подождать некоторое время и попытаться
снова выполнить обновление или удаление
в тот момент, когда данные записи больше
никто не использует.

4. Нарушение условий на значение. Если
вставляемые или обновляемые записи
не удовлетворяют условию на значение
для некоторого поля для таблицы,
Access сообщает вам об ошибке и не производит
вставки или обновления подобных
записей.

7.7. Построение и применение форм

Формы являются основным средством
организации интерфейса пользователя
в приложениях Microsoft Access. Формы могут
применяться для различных целей:

  • Вывод и редактирование данных.Это
    наиболее распространенный способ
    использования форм. Формы обеспечивают
    вывод на экран данных в необходимом
    представлении. С их помощью значительно
    упрощается внесение изменений, добавление
    и удаление данных из базы. В форме можно
    сделать доступными только для чтения
    все данные или некоторую их часть,
    автоматически выбирать информацию из
    других связанных таблиц и помещать ее
    в форму, вычислять выводимые в форме
    значения, скрывать или, наоборот,
    выводить некоторые данные в зависимости
    от значений других полей записи либо
    от выбранных пользователем параметров.

  • Управление ходом выполнения приложения.
    Чтобы автоматизировать вывод
    определенных данных или выполнение
    некоторой последовательности действий,
    создаются формы для работы с макросами
    или процедурами Visual Basic для приложений.
    Для запуска макросов или процедур VBA
    обычно используются элементы управления,
    называемые командными кнопками. С
    помощью макросов и процедур можно
    открывать другие формы, выполнять
    запросы или команды меню, фильтровать
    выводимые на экран данные, устанавливать
    значения в записях и формах, выводить
    меню на экран, печатать отчеты и выполнять
    ряд других действий. Можно так
    спроектировать форму, чтобы макросы
    или функции Visual Basic для приложений
    запускались в ответ на определенные
    события – например, открытие формы,
    активизацию определенного элемента
    управления или изменение данных в
    форме.

  • Ввод данных.Формы, предназначенные
    только для ввода в базу новых данных
    или значений, помогающих автоматизировать
    выполнение приложения.

  • Вывод сообщений. Формы могут
    предоставлять вспомогательную информацию
    о работе приложения или о выполняемых
    действиях. С помощью макрокоманды
    Сообщение или функции MsgBox Visual Basic для
    приложений можно вывести на экран
    информацию, предупреждение или сообщение
    об ошибках.

  • Печать информации.Несмотря на то,
    что для печати информации чаще всего
    используются отчеты, можно распечатать
    информацию, содержащуюся в форме.
    Поскольку для вывода формы на экран
    можно определить один набор параметров,
    а для печати – другой, форма может
    играть двойственную роль. Например,
    можно задать два заголовка и два
    примечания для формы – одну пару
    (заголовок и примечание) для ввода
    заказа, а другую – для печати счета
    по заказу.

Соседние файлы в папке Лекции

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    Ошибка вставки записи в БД MS Access

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    09.11.07, 04:18

      Full Member

      ***

      Рейтинг (т): 9

      Вставка происходит следующим образом (TAccessWorker — мой класс работы с MS Access):

      при создании формы:

      ExpandedWrap disabled

        ta := TAccessWorker.Create(‘db1.mdb’);

      вставка происходит так (TGood — произвольный класс):

      ExpandedWrap disabled

        good := TGood.Create;

        good.SetId(ta.getLastGoodId + 1);

        ta.insertGood(good);

      TAccessWorker.insertGood(good);(SQLInsert взят из DRKB)

      ExpandedWrap disabled

         procedure TAccessWorker.insertGood(good :TGood);

          var

            query :TADOQuery;

          begin

            query := TADOQuery.Create(nil);

            with query do begin

              ConnectionString := globalDbConnectionString;

              SQL.Text := SqlInsert(

                [good.GetId, good.GetParentId, good.GetName, good.GetDescription, CurrToStr(good.GetPrice), good.GetQuantity],

                ‘goods’

              );

              ExecSQL;

              Close;

            end;

          end;

      TAccessWorker.getLastGoodId — выясняет значение последнего id

      ExpandedWrap disabled

          function TAccessWorker.getLastGoodId : Integer;

          var

            query :TADOQuery;

            num :String;

          begin

            query := TADOQuery.Create(nil);

            with query do begin

              ConnectionString := globalDbConnectionString;

              SQL.Text := ‘SELECT id from goods’;

              Open;

              Last;

              num := FieldByName(‘id’).AsString;

              if(num <> ») then begin

                Result := StrToInt(num);

              end else begin

                Result := -1;

              end;

              Close;

            end;

          end;

      ExpandedWrap disabled

        globalDbConnectionString :=

                  ‘Provider=Microsoft.Jet.OLEDB.4.0;’ +

                  ‘Data Source=’ + fileName + ‘;’ +

                  ‘Persist Security Info=False;’ +

                  ‘Jet OLEDB:Database Password=’ + password;

      Когда я произвожу подряд 32 вставки (между вставками промеуток времени ~1 сек), то после 32-ой итерации, у меня программа падает и выкидывает такой exception (падает постоянно и ИМЕННО после 32-х вставок подряд): EOleException «Неопознанная ошибка»

      Падает он в методе getLastId в строке c Open:

      ExpandedWrap disabled

        SQL.Text := ‘SELECT id from goods’;

        Open;

        Last;

      .

      Также, если производить вставки в БД с меньгим интервалом, то программа падает с EOleException из-за того что я пытаюсь вставить запись с уже существующим Id. То есть видно getLastGoodId возращает ещё необновившийся id.

      Подскажите как бороться с этими 2-я проблемами…

      Сообщение отредактировано: SkyStar — 09.11.07, 04:19


      dron-s



      Сообщ.
      #2

      ,
      09.11.07, 04:30

        а зачем ты сам себе жизни услажняешь со всем этим делом?
        нафига ты писал все эти функции и процедуры, когда можно всё сделать намного короче и практичнее!
        возможно что у тебя где просто идёт очень большая утечка памяти…
        надо дебажить…

        Master

        MIF



        Сообщ.
        #3

        ,
        09.11.07, 04:33

          Зарегистрируй ID поле как счётчик и убери код генерации следующего ID из своего кода.


          Игорь Акопян



          Сообщ.
          #4

          ,
          09.11.07, 11:15

            а он наверное бездырочную нумерацию хочет :)
            Кроме того, откуда видно, что метод getLastId возвращает именно Last ID? Он, судя по запросу, хватает первый попавшийся, может там МАХ поставить?

            Сообщение отредактировано: Игорь Акопян — 09.11.07, 11:16

            Master

            MIF



            Сообщ.
            #5

            ,
            09.11.07, 11:26

              Цитата Игорь Акопян @ 09.11.07, 11:15

              Он, судя по запросу, хватает первый попавшийся

              Не, там в коде есть Last. Если первичного ключа нет, то выбирает ID близкое к максимальному.
              SkyStar, если всё таки хочешь сам генерировать ИД (хотя багов при таком подходе бывает немеряно) то измени запрос так, как советует Игорь Акопян.


              Игорь Акопян



              Сообщ.
              #6

              ,
              12.11.07, 09:19

                Цитата MIF @ 09.11.07, 11:26

                Не, там в коде есть Last.

                упс.. проглядел :)

                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                0 пользователей:

                • Предыдущая тема
                • Delphi: Базы данных
                • Следующая тема

                Рейтинг@Mail.ru

                [ Script execution time: 0,0308 ]   [ 16 queries used ]   [ Generated: 21.06.23, 14:01 GMT ]  

                Глава 3. Работа с таблицей

                47

                значения полей (сделана попытка вставить в текстовое поле слишком длинный текст) и т.д.

                Невставленные данные Access помещает в специальную таблицу Ошибки вставки. После корректировки они могут быть позднее вставлены в таблицу-приемник.

                Таблицу Ошибки вставки можно использовать для быстрого создания таблицы, содержащей нужную информацию. Например, чтобы создать таблицу, содержащую сведения о студентах группы 9701, достаточно скопировать в буфер обмена соответствующие записи таблицы Студенты, предварительно отсортировав ее по полю Группа. Затем нужно выполнить операцию их вставки в эту же таблицу. Из-за нарушения условия уникальности значений ключевого поля Код студента Access откажется выполнить эту операцию и поместит записи из буфера обмена в таблицу Ошибки вставки, которая будет иметь такую же структуру, как и таблица Студенты.

                Буфер обмена можно использовать и при вставке в поля таблицы данных из других приложений Windows, например фрагмента таблицы Excel, текста, подготовленного в Word, или графического изображения.

                3.4. Настройка внешнего вида таблицы

                При работе с таблицей у различных пользователей базы данных могут возникнуть различные потребности, связанные с представлением содержащихся в них данных на экране. Например, разным пользователям может потребоваться различный порядок представления столбцов (полей таблицы), их ширина, представление данных в полях и т.д. Все эти элементы настройки (форматирования) таблицы находятся в руках пользователя. При изменении настроек сама структура таблицы не меняется, меняется лишь внешний вид ее представления на экране (макет). При желании новый макет таблицы может быть сохранен.

                Наиболее часто встречающаяся операция при настройке внешнего вида таблиц — это выбор представления отдельных ее полей.

                Что в основном меняет пользователь для отдельного поля:

                имя поля;

                представление данных в поле (в том числе тип поля);

                ширину поля;

                местонахождение (порядковый номер) поля.

                Эти операции могут быть осуществлены различными способами. Имя поля и представление данных в поле лучше всего менять в конструкторе таблиц, тогда как ширину полей и порядок их следования— в режиме просмотра таблицы.

                Рис. 3.5. Меню Формат

                48 Работа в Microsoft Access

                О задании имен полей и их характеристиках (типе данных, формате данных и др.) подробно говорилось в предыдущей главе, поэтому остановимся кратко на изменении ширины поля и порядке следования полей.

                Для изменения ширины поля достаточно в режиме просмотра таблицы установить курсор мыши на правую границу имени поля, нажать левую клавишу мыши и переместить границу в заданном направлении для увеличения или уменьшения ширины поля. Можно также использовать соответствующую команду меню Формат (см. рис. 3.5).

                Аналогичным образом может быть изменена высота строк таблицы. При этом меняется высота сразу всех строк таблицы.

                Для изменения порядка следования полей необходимо сначала выделить поле, щелкнув мышью на имени поля. Поле (весь столбец) окажется выделенным. После этого надо «ухватиться» мышью за имя поля и перетащить поле на новое место, удерживая нажатой левую клавишу мыши. Можно также с помощью клавиш Ctrl+F8 включить режим Сдвиг и затем для перемещения поля использовать клавиши и . Для выключения этого режима нужно нажать на клавишу Esc.

                В режиме просмотра таблицы можно также скрыть показ отдельных столбцов. Для этого достаточно выбрать столбец (столбцы), щелкнуть

                правой клавишей мыши и из контекстного меню выбрать опцию Скрыть столбцы. Можно также использовать команды Формат/Скрыть столбцы. Для показа скрытых столбцов нужно использовать команды

                Формат/Отобразить столбцы.

                Иногда при просмотре данных может понадобиться, чтобы при прокрутке содержимого таблицы вправо или влево один или несколько столбцов оставались на экране. Например, при просмотре сведений о студентах удобно, чтобы столбец с фамилией студента не исчезал с экрана. Для этого нужно выделить один или несколько (смежных) фиксируемых столбцов и выполнить команды Формат/Закрепить столбцы. Для отмены фиксации столбцов следует выполнить команды Формат/Освободить все

                столбцы.

                Глава 3. Работа с таблицей

                49

                3.5. Поиск и замена данных

                В Access существует множество способов отобрать только требуемые данные при выполнении поиска конкретного значения, одной записи или группы записей.

                С помощью диалогового окна Поиск легко найти конкретные записи или определенные значения в полях. При обнаружении каждого вхождения требуемого элемента выполняется перемещение по записям. Если нужно заменить конкретные обнаруженные при поиске значения, следует воспользоваться диалоговым окном Замена.

                Фильтры позволяют временно выбрать и просмотреть конкретный набор записей в режиме таблицы.

                Запросы дают возможность работать с конкретным набором записей, которые удовлетворяют условиям, заданным для одной или нескольких таблиц базы данных. При выполнении запроса становится возможной независимая работа с этим набором записей в конкретной форме или в объекте в режиме таблицы.

                Озапросах будет подробно сказано в главе 5. В этой главе мы сосредоточимся на выполнении операций поиска и замены данных, а также на построении фильтров.

                Для нахождения (поиска) данных служит специальное диалоговое окно поиска (см. рис. 3.6), открыть которое можно с помощью команд меню Правка/Найти или нажатия комбинации клавиш Ctrl + A (F).

                Рис. 3.6. Окно поиска

                При этом можно найти конкретное вхождение образца в поле, а также возможность найти сразу все вхождения образца в поле или искать каждое вхождение по отдельности. Если не требуется выполнять поиск по всем полям, в режиме таблицы требуется выбрать поле (столбец) для поиска. значения, которое требуется найти. Само значение вводится в поле

                Образец.

                Если точное значение неизвестно, можно задать образец поиска с помощью обычных знаков подстановки.

                50

                Работа в Microsoft Access

                Чтобы найти первое вхождение указанного значения, необходимо нажать кнопку Найти. Для поиска следующих вхождений этого значения нажимается кнопка Найти далее.

                Для замены данных служит диалоговое окно замены (см. рис. 3.7), открыть которое можно с помощью элемента головного меню Правка/Заменить или нажатия комбинации клавиш Ctrl + Р (Н).

                Для замены найденного значения (значений) требуется задать информацию в поле Заменить на.

                Существует возможность сразу заменить все вхождения образца в поле или заменять каждое вхождение по отдельности. Однако поиск пустых значений и пустых строк необходимо выполнять в диалоговом окне Поиск с последующей заменой этих значений вручную.

                Для того чтобы выполнять замену каждого вхождения по отдельности, нужно нажимать Найти далее, а затем кнопку Заменить. Для пропуска текущего вхождения и поиска следующего нажимается кнопка Найти далее.

                Рис. 3.7. Окно замены

                Быстрее выполнить замену большого количества данных или произвести вычисления с данными (например, повысить все оклады сотрудникам) можно с помощью запроса на обновление (см. главу о запросах), а не с помощью диалогового окна Замена. Однако при этом невозможно выполнять замену отдельных вхождений с подтверждением. Кроме того, запрос на обновление при выполнении поиска и замены данных в нескольких полях становится достаточно громоздким.

                Кроме поиска по образцам данных существуют и другие возможности поиска, например, записи по ее номеру.

                Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

                • #
                • #
                • #
                • #
                • #
                • #
                • #
                • #
                • #
                • #
                • #

                Как я могу вставить данные в таблицу MS Access? Когда я пытаюсь, я получаю ошибку.

                Код:

                If TextBox1.Text = Nothing And TextBox2.Text = Nothing Then
                    MsgBox("No Username and Password inserted")
                    TextBox1.Focus()
                
                Else
                
                    If Not con.State = ConnectionState.Open Then
                        'open connection if it is not yet open
                    End If
                
                    cmd.Connection = con
                    'add data to table
                    cmd.CommandText = "insert into loginTable(username, password, typeofuser) values ('" & Me.TextBox1.Text & "', '" & Me.TextBox2.Text & "', '" & Me.ComboBox1.Text & "')"
                
                    cmd.ExecuteNonQuery()
                
                    'refresh data in list
                
                    'close connection
                    con.Close()
                End If
                

                2 ответа

                Лучший ответ

                Во-первых, вы не открываете соединение:

                con.Open()
                

                Далее password является зарезервированное слово в MS Access. Вам нужно заключить password в квадратные скобки:

                [password]
                

                Вы объединяете строки вместо использования параметров:

                cmd.Parameters.Add("@username", OleDbType.VarChar).Value = txtUsername.Text
                cmd.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
                cmd.Parameters.Add("@typeofuser", OleDbType.VarChar).Value = cmbTypeOfUser.Text
                

                Обратите внимание на правильное имя для TextBox и ComboBox элементов управления вместо использования TextBox1, TextBox2 и ComboBox1. Это помогает правильно идентифицировать каждый элемент управления:

                txtUsername
                txtPassword
                cmbTypeOfUser
                

                Отойдите от использования MsgBox и используйте MessageBox.Show. MsgBox существует для VB6 и в любом случае заканчивается делегированием MessageBox, поэтому имеет смысл использовать MessageBox.Show:

                MessageBox.Show("No Username and Password inserted")
                

                Наконец, я хотел бы рассмотреть возможность реализации использования, которое поможет закрыть и избавьтесь от ваших объектов SQL:

                Using cmd As New OleDbCommand(command, connection)
                
                End Using
                

                В целом ваш код будет выглядеть примерно так:

                If txtUsername.Text = Nothing And txtPassword.Text = Nothing Then
                
                    MessageBox.Show("No Username and Password inserted")
                    TextBox1.Focus()
                
                Else
                
                    Using con As New OleDbConnection(connectionString),
                          cmd As New OleDbCommand("INSERT INTO [loginTable] ([username], [password], [typeofuser]) VALUES (@username, @password, @typeofuser)", con)
                
                        con.Open()
                
                        cmd.Parameters.Add("@username", OleDbType.VarChar).Value = txtUsername.Text
                        cmd.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
                        cmd.Parameters.Add("@typeofuser", OleDbType.VarChar).Value = cmbTypeOfUser.Text
                
                        cmd.ExecuteNonQuery()
                
                    End Using
                
                End If
                

                Это выходит за рамки этого вопроса, но я бы также посмотрел на шифрование паролей. Хранить их в виде простого текста — плохая практика. Посмотрите на вопрос SO; Лучший способ хранения пароля в базе данных, который может дать вам некоторые идеи о том, как лучше всего это сделать.


                1

                Bugs
                25 Апр 2017 в 08:27

                Есть (по крайней мере) несколько способов сделать это. Итак, попробуйте это. , ,

                Imports System.Data.OleDb
                
                Public Class Form1
                
                    Private ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersExcelDesktopCodingMicrosoft AccessNorthwind.mdb;"
                    Private NewIdentifer As Integer = 0
                    Private InsertStatement As String = "INSERT INTO Employee (LName) Values(@LName)"
                    Private IdentifierStatement As String = "Select @@Identity"
                
                    'Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
                
                
                    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                        Using cn As New OleDbConnection(ConnectionString)
                            Using cmd As New OleDbCommand("SELECT * FROM Employee", cn)
                                Dim dt As New DataTable
                                cn.Open()
                                Dim Reader As OleDbDataReader = cmd.ExecuteReader()
                                dt.Load(Reader)
                                Dim dv = dt.DefaultView
                                DataGridView1.DataSource = dv
                            End Using
                        End Using
                    End Sub
                
                    'End Sub
                
                    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
                
                        If Not String.IsNullOrEmpty(txtLastName.Text) Then
                            Using cn As New OleDbConnection(ConnectionString)
                                Using cmd As New OleDbCommand(InsertStatement, cn)
                                    cmd.Parameters.AddWithValue("@LName", txtLastName.Text)
                                    cn.Open()
                                    cmd.ExecuteNonQuery()
                                    cmd.CommandText = IdentifierStatement
                                    NewIdentifer = CInt(cmd.ExecuteScalar())
                                    Dim Row As DataRowView = CType(DataGridView1.DataSource, DataView).AddNew
                                    Row("Fname") = NewIdentifer
                                    Row("LName") = txtLastName.Text
                                    Row.EndEdit()
                                    DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.RowCount - 1)
                                    txtLastName.Text = ""
                                End Using
                            End Using
                        Else
                            MsgBox("Please enter a name")
                        End If
                
                    End Sub
                End Class
                

                Также попробуйте. . .

                Imports System.Data.OleDb
                
                Public Class Form1
                
                
                
                    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
                
                        ' Requires: Imports System.Data.OleDb
                
                        ' ensures the connection is closed and disposed
                        Using connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source=""C:UsersRyanDesktopCodingDOT.NETSamples VBInsert Into MS Access Table from TextboxWindowsApplication1binInsertInto.mdb"";" & _
                            "Persist Security Info=False")
                            ' open connection
                            connection.Open()
                
                            ' Create command
                            Dim insertCommand As New OleDbCommand( _
                                "INSERT INTO Table1([inputOne] , [inputTwo] , [inputThree]) " & _
                                "VALUES (@inputOne, @inputTwo, @inputThree);", _
                                connection)
                            ' Add the parameters with value
                            insertCommand.Parameters.AddWithValue("@inputOne", TextBox1.Text)
                            insertCommand.Parameters.AddWithValue("@inputTwo", TextBox2.Text)
                            insertCommand.Parameters.AddWithValue("@inputThree", TextBox3.Text)
                            ' you should always use parameterized queries to avoid SQL Injection
                            ' execute the command
                            insertCommand.ExecuteNonQuery()
                
                            MessageBox.Show("Insert is done!!")
                
                        End Using
                
                    End Sub
                End Class
                





                Использование
                буфера обмена Windows для импорта и экспорта данных



                При импорте
                или экспорте данных, созданных с помощью приложения Windows, можно воспользоваться
                буфером обмена Windows. Это средство позволяет применять стандартные команды
                Windows и быстро перемещать данные из одного приложения Windows в другое. Это
                особенно удобно при добавлении или замене существующих данных в таблице Access
                2002.


                Однако этот
                метод имеет одно существенное ограничение — структура таблицы, в которую импортируются
                данные, должна соответствовать данным, передаваемым через буфер обмена. Например,
                для правильной вставки данных из строк рабочего листа Excel в таблицу Access
                необходимо, чтобы типы данных полей таблицы Access соответствовали типам данных
                каждого столбца, скопированного в буфер обмена диапазона ячеек.


                Чтобы добавить
                новые записи в таблицу Access 2002 при помощи буфера обмена Windows:


                1. Запустите приложение,
                  которое будет использоваться для копирования данных в буфер обмена (в нашем
                  примере это Microsoft Excel), и откройте файл с данными.

                2. Выделите данные, которые
                  нужно добавить в таблицу Access. Например, выделите диапазон ячеек рабочего
                  листа, начиная со столбца, соответствующего первому полю таблицы Access (рис.
                  3.44). При этом необязательно выделять все оставшиеся столбцы, соответствующие
                  полям таблицы Access, поскольку Access 2002 добавит пустые значения или значения
                  по умолчанию в поля, соответствующие столбцам, не включенным в выделенный
                  диапазон.

                3. Выберите команду

                  Правка,
                  Копировать

                  (Edit, Copy) или нажмите комбинацию клавиш <Ctrl>+<C>,
                  чтобы скопировать выделенный диапазон ячеек в буфер обмена Windows.

                4. Откройте таблицу, в
                  которую нужно добавить данные, в режиме Таблицы.





                Рис. 3.44.

                В таблицу Access 2000 будет добавлен выделенный диапазон ячеек


                1. Выберите команду

                  Правка,
                  Добавить из буфера

                  (Edit, Paste Append). Если в процессе добавления записей
                  не возникнет ошибок, появится окно, запрашивающее подтверждение на добавление
                  записей в таблицу (рис. 3.45). Нажмите кнопку Да (Yes). Новые записи будут
                  добавлены в конец таблицы Access (рис. 3.46). Чтобы разместить добавленные
                  записи в правильной последовательности, выберите команду

                  Записи, Удалить
                  фильтр

                  (Records, Remove Filter/Sort).


                При добавлении
                в таблицу Access 2002 данных с помощью буфера обмена Windows могут возникнуть
                ошибки по одной из двух причин:


                • типы данных ячеек Excel
                  не соответствуют типам данных полей таблицы Access;

                • в первичном ключе добавляемых
                  записей содержатся значения, которые уже есть в таблице Access.





                Рис. 3.45.

                Подтвердите вставку записей из буфера обмена





                Рис. 3.46.

                Выделенные записи добавлены из буфера обмена


                В любом случае
                Access 2000 создаст таблицу «Ошибки вставки» (Paste Errors) и запишет
                в нее все записи, вызвавшие ошибки. Использование таблицы «Ошибки вставки»
                аналогично использованию таблицы ошибок импорта данных, описанной ранее в этой
                главе.


                Ошибки, вызванные
                наличием повторяющихся значений в первичном ключе таблицы Access 2002, приводят
                к появлению на экране диалоговых окон с сообщениями об ошибках. Читая сообщения
                в этих окнах, вы можете получить более подробную информацию о каждой ошибке,
                если нажмете кнопку

                Справка

                (Help), можете запретить вывод дальнейших
                сообщений об ошибках, а можете просто прервать процесс добавления записей. В
                любом случае все ошибки будут зафиксированы в таблице «Ошибки вставки»
                (на рис. 3.47 приведена таблица, которая была получена при повторной вставке
                в базу данных шести уже имеющихся в ней записей).


                После завершения
                добавления записей в таблицу появится сообщение о том; что записи, которые не
                удалось добавить из буфера обмена, помещены в таблицу «Ошибки вставки».





                Рис. 3.47.

                Таблица «Ошибки вставки»






                Совет



                Если в процессе
                вставки выдается много сообщений об ошибках, вызванных повторяющимися значениями
                в ключевом поле, лучше прервать этот процесс (реальная вставка записей происходит
                только после подтверждения в конце процесса), найти записи с повторяющимися
                значениями, исправить их и заново выполнить процесс вставки. Для того чтобы
                быстро найти повторяющиеся данные, можно выполнить запрос специального вида
                — «Повторяющиеся записи». Раскройте список запросов в окне базы
                данных, нажмите кнопку

                Создать

                (New), в появившемся диалоговом окне

                Новый запрос

                (New Query) выделите элемент

                Повторяющиеся записи

                (Find
                Duplicates Query Wizard) и нажмите кнопку ОК. (Более подробно о создании запросов
                см. гл. 4.)




                Замечание



                Если записи вставляются
                в таблицу, ключом которой является поле типа Счетчик (AutoNumber), то при
                добавлении новых записей они перенумеровываются в соответствии с последним
                значением счетчика. То есть даже если значения этого поля в добавляемых записях
                будут совпадать с ключами в уже существующих записях, они будут вставлены,
                при этом значения ключей в новых записях будут отличаться от тех, что они
                имели до вставки.



                Access позволяет
                не только добавить в таблицу записи из буфера обмена, но и заменить уже существующие
                в таблице записи. При этом все столбцы данных, скопированные в буфер обмена,
                должны соответствовать полям таблицы Access, причем первый столбец обязательно
                должен соответствовать первому полю. Однако в буфере обмена могут быть не все
                столбцы таблицы Access. В этом случае данные в полях таблицы, для которых отсутствуют
                столбцы в буфере обмена, останутся неизменными. А вот число строк в буфере обмена
                должно соответствовать числу выделенных заменяемых строк в таблице. Это число
                не должно быть меньше, чем число строк в буфере. В противном случае данные из
                последних строк буфера будут игнорироваться. Процедура замены записей аналогична
                описанной выше процедуре добавления записей, только перед вставкой нужно выделить
                заменяемые записи в таблице.


                Простейшим
                способом экспорта данных из таблицы Access в другое приложение Windows также
                является копирование содержимого таблицы Access в буфер обмена с


                последующей
                вставкой в документ другого приложения. Например, чтобы скопировать таблицу
                Access в документ Word через буфер обмена:


                1. Откройте нужную таблицу
                  в режиме Таблицы (мы использовали для примера таблицу «Поставщики»).

                2. Выделите в этой таблице
                  нужный диапазон ячеек, нужное количество записей или все записи. Таблица «Поставщики»
                  примет вид, приведенный на рис. 3.48. Если необходимо выделить все поля во
                  всех записях таблицы, выберите команду

                  Правка, Выделить все записи

                  (Edit,
                  Select All Records) или щелкните левой кнопкой мыши по серому прямоугольнику
                  в левом верхнем углу окна на пересечении строки заголовков столбцов и столбца
                  выделения записей.





                Рис. 3.48.

                Выделенный диапазон ячеек в таблице «Поставщики»


                1. Нажмите комбинацию клавиш
                  <Ctrl>+<C> или выберите команду

                  Правка, Копировать,

                  чтобы
                  скопировать выделенные данные в буфер обмена.

                2. Запустите Microsoft
                  Word и создайте в нем новый документ, выбрав команду

                  Файл, Создать

                  (File,
                  New).

                3. Выберите команду

                  Правка,
                  Вставить

                  (Edit, Paste) или нажмите комбинацию клавиш <Ctrl>+<V>.
                  Данные из буфера обмена будут вставлены в документ Word в виде отформатированной
                  таблицы (рис. 3.49).


                Заметьте,
                что первая строка данных, копируемых Access в буфер обмена, всегда содержит
                названия столбцов таблицы. Если документ Word создается при помощи нескольких
                операций копирования, ненужные заголовки столбцов таблицы требуется удалить
                вручную.





                Рис. 3.49.

                Данные, импортированные в документ Word для Windows в виде таблицы

                Поделитесь этой записью или добавьте в закладки

                Полезные публикации

                • » Microsoft Internet Explorer: иллю
                • » Microsoft Office XP: иллюстрирова
                • » Информационные угрозы
                • » Электронный документооборот: иллю
                • » Microsoft Frontpage: иллюстрирова
                • » Microsoft Access: иллюстрированны
                • » Microsoft Outlook: иллюстрированн
                • » ИОАНН СКОТ ЭРИУГЕНА
                • » Методика проведения классического
                • » Лекарственные растения часть 1
                • » Греческая античная философия
                • » Энциклопедия планеты
                • » На заре военной истории
                • » Апитерапия и лечение продуктами п
                • » Загрязнение окружающей среды — об
                • » Читать дальше…

                Понравилась статья? Поделить с друзьями:
              • Ошибки вследствие невнимательности как пишется
              • Ошибки вызванные индивидуальной ограниченностью людей бэкон называет идолами
              • Ошибки выживших теория выживших
              • Ошибки всех приложений на андроид
              • Ошибки выживших статья