如何使用DB2变量填充特定的单元格范围

时间:2018-08-08 10:27:12

标签: vba excel-vba

我需要从DB2填充单元格值。

下面是我在Excel中的列结构。

Contract Number			

Party Type Code			
Surname			
First Name			
Date Of Birth			
Address Line-1			
City			
Province Code			
Postal Code			
Country Code			
Country Text			
	
Party Type Code			
Surname			
First Name			
Date Of Birth			
Address Line-1			
City			
Province Code			
Postal Code			
Country Code			
Country Text			

我从Excel到DB2的连接正常。

我的要求是将合同编号字段从Excel传递到DB2并获取相应的详细信息。

在这种情况下,可能会有多行具有相同的合同号。

到目前为止,我正在填充各个字段,然后将它们分配给单元格值。

strSQL = "SELECT CONTRACT_NUM FROM " & Region & "." & Table & " WHERE CONTRACT_NUM=" & CONTRACTNO & " fetch first row only;"

Set rs = conn.Execute(strSQL)
Sheets("Sheet1").Range("I" & row_num).Value = rs.Fields(0).Value

有没有更简单的方法同时填充所有字段?

谢谢。

1 个答案:

答案 0 :(得分:0)

第一步:更改您的SQL语句,以便它返回您想要的所有列。

strSQL = "SELECT CONTRACT_NUM" _ 
       & "      , Party_Type_Code" _
       & "      , Surname" _
       & "      , First_Name" _ 
       (...)
       & " FROM " & Region & "." & Table _
       & " WHERE CONTRACT_NUM=" & CONTRACTNO & " fetch first row only;"

第二步:将数据写入工作表。有几种方法可以做到:

从记录集中将数据获取到工作表中的最简单方法是使用范围命令CopyFromRecordset。这会将所有数据写入Excel工作表,因此您可以尝试:

Sheets("Sheet1").Range("I" & row_num).CopyFromRecordset(rs)

如果要单独写入数据,最简单的方法是使用Recordset-Command GetRows将数据写入到(从零开始的)二维数组中。请注意,第一个索引是列,第二个索引是行。

下面的代码与上面的语句基本相同,只是为了让您明白:

Dim data As Variant
data = rs.GetRows
Dim r As Range
Set r = Sheets("Sheet1").Range("I" & row_num)
Dim colIndex As Long, rowIndex As Long

For colIndex = 0 To UBound(res, 1)
    For rowIndex = 0 To UBound(res, 2)
        r.Offset(rowIndex, colIndex) = res(colIndex, rowIndex)
    Next rowIndex
Next colIndex

注意:两个示例都假定您的SQL代码有效,创建了RecordSet并包含数据。对于健壮的解决方案,您必须添加错误处理,例如在SQL语句未返回任何数据的情况下。