zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Excel的VBA - 搜索范围,并连接SQL ADODB记录集在

2023-04-18 13:04:16 时间

比赛写结果集我有两个数据源的Excel(2010)表:Excel的VBA - 搜索范围,并连接SQL ADODB记录集在

  1. Access 2010中的DB
  2. SQL Server 2008 R2的

我有A列中的数据:我来自Access DB。在A列中,我有记录的ID,这个ID对应于我的SQL DB表中的ID列。

我想通过在A列中的ID进行搜索,如果在SQL数据库的ID相匹配,我想从“coOverview”从SQL表中列J.

列在显示数据总之,“如果ID = COID,然后写coOverView列J”

Combined Dataset 我已经成功地能够连接并检索所需的记录集和复制/向下填充J列,所以我知道我能够成功连接并读取SQL表中的数据。现在我需要在coOverview数据从我的SQL表复制只有在ID A列ID

Sub RetrieveOverview() 

Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim ConnectionString As String 
Dim query As String 

Set cn = New ADODB.Connection 

    ConnectionString = "Provider=SQLOLEDB;Password=***;Persist Security Info=True;User ID=*****;Data Source=***;Initial Catalog=**" 

    cn.Open ConnectionString 
    cn.CommandTimeout = 900 


    query = "SELECT coOverview FROM SQLTable" 

    rs.Open StrQuery, cn 

    Sheets(1).Range("J2").CopyFromRecordset rs 
    End Sub 

我不知道我是否应该在条件中的SQL语句或循环相匹配。

sshel207

要清楚,你拉在两个数据集中,并将它们存储在Excel单元格?如果是这样,我会将两个范围都拉入数组并写入一个简单的比较循环。如果您拥有合理数量的数据,应该足够快。 –

Kyle, 不,我没有将两个数据集都存储在单元格中。我将一个数据集存储在一个范围(A:I)中,我想使用列A中的ID并将其与我在我的SQL语句中连接的SQL DB中表中的ID匹配。找到匹配的ID后,我想复制SQL表中“coOverview”列中的相应数据,并将其写入Excel电子表格中的J列。 –

你现在遇到的问题是什么?你说你已经成功地连接并检索了所需的记录集并复制/填写了J列。除此之外,你还想做什么? –

回答

这会通过A列并将唯一值添加到变量str。一旦完成,str将看起来像(138,353,....)。然后,可以将SQL语句中的WHERE子句插入,以便仅返回ID匹配的结果。请注意,如果您的ID是SQL DB中的字符串,则需要在构建字符串时将它们包装在单引号中。如果ID列在A列中已经是唯一的,那么您可以删除If instr(1,str,c.Value) <> 0 Then部分。此外,如果列A中的ID是唯一的,则可以对这些ID进行排序,并将查询重新排序,然后将记录集放入J列中,并排列所有内容。

Sub RetrieveOverview() 

Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim ConnectionString As String, Ids as String 
Dim query As String 
Dim rng as Range, c as Range 
Dim lrow as long 

With Thisworkbook.Sheets("your sheet name") 
    lrow = .Range("A" & .Rows.Count).End(xlUp).Row 
End With 

Set rng = Thisworkbook.Sheets("your sheet name").Range("A1:A" & lrow) 

For Each c in rng 
    If instr(1,str,c.Value) <> 0 Then 
     If str <> "" Then 
     str = str & "," & c.Value 
     Else 
     str = "(" & c.Value 
     End If 
    End If 
Next c 

str = str & ")" 

Set cn = New ADODB.Connection 

ConnectionString = "Provider=SQLOLEDB;Password=***;Persist Security Info=True;User ID=*****;Data Source=***;Initial Catalog=**" 

cn.Open ConnectionString 
cn.CommandTimeout = 900 


query = "SELECT ID, coOverview FROM SQLTable WHERE ID in " & str 

rs.Open StrQuery, cn 

Sheets(1).Range("J2").CopyFromRecordset rs 
End Sub 

Excel的VBA - 搜索范围,并连接SQL ADODB记录集在