2013-11-06 4 views
2

Как я могу структурировать блок SQL VBA, чтобы я мог выполнять несколько операторов SQL без необходимости открывать БД для каждой отдельной инструкции SQL?как отделить инструкции SQL в Access VBA

Например, я попробовал оба следующих блока кода, но получил сообщение об ошибке, что в предложении FROM было что-то не так.

Dim dbs As Database 

    Set dbs = OpenDatabase("path\database.mdb") 

    dbs.Execute " INSERT INTO table1 (col1,col2,col3) " _ 
       & "SELECT F1,F2,Format$(Now(),'Short Date') " _ 
       & "FROM table2" _ 
       & "DROP table2;" 
    dbs.Close 

и

 Dim dbs As Database 

     Set dbs = OpenDatabase("path\database.mdb") 

     dbs.Execute " INSERT INTO table1 (col1,col2,col3) " _ 
        & "SELECT F1,F2,Format$(Now(),'Short Date') " _ 
        & "FROM table2 " _ 
        & "GO " _ 
        & "DROP TABLE table2   
     dbs.Close 

ответ

3

Почему бы просто не использовать второй звонок для .Execute?

Dim dbs As Database 

Set dbs = OpenDatabase("path\database.mdb") 

dbs.Execute "INSERT INTO table1 (col1,col2,col3) " _ 
      & "SELECT F1,F2,Format$(Now(),'Short Date') " _ 
      & "FROM table2" 

dbs.Execute "DROP TABLE table2" 

dbs.Close 
3

Если таблицы связаны с базой данных доступа, то вы можете просто использовать DoCmd.RunSQL & DoCmd.DeleteObject команды так:

DoCmd.RunSQL "INSERT INTO table1 (col1, col2, col3) " & _ 
      "SELECT F1, F2, Format(Date(), 'mm/dd/yyyy') " & _ 
      "FROM table2" 

DoCmd.DeleteObject acTable, "table2" 

Меньше кода необходим и не требуется открытие и закрытие соединения.

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