用新数据替换SQL数据表

时间:2014-02-28 21:01:11

标签: sql-server vba ms-access

我有以下代码,它从访问SQL Server表上传数据。问题是当我尝试更新它时,它不会覆盖/替换表。我得到一个错误,说该表已经存在。我需要添加一些代码来删除表,以便可以上传新表或者将新的/编辑过的记录附加到表中。

Public Function Update()
DoCmd.TransferDatabase _
        acExport, _
        "ODBC Database", _
        "ODBC;" & _
            "Driver={SQL Server Native Client 10.0};" & _
            "Server=SERVER;" & _
            "Database=DB;" & _
            "UID=ID;" & _
            "PWD=PW;", _
        acTable, _
        "CDData", _
        "AC_CDData", _
        False
End Function

所以AC_CDData表是需要替换的表

1 个答案:

答案 0 :(得分:2)

如果要在传输新目标表之前删除现有目标表,则代码将更像这样:

Option Compare Database
Option Explicit

Public Function TransferTableToSqlServer()
    Dim cdb As dao.Database, qdf As dao.QueryDef
    Dim err As dao.Error
    Const DestinationTableName = "AC_CDData"
    Const ConnectionString = _
            "ODBC;" & _
                "Driver={SQL Server Native Client 10.0};" & _
                "Server=(local)\SQLEXPRESS;" & _
                "Database=YourDatabaseName;" & _
                "UID=YourSqlUserId;" & _
                "PWD=YourSqlPassword;"
    Set cdb = CurrentDb
    Set qdf = cdb.CreateQueryDef("")
    qdf.Connect = ConnectionString
    qdf.sql = _
            "IF EXISTS " & _
                "(" & _
                    "SELECT * FROM INFORMATION_SCHEMA.TABLES " & _
                    "WHERE TABLE_NAME='" & DestinationTableName & " '" & _
                ") " & _
            "DROP TABLE [" & DestinationTableName & "]"
    qdf.ReturnsRecords = False
    On Error GoTo TransferTableToSqlServer_qdfError
    qdf.Execute dbFailOnError
    On Error GoTo 0
    Set qdf = Nothing
    Set cdb = Nothing
    DoCmd.TransferDatabase _
            acExport, _
            "ODBC Database", _
            ConnectionString, _
            acTable, _
            "CDData", _
            DestinationTableName, _
            False
    Exit Function

TransferTableToSqlServer_qdfError:
    For Each err In dao.Errors
        MsgBox err.Description, vbCritical, "Error " & err.Number
    Next
End Function