从sqlserver数据库复制数据以访问数据库,反之亦然

时间:2019-09-04 05:50:16

标签: ms-access sql-server-2012 ado

我已经通过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复制查询以访问表,反之亦然

1 个答案:

答案 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

当然,字段数据类型必须兼容。