gpt4 book ai didi

sql - 如何从 adodb 记录集 Excel VBA 中的一列中选择不同的值?

转载 作者:行者123 更新时间:2023-12-04 21:39:00 25 4
gpt4 key购买 nike

我有一个 ADODB.Recordset rs我从 DB 那里得到的。我现在必须重复使用这个记录集两次。

这是我的记录集的示例:

Mike     Client
John Manager
Karen Client
Joe Sub
Brian Manager

现在我需要得到所有的标题,所以我想得到:
Client
Manager
Sub

我知道有 rs.Filter ,但我不确定我是否可以从中选择不同的。

我也知道我可以克隆这个记录集:
Dim rs_clone As ADODB.Recordset
Set rs_clone = New ADODB.Recordset
rs_clone = rs.getrows()

是否可以只克隆不同的记录?或者有什么更好的方法?谢谢

最佳答案

在数据库中触发一个 sql 字符串为您提供了很大的空间来选择您想要返回的内容

小例子(在生产代码中使用我更喜欢的后期绑定(bind)),我要求从表列 MyColumn 中获取一个不同的列表

Dim cn As Object
Dim rs As Object

Set cn = CreateObject("ADODB.Connection")
cn.Open strConn
cn.CommandTimeout = 0

Set rs = CreateObject("ADODB.Recordset")
Set rs.ActiveConnection = cn


'=====================
rs.Open "SELECT Distinct MyColumn AS C FROM myTable"
strConn需要设置为正确的连接字符串。

编辑

无法触发 sql在这篇文章的帮助下数据库中的字符串 vba: get unique values from array我有以下解决方案。

如果您更喜欢早期绑定(bind),则需要引用以下内容:
  • Microsoft ActiveX 数据对象(我使用 6.1 库)
  • Microsoft 脚本运行时(这样我们就可以使用字典)

  • 代码如下:
    Option Explicit

    Global Const strConn As String = _
    "PROVIDER=MySQLprovider;" & _
    "P*SSWORD=MyPword;" & _
    "USER ID=MyLogin;" & _
    "INITIAL CATALOG=MyDB;" & _
    "DATA SOURCE=MyServer;" & _
    "USE PROCEDURE FOR PREPARE=1;" & _
    "AUTO TRANSLATE=True;"


    Sub getDistinctRecords()

    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.ConnectionTimeout = 0
    cn.Open strConn

    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    rs.ActiveConnection = cn

    '>>this mimics your record set with non-distinct members
    rs.Open _
    "SELECT 'a' as MyCol UNION ALL " & _
    "SELECT 'a' as MyCol UNION ALL " & _
    "SELECT 'b' as MyCol UNION ALL " & _
    "SELECT 'b' as MyCol"

    Dim Arr() As Variant
    Arr = rs.GetRows()

    Dim d As Scripting.Dictionary
    Set d = New Scripting.Dictionary

    Dim i As Long
    For i = LBound(Arr, 2) To UBound(Arr, 2)
    d(Arr(0, i)) = 1
    Next i

    Dim v As Variant
    For Each v In d.Keys()

    '>>d.Keys() is a Variant array of the unique values in myArray.
    '>>v will iterate through each of them.

    '>>to print to the immediate window
    Debug.Print v
    Next v

    '=====================
    'tidy up connection
    On Error Resume Next
    Set rs.ActiveConnection = Nothing
    On Error GoTo 0

    If Not (rs Is Nothing) Then
    If (rs.State And 1) = 1 Then rs.Close
    Set rs = Nothing
    End If
    If Not (cn Is Nothing) Then
    If (cn.State And 1) = 1 Then cn.Close
    Set cn = Nothing
    End If

    End Sub

    关于sql - 如何从 adodb 记录集 Excel VBA 中的一列中选择不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23345176/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com