【问题标题】:Replacing SQL Data Table with New Data用新数据替换 SQL 数据表
【发布时间】:2014-02-28 21:01:11
【问题描述】:

我有以下代码,它将数据从访问权限上传到 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表

【问题讨论】:

    标签: sql-server vba ms-access


    【解决方案1】:

    如果您想在传输新的目标表之前删除现有的目标表,那么代码将更像这样:

    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
    

    【讨论】:

    • 我收到一个 ODBC 调用错误,它突出显示 QDF.EXECUTE dbFailOnError
    • @user2119980 SQL 用户是否有足够的权限来删除表?
    • 通常我只需要点击删除然后验证。并且登录信息是管理员登录凭据
    • @user2119980 在 SQL Server Management Studio 中尝试IF EXISTS ... DROP TABLE 查询,看看它是否在那里工作。在发布我的答案之前,我针对 SQL Server 2008 R2 测试了该 VBA 代码,它对我来说很好。
    • @user2119980 您使用的是什么版本的 SQL Server?
    猜你喜欢
    • 2016-05-22
    • 2011-07-24
    • 1970-01-01
    • 2015-09-05
    • 2019-02-24
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多