2014-02-28 41 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