2016-08-16 2 views
2

Я проверил запрос UPDATE в конструкторе запросов Access, и он работает, но когда я пытаюсь использовать его в моем модуле, я получаю ошибку:Почему запрос действия не работает в доступе к VBA?

Invalid SQL заявление; ожидается ... или «ОБНОВЛЕНИЕ».

Мой запрос:

strSql = "UPDATE " & rs.Fields("tableName") & _ 
" SET " & rs.Fields("foreignKeyName") & " = " & rsContacts.Fields("contactId") & _ 
" WHERE contactId = " & ContactID 
  • RS: таблица, которая имеет TABLENAME, foriegnKeyName таблиц для обновления
  • rsContacts: список contactIds (в настоящее время, стоя на в частности,).

Фактическая строка выходит так:

UPDATE myTable SET ContactId = 5 WHERE contactId = 2 

Если запрос работает, и это является в запрос, почему я получаю эту ошибку?

Это мой полный код:

Public Sub updateChildTables(ByVal ContactID As Long, ByVal CompanyID As Long) 
    Dim strSql As String 
    Dim rs As Recordset 
    Dim rsPending As Recordset 

    strSql = "SELECT contactID FROM contacts _ 
       WHERE companyId = " & CompanyID & " and contactId <> " & ContactID 
    Set rs = CurrentDb.OpenRecordset(strSql) 
    If Not (rs.BOF And rs.EOF) Then 
     rs.MoveFirst 
     strSql = "SELECT * FROM childTables" 
     Set rsChild = CurrentDb.OpenRecordset(strSql) 
     rsChild.MoveFirst 
     Do While Not rsChild.EOF 
      strSql = "UPDATE " & rsChild.Fields("tableName") & " SET " & rsChild.Fields("foreignKeyName") & " = " & rs.Fields("contactId") & " WHERE contactId = " & ContactID 
      DoCmd.RunSQL strSql 
      rs.moveNext 
     Loop 
     rsChild.Close 
     Set rsChild = Nothing 
    End If 
+0

Это случается очень часто, когда данные имеют значение. Можете ли вы проверить, есть ли какие-либо одиночные кавычки? – Whencesoever

+0

Можете ли вы разместить соответствующий код, включая команду, выполняющую его и SQL из запроса? – Hambone

+0

@JanWalczak, я не вижу. – MJH

ответ

2

Вот моя идея для отладки и, возможно, даже разрешения этого.

Создайте запрос изнутри Access нормально - назовите его UpdateMyTable, ради этого примера.

Затем, вместо использования DoCmd, на самом деле выполните этот конкретный запрос из своего VBA.

Dim qry As QueryDef 

strSql = "UPDATE " & rsChild.Fields("tableName") & " SET " & _ 
    rsChild.Fields("foreignKeyName") & " = " & _ 
    rs.Fields("contactId") & " WHERE contactId = " & ContactID 

Set qry = CurrentDb.QueryDefs("UpdateMyTable") 
qry.SQL = strSql 
qry.Execute 

Большим преимуществом является то, что вы можете очень легко отлаживать это изнутри доступа к обоим увидеть обработанную SQL и вручную запустить/настроить его.

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