Sql 如何从adodb记录集Excel VBA中的一列中选择不同的值?
我有一个ADODB。我从DB得到的录音集。我现在必须重复使用这个记录集两次 这是我的记录集示例:Sql 如何从adodb记录集Excel VBA中的一列中选择不同的值?,sql,vba,excel,recordset,Sql,Vba,Excel,Recordset,我有一个ADODB。我从DB得到的录音集。我现在必须重复使用这个记录集两次 这是我的记录集示例: Mike Client John Manager Karen Client Joe Sub Brian Manager Dim rs_clone As ADODB.Recordset Set rs_clone = New ADODB.Recordset rs_clone = rs.getrows() 现在我需要得到所有的标题,所以我想得到: Client M
Mike Client
John Manager
Karen Client
Joe Sub
Brian Manager
Dim rs_clone As ADODB.Recordset
Set rs_clone = New ADODB.Recordset
rs_clone = rs.getrows()
现在我需要得到所有的标题,所以我想得到:
Client
Manager
Sub
我知道有rs.过滤器,但我不确定是否可以选择与之不同的
我还知道我可以克隆此记录集:
Mike Client
John Manager
Karen Client
Joe Sub
Brian Manager
Dim rs_clone As ADODB.Recordset
Set rs_clone = New ADODB.Recordset
rs_clone = rs.getrows()
是否可以只克隆不同的记录?还是有更好的办法?谢谢在数据库中触发一个sql字符串,这给了您很大的空间来选择想要返回的内容 使用后期绑定的一个小示例,我更喜欢在生产代码中使用,我要求从表列MyColumn中获得一个不同的列表 strConn需要设置为正确的连接字符串 编辑 在这篇文章的帮助下,我无法在数据库中触发sql字符串,我得到了以下解决方案 如果您喜欢早期绑定,则需要参考以下内容: Microsoft ActiveX数据对象Im使用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字符串会给您很大的空间来选择想要返回的内容 使用后期绑定的一个小示例,我更喜欢在生产代码中使用,我要求从表列MyColumn中获得一个不同的列表 strConn需要设置为正确的连接字符串 编辑 在这篇文章的帮助下,我无法在数据库中触发sql字符串,我得到了以下解决方案 如果您喜欢早期绑定,则需要参考以下内容: Microsoft ActiveX数据对象Im使用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
这在vba Dim rs_克隆中作为ADODB.Recordset=New ADODB.Recordset合法吗?在vb.net中可以,但不确定是否可以在vba的一行中指定变量和实例化。对了,我只是在这里键入了它,但想法很清楚。对不起=永远不会再这样做=rs_clone=rs.getrows似乎无法在我的Excel上运行。这在vba中合法吗?Dim r_clone As ADODB.Recordset=New ADODB.Recordset?在vb.net中可以,但不确定是否可以在VBA的一行中分配变量和实例化。对,我只是在这里键入了它,但想法很清楚。对不起=永远不会再这样做=rs_clone=rs.getrows在我的Excel中似乎不起作用either@KarlRookey它有助于避免版本问题。@ckuhn203-这是所有对象变量的通用语句,还是仅仅用于处理数据库对象?我一直尝试提前绑定,因为它速度更快,但我想我听到你和whytheq说你会受到性能的影响,以减少版本兼容性问题的可能性。这是对的吗?@KarlRookey这是一个一般性的说法。使用vba时,后期绑定减少了臭名昭著的缺少引用。特别是在不同用户使用不同版本软件的情况下。比如说Office2003和Office2010。这里有两个链接,提供了有关该主题的更多信息,这一个在,@ckuhn203很容易使用早期绑定,所以你有intellisense等。然后一旦对代码感到满意,并且所有运行正常,我相信最好是转换到晚期binding@Bryuk在我的情况下,你说我必须用代码做是什么意思?您是否无法使用DISTINCT运算符在数据库中触发sql字符串?@KarlRookey它有助于避免版本问题。@ckuhn203-那么,这是所有对象变量的常规语句,还是仅用于处理数据库对象?我一直尝试提前绑定,因为它速度更快,但我想我听到你和whytheq说你会受到性能的影响,以减少版本兼容性问题的可能性。这是对的吗?@KarlRookey这是一个一般性的说法。使用vba时,后期绑定减少了臭名昭著的缺少引用。特别是在不同用户使用不同版本软件的情况下。比如说Office2003和Office2010。这里有两个链接,提供了有关该主题的更多信息,这一个在,@ckuhn203很容易使用早期绑定,所以你有intellisense等。然后一旦对代码感到满意,并且所有运行正常,我相信最好是转换到晚期binding@Bryuk在我的情况下,你说我必须用代码做是什么意思?是否无法使用DISTINCT运算符在数据库中激发sql字符串?