我已经通过ms access作为前端构建了一个程序,并将DATA IN保存在sql server数据库中。我的程序中也有一些本地表。 我的程序通过连接字符串连接到sql server,我可以读取,写入,删除和更新数据。有时我需要将查询结果复制到本地表中以进行访问,有时我想将其中一个访问表附加到sql桌子
我已经写了一个连接,并试图像这样执行它:
Function CopyData()
Dim cn as ADODB.Connection
Dim strServer, strDatabase, strUsername, strPassword As String
Dim strConnectionString As String
strServer = "10.25.2.120"
strDatabase = "dbKala"
strUsername = "javid"
strPassword = "1234"
strConnectionString = "Provider=SQLOLEDB;Data Source=" & strServer & ";Initial Catalog=" & strDatabase & ";User ID=" & strUsername & ";Password=" & strPassword & ";"
Set cn = New ADODB.Connection
cn.ConnectionString = strConnectionString
cn.CommandTimeout = 0
cn.Open
cn.Execute "INSERT INTO GetTelServer Select * FROM dbo.telefone"
End Function
但是没有从sql复制数据来访问,并且向我显示了有关无效对象的消息,我的访问表 我需要帮助我如何从sql复制查询以访问表,反之亦然
答案 0 :(得分:1)
使用链接的DAO.Tables可以使此任务容易得多,但需要用于SQL Server的适当的ODBC驱动程序。
如果Ms-Access和SQL-Servers位数匹配(x64),则可以尝试在SQL-Server上使用OPENROWSET从那里访问Ms-Access表。
例如
INSERT INTO SqlServerTable (SqlServerField) SELECT AccessField FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',AccessTable);
如果位数不匹配,则必须创建2个不同的连接并使用记录集(或使用Action-Query进行插入)
一个rs用于选择数据,第二个用于插入:
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Dim cn2 As ADODB.Connection, rs2 As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=SQLNCLI11;Server=server;Database=db;Trusted_Connection=yes;"
Set cn2 = New ADODB.Connection
cn2.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Path\To\AccessDb;"
Set rs = cn.Execute("SELECT SqlServerField FROM SQLSERVERTable")
Set rs2 = cn2.Execute("SELECT AccessField FROM AccessTable")
Do Until rs2.Eof
rs.AddNew
rs.Fields("SqlServerField").Value = rs2.Fields("AccessField").Value
rs.Update
rs2.MoveNext
Loop
rs.Close
rs2.Close
cn.Close
cn2.Close
当然,字段数据类型必须兼容。