Я запускаю некоторый код EXCEL VBA для обновления содержимого таблицы базы данных ACCESS в соответствии с предложенными здесь строками: IF @@Rowcount = 0 -- Синтаксическая ошибка SQL в Access . Когда я выполняю запрос SELECT, EXCEL VBA выдает это сообщение об ошибке:
Run-time error 424: Object required
Я извлек строку SQL из окна VBA Watch и запустил ее как запрос в ACCESS. В первый раз, когда я сделал это, не было никаких записей, потому что таблица была пустой, поэтому я выполнил запрос INSERT в ACCESS, а затем попытался запустить код VBA, но получил то же сообщение об ошибке.
Код здесь:
Public db As DAO.Database
' Open database
Public Sub OpenMdtDatabase()
Set db = DBEngine(0).OpenDatabase("SL_MDT_data_v1.accdb")
End Sub
' Update DB table
Sub UpdateDb()
' Initialise
Dim rs As DAO.Recordset
Set xlSht = Sheets("plot_data")
' Open database
Call OpenMdtDatabase
' Get the data to store
sname = xlSht.Cells(6, "R").Value
xfill = xlSht.Cells(6, "S").Value
xedge = xlSht.Cells(6, "T").Value
xstyl = xlSht.Cells(6, "U").Value
xsize = xlSht.Cells(6, "V").Value
' SQL stuff
sqlTxtSelect = "SELECT SeriesName FROM SeriesProperties WHERE SeriesName ='" & sname & "';"
sqlTxtUpdate = "UPDATE SeriesProperties " & _
sqlTxtUpdate = "SET SeriesFill = " & xfill & ", " & _
sqlTxtUpdate = "SeriesEdge = " & xedge & ", " & _
sqlTxtUpdate = "SeriesStyle = " & xstyl & ", " & _
sqlTxtUpdate = "SeriesSize = " & xsize & " " & _
sqlTxtUpdate = "WHERE SeriesName = '" & sname & "';"
sqlTxtInsert = "INSERT INTO SeriesProperties('" & sname & "') " & _
sqlTxtInsert = "VALUES(" & xfill & ", " & xedge & ", " & xstyl & ", " & xsize & ");"
Set rs = db.OpenRecordset(sqlTxtSelect)
If rs.RecordCount = 0 Then
DoCmd.RunSQL (sqlTxtInsert)
Else
DoCmd.RunSQL (sqlTxtUpdate)
End If
End Sub
Я предполагаю, что что-то не так со строкой SQL SELECT. Я попытался установить это напрямую, используя
SELECT SeriesName FROM SeriesProperties WHERE SeriesName ='14/10-2:F2F_SLMC'
но все равно получаю то же сообщение об ошибке. Я также попытался удалить двоеточие ...
Спасибо, CLR. Я исправил это, но все еще получаю ту же проблему
Проблема заключается в утверждении
DoCmd.RunSQL (sqlTxtInsert)
Если я изменю это на
db.Execute (sqlTxtInsert)
тогда все хорошо. Надо было до конца пролистать ответ по исходной ссылке....
Не ответ на ваш вопрос, следовательно, просто комментарий, но это не то, как объединить ваши строки SQL в VBA.
sqlTxtSelect
выглядит нормально, но два других приводят кFalse
.