【问题标题】:VBA: Compare two record sets and return records that are available in record set 1 and not available in record set 2VBA:比较两个记录集并返回记录集 1 中可用且记录集 2 中不可用的记录
【发布时间】:2016-10-02 05:26:24
【问题描述】:

我正在尝试通过 excel 宏运行查询,从两个表中获取数据。我想比较两个表的差异。我有两个记录集,每个记录集接近 100 列。我需要比较两个记录集并返回不匹配的记录。在以下条件下,

  1. 列名是动态的,不能定义为静态的
  2. 根据我们传递的查询,列数可能会有所不同
  3. 记录数可能更多,我们不应将完整记录集复制到任何 Excel 工作表中

通过下面的代码,我正在生成记录集。谁能帮我比较这些记录集而不定义列(即,我需要比较完整记录而不是逐列)

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim rs1 As ADODB.Recordset
Dim sConnString As String
Dim sql As String


sConnString = "Provider=ASEOLEDB;Data Source=<Servername> Initial Catalog=<DB Name>;User Id=<UserID> Password=<Pwd>"

Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set rs1 = New ADODB.Recordset
conn.Open sConnString
If conn.State = adStateOpen Then
MsgBox ("Success")
End If

Set rs = conn.Execute("SELECT * FROM Table1;")
Set rs1 = conn.Execute("SELECT * FROM Table2;")
rs.Close
rs1.Close
conn.Close

【问题讨论】:

  • 您似乎有一个能够处理 SQL 查询的工作数据库服务器。那么,您为什么要在 Excel 中(使用 VBA)做数据库服务器注定要做的事情(更快、更高效)?
  • 好问题..!以上是示例代码。我实际上想要做的是从两个表中提取数据,一个来自 Sql server,另一个来自 Sybase,并尝试比较两者。或多或少,它就像验证迁移的数据。我无法在我的工作系统中添加或修改服务器,我能想到的更简单的方法是使用 VBA。希望你能给我一个解决方案。
  • 好一个..!但是我无法建立链接服务器连接,因为我被限制在我的客户端系统中这样做。我已经通过 SQL 尝试了所有可能的解决方案,经过所有分析,我摆脱了它并尝试使用外部应用程序/工具。

标签: excel vba macros adodb


【解决方案1】:

我同意。我相信你可以在 Excel 中做到这一点,但为什么要麻烦呢?只需运行 Access '查找不匹配的查询向导'。有关其工作原理的简短演示,请参见下面的链接。

https://www.youtube.com/watch?v=lktivZpKutc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多