Access 2003重新链接SQL表时触发3265错误的问题求助
解决Access VBA错误3265:集合中未找到项目
你的代码触发3265错误主要有几个核心问题,对应修正方案如下:
删除表前未校验表是否存在
如果SysTrafficLinkTbls中记录的表名当前不存在于数据库的TableDefs集合里,执行db.TableDefs.Delete就会直接报错。必须先判断表是否存在,再执行删除操作。重复调用CurrentDb()导致对象实例不一致
代码开头已经把当前数据库赋值给db对象,但后续创建TableDef时又调用CurrentDb.CreateTableDef——每次调用CurrentDb都会生成新的数据库实例,容易引发集合操作的异常,全程统一使用db对象即可。连接字符串认证方式冲突
你同时在连接字符串里指定了Windows认证(Trusted_Connection=Yes)和SQL Server账号认证(UID=sa;PWD=xxx),这两种方式不能同时生效,需要根据实际情况保留其中一种。
修正后的代码:
Sub LinkODBC() Dim db As DAO.Database Dim td As DAO.TableDef Dim connString As String Dim rs As DAO.Recordset Dim tblName As String Set db = CurrentDb() ' 二选一:保留SQL Server账号认证就去掉Trusted_Connection=Yes connString = "ODBC;Driver={ODBC Driver 17 for SQL Server};Server=192.168.0.4;Database=testdbAllTables;UID=sa;PWD=tv$akP4O30HM1TO2!9lI2z6c" ' 或者用Windows认证: ' connString = "ODBC;Driver={ODBC Driver 17 for SQL Server};Server=192.168.0.4;Database=testdbAllTables;Trusted_Connection=Yes" Set rs = db.OpenRecordset("SELECT Name FROM SysTrafficLinkTbls") Do While Not rs.EOF tblName = rs!Name ' 先判断表是否存在于TableDefs中 If TableExists(db, tblName) Then db.TableDefs.Delete tblName End If ' 统一使用db对象创建并追加链接表 Set td = db.CreateTableDef(tblName, dbAttachSavePWD, "dbo." & tblName, connString) db.TableDefs.Append td rs.MoveNext Loop ' 释放对象 rs.Close Set rs = Nothing Set td = Nothing Set db = Nothing End Sub ' 辅助函数:判断表是否存在于指定数据库的TableDefs中 Function TableExists(db As DAO.Database, tblName As String) As Boolean Dim td As DAO.TableDef On Error Resume Next Set td = db.TableDefs(tblName) TableExists = Err.Number = 0 Set td = Nothing On Error GoTo 0 End Function
内容的提问来源于stack exchange,提问作者srdjan sai
相关产品推荐
相关产品推荐

