2014-10-10 2 views
0

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

Private Sub Command0_Click() 


If IsNull(NewSupBox.Value) Or IsNull(NewNumberBox.Value) Then 
MsgBox ("All fields must be filled") 
GoTo ErrorExit 
End If 

If Not IsNull(DLookup("SupplierNumber", "SupGenInfo ", "SupGenInfo.SupplierNumber =" &  NewSupBox)) = Then 
MsgBox ("This supplier number already exists. You can edit the current record on the Edit  supplier page.") 
GoTo ErrorExit 
End If 

Dim db As Database 
Dim rec As Recordset 
Set db = CurrentDb 
Set rec = db.OpenRecordset("select * from SupGenInfo") 

rec.AddNew 
rec("SupplierNumber") = Me.NewSupBox.Value 
rec("SupplierName") = Me.NewNameBox.Value 
rec.Update 

Set rec = Nothing 
Set db = Nothing 



MsgBox "Records added successfully." 
ErrorExit: 

End Sub 

Редактировать: Забыл, что у меня нет сообщения об ошибке. Команда просто не добавит новую запись в мою таблицу.

Edit2: Приведенный выше код выведет сообщение msg «Записи успешно», когда я удалю следующий блок кода.

Dim db As Database 
Dim rec As Recordset 
Set db = CurrentDb 
Set rec = db.OpenRecordset("SupGenInfo") 

rec.AddNew 
rec("SupplierNumber") = Me.NewSupBox 
rec("SupplierName") = Me.NewNameBox 
rec.Update 

Set rec = Nothing 
Set db = Nothing 

Именно этот код включен, что мой клик команды становится неактуальным.

+1

Что в этом плохого? – JNevill

+0

Когда я нажимаю команду, ничего не происходит. Моя таблица оставлена ​​без изменений и сообщений об ошибках нет. У меня есть аналогичный код для этого в моей базе данных в другой форме, которая отлично работает. –

+0

Вы отметили его как VBA? Какое приложение использует этот код? Также откуда взялся 'CurrentDb'? Вы пытаетесь использовать/использовать ** ADODB ** или это что-то еще? Просьба уточнить ваш вопрос и добавить соответствующие теги. – L42

ответ

0

Я считаю, что вы читаете таблицу (для отображения) с помощью своего оператора select * ..., то вы добавляете в этот список новую запись, а не фактическую базу данных. Когда вы открываете OpenRecordset, просто укажите имя таблицы, а не весь запрос SQL shebang ...

Я создал новую таблицу, поэтому отредактируйте этот код в соответствии с вашими параметрами/значениями, в противном случае это было проверено на работу:

Dim db As Database 
Dim rec As Recordset 
Set db = CurrentDb 
Set rec = db.OpenRecordset("Table1") 

rec.AddNew 
rec("Field1") = 1234 
rec("Field2") = "blah2" 
rec("Field3") = "blah3" 
rec.Update 

Set rec = Nothing 
Set db = Nothing 

Надеюсь, это поможет.

+0

Благодарим за отзыв! Протестировал этот код, и он не работает для меня. Поскольку код работает с вашей стороны, я обеспокоен тем, что у меня есть более сложная проблема. –

+0

У меня есть Access 2010, и он может не обновлять таблицу мгновенно (мне пришлось закрыть и снова открыть таблицу, но она действительно сработала ...) – nurchi

+0

Я просто прочитал ваше редактирование, это может показаться глупым, но вы можете проверить права на запись на файл? Является ли это локальной БД или одним сидением в сети? VBA может работать по-разному, если БД находится в сетевом расположении (по соображениям безопасности ...). – nurchi

Смежные вопросы