【发布时间】:2019-01-18 16:57:45
【问题描述】:
我正在尝试在 MS Access 中编写查询以打开与本地 SQL Server 的连接,然后将选择表导入 MS Access。
我的代码一直运行到Cn.Execute 语句。我明白了
运行时错误“-2471765 (80040e37)”[Microsoft][ODBC SQL Server Driver][SQL Server] 无效的对象名称“dbo_SQLServertable”。
我需要导入其他表,因此我需要一个在我更改表名时可以使用的代码。
Private Sub Command28_Click()
Dim Cn As ADODB.Connection
Dim Server_Name As String
im Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Server_Name = "" ' Enter your server name here
Database_Name = "Test" ' Enter your database name here
User_ID = "" ' enter your user ID here
Password = "" ' Enter your password here
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & ";"
Cn.Execute "INSERT INTO Access Table SELECT dbo_SQLServerTable.* FROM dbo_SQLServerTable;"
Set rs = Nothing
Cn.Close
Set Cn = Nothing
我进行了更改并收到一条新的错误消息
运行时错误 '-2147216900 (80040e14)' [Microsoft][ODBC SQL Server Driver][SQL Server] 无法将值 NULL 插入列 'DiagnosisOrdinal',表 'Office.dbo.Test' 列不允许空值。插入失败。
我的插入语句似乎仍在引用(或尝试引用)SQL 服务器中的表。 'Office' 是我从中提取的数据库名称。
我是否必须关闭连接,然后将数据粘贴到我的本地 Access 表中?如果我想对多个表执行此操作,我是否必须重新打开和关闭连接?
我将执行语句从
Cn.Execute "INSERT INTO Access Table SELECT dbo_SQLServerTable.* FROM dbo_SQLServerTable;"
到
Cn.Execute "INSERT INTO Test(VisitID, Provider) SELECT VisitID, Provider FROM dbo.SQLServerTable;"
【问题讨论】:
-
表名真的是“dbo_SQLServerTable”吗?可能应该是“dbo.SQLServerTable”。这是第一个错误。可能您会收到另一条关于 "Access Table" 的错误消息。将表格放入括号中,如[Access Table]。
-
另外,如果您没有在插入语句中提供要插入的列,则意味着 [Access Table] 和 SQLServerTable 表具有相同的表结构。这是正确的吗?
-
目标表是否存在于Access中,或者您打算访问以从sql中创建表?
-
我首先从 SQL Server 手动导入该表,因为我不想在我的 VBA 代码中列出所有字段。我以为我可以只运行“SELECT *”,但也许不是这样
-
你可以。基本问题仍然存在,您是要创建新表还是追加到现有表中?
标签: sql sql-server ms-access vba