我们有一个Access DB,它有一组本地表和输入表单等,用户可以在其中维护数据。
我们还有一个具有相同表格的SQL DB,用于在Web搜索表单中显示数据。
允许用户更改SQL数据库的最佳方法是什么,同时保持工作副本本地化以便他可以脱机工作,然后在他对新版本的数据感到满意时推送文件?
我的第一个想法是将SQL表添加为链接表,然后我可以截断(访问就是这样)或删除每个表中的内容,然后为每个表执行插入。
我是否可以通过访问SQL来调用SP以截断表,因为我在运行删除时遇到问题
我确实希望将其归结为运行可重复的宏/ sql调用的用户等。
感谢您的帮助
答案 0 :(得分:1)
您应该能够使用ADODB.Command对象来执行存储过程。
编辑:
此示例是从Using ADO in VB and Access
复制的Sub ADO_COMMAND_CONNECTION_TEST()
Dim cmd As New ADODB.Command
Dim rs As ADODB.Recordset
Dim strConn As String
cmd.ActiveConnection = " DRIVER={SQL Server};" & _
"Server=UKDUDE;DATABASE=pubs;UID=sa;PWD=;"
cmd.CommandText = "byroyalty"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters(1).Value = 25
Set rs = cmd.Execute
' Recordset now has authors with 25% royalty.....
End Sub
答案 1 :(得分:1)
不要将MS Access链接表与MS SQL一起使用。
它们不仅速度慢,而且可以在引用的表上保留开放的客户端写入游标。这是创建大量死锁的一种非常愚蠢的方式,但无论如何Access都会这样做。
Microsoft在添加Access Data Projects时对此进行了大幅改进 - 在这些项目中,整个后端被SQL替换,Access只提供表单。
如果您希望用户操作直接写回,那么ADP是迄今为止最好的方法。
如果要在Access数据库中本地缓存更改,然后将它们发送到SQL,则会出现更复杂的问题。您需要更准确地了解您希望同步发生的具体方式 - 例如,如果两个用户进行离线更改,他们在连接时会获胜?
答案 2 :(得分:1)
我不明白为什么你不直接链接到SQL Server数据并直接使用它,而不是去维护它的第二个副本。这是做事的标准Access方式 - 为什么你要抵制你正在使用的工具的自然功能?