Типичные ошибки при выполнении запроса на добавление
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
95.8k11 gold badges76 silver badges135 bronze badges
asked Dec 7, 2015 at 12:37
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
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)))
параметры также выдают ту же ошибку @Hursey5. Неиспользование параметров откроет шлюзы, вы этого не хотите. Я хочу сказать, что кто-то может создать удобный запрос во входных данных, который может быть выполнен, и с помощью параметров помогает предотвратить это.
Ответ №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 для
приложений можно вывести на экран
информацию, предупреждение или сообщение
об ошибках. -
Печать информации.Несмотря на то,
что для печати информации чаще всего
используются отчеты, можно распечатать
информацию, содержащуюся в форме.
Поскольку для вывода формы на экран
можно определить один набор параметров,
а для печати – другой, форма может
играть двойственную роль. Например,
можно задать два заголовка и два
примечания для формы – одну пару
(заголовок и примечание) для ввода
заказа, а другую – для печати счета
по заказу.
Соседние файлы в папке Лекции
- #
- #
- #
- #
- #
- #
- #
- #
|
|
|
Ошибка вставки записи в БД MS Access
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Full Member Рейтинг (т): 9 |
Вставка происходит следующим образом (TAccessWorker — мой класс работы с MS Access): при создании формы:
ta := TAccessWorker.Create(‘db1.mdb’); вставка происходит так (TGood — произвольный класс):
good := TGood.Create; good.SetId(ta.getLastGoodId + 1); ta.insertGood(good); TAccessWorker.insertGood(good);(SQLInsert взят из DRKB)
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
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;
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:
… SQL.Text := ‘SELECT id from goods’; Open; Last; … . Также, если производить вставки в БД с меньгим интервалом, то программа падает с EOleException из-за того что я пытаюсь вставить запись с уже существующим Id. То есть видно getLastGoodId возращает ещё необновившийся id. Подскажите как бороться с этими 2-я проблемами… Сообщение отредактировано: SkyStar — 09.11.07, 04:19 |
dron-s |
|
а зачем ты сам себе жизни услажняешь со всем этим делом? |
MIF |
|
Зарегистрируй ID поле как счётчик и убери код генерации следующего ID из своего кода. |
Игорь Акопян |
|
а он наверное бездырочную нумерацию хочет Сообщение отредактировано: Игорь Акопян — 09.11.07, 11:16 |
MIF |
|
Цитата Игорь Акопян @ 09.11.07, 11:15 Он, судя по запросу, хватает первый попавшийся Не, там в коде есть Last. Если первичного ключа нет, то выбирает ID близкое к максимальному. |
Игорь Акопян |
|
Цитата MIF @ 09.11.07, 11:26 Не, там в коде есть Last. упс.. проглядел |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Базы данных
- Следующая тема
[ 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
Поделитесь этой записью или добавьте в закладки |
Полезные публикации
|