我有以下代碼應該取消鏈接一個表中列出的所有 Access 2003 表并鏈接 SQL 表,但它給出了錯誤:3265 在此集合中找不到專案。桌子不是空的,不知道是什么問題。
Sub LinkODBC()
Dim db As DAO.Database
Dim td As DAO.TableDef
Dim connString As String
Dim rs As DAO.Recordset
Set db = CurrentDb()
connString = "ODBC;Driver={ODBC Driver 17 for SQL Server};Server=192.168.0.4;Database=testdbAllTables;Trusted_Connection=Yes;UID=sa;PWD=tv$akP4O30HM1TO2!9lI2z6c"
Set rs = db.OpenRecordset("SELECT Name FROM SysTrafficLinkTbls")
Do While Not rs.EOF
' Deletes Access table if exists
db.TableDefs.Delete rs!Name
' Link table
Set td = CurrentDb.CreateTableDef(rs!Name, dbAttachSavePWD, "dbo." & rs!Name, connString)
db.TableDefs.Append td
rs.MoveNext
Loop
End Sub
uj5u.com熱心網友回復:
考慮這段代碼:
' Deletes Access table if exists
db.TableDefs.Delete rs!Name
評論說如果該表存在則洗掉該表。但是,您的代碼將嘗試洗掉一個表,無論它是否存在。當表不存在時,嘗試洗掉它會觸發 3265 錯誤:“在此集合中找不到專案。”
您可以使用兩種方法來避免該錯誤。
- 檢查表是否存在,只有當它存在時才嘗試洗掉。
- 修改代碼以忽略 3265 錯誤。
您在上一個問題中包含的示例代碼使用第一種方法。它查看TableDefs集合以查看表是否存在,并且僅db.TableDefs.Delete在找到表時呼叫。
這是第二種方法的示例。
On Error GoTo LinkODBC_Err
Set db = CurrentDb()
connString = "ODBC;Driver={ODBC Driver 17 for SQL Server};Server=192.168.0.4;Database=testdbAllTables;Trusted_Connection=Yes;UID=sa;PWD=tv$akP4O30HM1TO2!9lI2z6c"
Set rs = db.OpenRecordset("SELECT [Name] FROM SysTrafficLinkTbls")
Do While Not rs.EOF
' Delete Access table
db.TableDefs.Delete rs!Name
' Link table
Set td = CurrentDb.CreateTableDef(rs!Name, dbAttachSavePWD, "dbo." & rs!Name, connString)
db.TableDefs.Append td
rs.MoveNext
Loop
LinkODBC_Exit:
Exit Sub
LinkODBC_Err:
Select Case Err.Number
Case 3265 'Item not found in this collection
Resume Next ' ignore the error and continue on
Case Else
' for any other errors, notify the user and exit
MsgBox Err.Number & ": " & Err.Description
Resume LinkODBC_Exit
End Select
End Sub
uj5u.com熱心網友回復:
有幾種方法可以做到這一點。這是一種選擇。
DoCmd.TransferDatabase _
acImport, _
"ODBC Database", _
"ODBC;Driver={SQL Server};Server=Fos;Database=Hermes;Trusted_Connection=Yes", _
acTable, _
"sourceTable", _
"targetTable"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505140.html
