2014-02-28 46 views
1

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

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表是需要更换

回答

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 
+0

我得到一个ODBC调用错误,它突出显示QDF.EXECUTE dbFailOnError – user2119980

+0

@ user2119980 SQL用户是否有足够的权限来删除表? –

+0

通常我只需点击删除然后验证。并且登录信息是管理员登录凭据 – user2119980