2012-01-24 6 views
0

В настоящее время я пытаюсь сделать несколько вложений из базы данных доступа на удаленный сервер sql. До сих пор мне не повезло. Когда я пытаюсь выполнить код в рабочей области и транзакции, я получаю ошибку несоответствия данных, но функциональный insert работает отлично отлично.Microsoft Access - несколько транзакций при вставке в удаленную базу данных

Вот мой код: Сделка Один закомментированое

Private Sub cmdInsSqlSrvr_Click() 
On Error GoTo ErrHandler 

    Dim dbAccess As DAO.Database 
    Dim strTableName As String 
    Dim strSQL As String 
    Dim strSqlServerDB As String 
    Dim strTableName2 As String 
    Dim cInTrans As Boolean 
    Dim wsp As DAO.Workspace 


    strTableName = "po_header_sql" 
    strTableName2 = "po_line_Sql" 

    '<configuration specific to SQL Server ODBC driver> 
    strSqlServerDB = "ODBC;DRIVER={SQL Server};" & _ 
        "Server=;" & _ 
        "DATABASE=;" & _ 
        "Uid=;" & _ 
        "Pwd=;" 


    'Start Transaction One 
    'Set dbAccess = DBEngine(0)(0) 

' strSQL = "INSERT INTO [" & strSqlServerDB & "].TABLE3 SELECT * FROM " & strTableName & ";" 
    'dbAccess.Execute strSQL, dbFailOnError 
    'InitConnect = True 

    'MsgBox (dbAccess.RecordsAffected & " records have been moved from " & strTableName & " to remote DB") 
    'Command9.SetFocus 
    'cmdInsSqlSrvr.Enabled = False 
    'cmdInsertTbl.Enabled = True 

' End Transaction One 

'Begin Transaction Two 

    Set wsp = DBEngine(0)(0) 
    wsp.BeginTrans 
    Set dbAccess = wsp(0) 
    cInTrans = True 

    strSQL = "INSERT INTO [" & strSqlServerDB & "].TABLE4 SELECT * FROM " & strTableName2 & ";" 
    dbAccess.Execute strSQL, dbFailOnError 
    InitConnect = True 

    MsgBox (dbAccess.RecordsAffected & " records have been moved from " & strTableName & " to remote DB") 
    wsp.CommitTrans 
    cInTrans = False 
    Command9.SetFocus 
    cmdInsSqlSrvr.Enabled = False 
    cmdInsertTbl.Enabled = True 

'End Transaction Two 

ExitProcedure: 
    On Error Resume Next 
    Set dbAccess = Nothing 
Exit Sub 

ErrHandler: 
    InitConnect = False 
    MsgBox Err.Description, vbExclamation, "Moving data to Sql Server failed: Error " & Err.Number 
    Resume ExitProcedure 

End Sub 
+0

Какую версию Access вы используете, я не думаю, что вы можете запустить «ВСТАВИТЬ» заявление, как это в Access, которая будет вставить в удаленную базу данных, только в локальной базе данных Access, но он не будет распознавать имя таблицы. –

ответ

0

Fixed это путем разделения инструкции вставки и положить dbAccess.Execute после каждого из них. Также существенно почистил код. Код следующим образом:

Private Sub cmdInsSqlSrvr_Click() 
On Error GoTo ErrHandler 

    Dim dbAccess As DAO.Database 
    Dim strTableName As String 
    Dim strSQL As String 
    Dim strSqlServerDB As String 
    Dim strTableName2 As String 

    strTableName = "po_header_sql" 
    strTableName2 = "po_line_Sql" 

    '<configuration specific to SQL Server ODBC driver> 
    strSqlServerDB = "ODBC;DRIVER={SQL Server};" & _ 
        "Server=<server ip>;" & _ 
        "DATABASE=<database name>;" & _ 
        "Uid=<database uid>;" & _ 
        "Pwd=<database password>;" 

    Set dbAccess = DBEngine(0)(0) 

    strSQL = "INSERT INTO [" & strSqlServerDB & "].TABLE3 SELECT * FROM " & strTableName & ";" 
    dbAccess.Execute strSQL, dbFailOnError 

    MsgBox (dbAccess.RecordsAffected & " records have been moved from " & strTableName & " to remote DB") 

    strSQL = "INSERT INTO [" & strSqlServerDB & "].TABLE4 SELECT * FROM " & strTableName2 & ";" 
    dbAccess.Execute strSQL, dbFailOnError 
    InitConnect = True 

    MsgBox (dbAccess.RecordsAffected & " records have been moved from " & strTableName2 & " to remote DB") 
    Command9.SetFocus 
    cmdInsSqlSrvr.Enabled = False 
    cmdInsertTbl.Enabled = True 


ExitProcedure: 
    On Error Resume Next 
    Set dbAccess = Nothing 
Exit Sub 

ErrHandler: 
    InitConnect = False 
    MsgBox Err.Description, vbExclamation, "Moving data to Sql Server failed: Error " & Err.Number 
    Resume ExitProcedure 

End Sub