我需要从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
有没有更简单的方法同时填充所有字段?
谢谢。
答案 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语句未返回任何数据的情况下。