2015-12-11 5 views
2

Я пытаюсь запустить следующий SQL-запрос в ACCESS 2013 VBA, но я получаю ошибки из-за неправильного форматирования (в этом случае я получаю «Semicolon (;) missing from end of statement»). Может ли кто-нибудь сказать мне, что я делаю неправильно в коде ниже, пожалуйста?SQL-оператор в VBA

Dim dbs As dao.Database 

Set dbs = CurrentDb() 

dbs.Execute "INSERT INTO TEMP2 ([Study_Date], [Created_By], [Part_Number], 
[Upper_Tolerance], [Lower_Tolerance], [ID21_Number]) VALUES ([Study_Date], 
[Created_By], [Part_Number], [Upper_Tolerance], [Lower_Tolerance], [ID21_Number]) 
FROM RAC_DATA_ENTRY 
WHERE [RAC_CAP_VALS] = '" & Me.[RAC_CAP_VALS] & "'" 

ответ

6

Не используйте VALUES, когда вы тянете данные из одной таблицы в INSERT в другую. Вместо этого используйте SELECT.

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

Dim strInsert As String 
strInsert = "INSERT INTO TEMP2 ([Study_Date], [Created_By])" & _ 
    " SELECT [Study_Date], [Created_By] FROM RAC_DATA_ENTRY" & _ 
    " WHERE [RAC_CAP_VALS] = '" & Me.[RAC_CAP_VALS].Value & "';" 
Debug.Print strInsert '<- view this in Immediate window; Ctrl+g will take you there 
dbs.Execute strInsert, dbFailOnError 

Примечание:

  1. точка с запятой в конце оператора не является обязательным. Доступ будет считать утверждение действительным с или без него.
  2. Value на самом деле не требуется после Me.[RAC_CAP_VALS], так как это свойство по умолчанию. Я предпочитаю сделать это явным.
  3. dbFailOnError дает вам лучшую информацию о неудачных вставках. Без этого проблема, такая как нарушение первичного ключа, терпит неудачу.
  4. Debug.Print strInsert позволяет вам ознакомиться с созданным вами заявлением и попросить выполнить команду db. Если есть проблема, вы можете скопировать текст из окна Immediate и вставить его в SQL View нового запроса Access для тестирования.
+0

Привет, спасибо за это, но я получаю несоответствие типа данных при запуске кода, в непосредственном окне я вижу, что содержимое полей верное, но затем получите эту ошибку (3464). Любая идея, что может быть неправильным? – RACdB

+0

Является ли тип данных вашего поля 'RAC_DATA_ENTRY.RAC_CAP_VALS' численным вместо текста? Если это так, отбросьте одинарные кавычки до и после 'Me. [RAC_CAP_VALS] .Value' следующим образом:' 'WHERE [RAC_CAP_VALS] =" & Me. [RAC_CAP_VALS] .Value & "; "' – HansUp

+1

Отлично, это сработало, спасибо - просто теперь нужно сгладить мириады других икот! – RACdB