VBA:向Recordset

时间:2017-09-19 19:02:52

标签: vba excel-vba append adodb recordset

我通过ADODB.Connection和ADODB.Recordset通过Excel VBA访问数据库。我的查询返回四个数据字段。我希望我的记录集的每个“行”具有相同值(即5)的第五个字段。我不想将其添加到数据库中。

我想将其作为一个字段来执行,因为有时我的查询返回五个字段,第五个字段替换E列乘法中的5。

我目前的代码是这样的:

Dim MyConn As ADODB.Connection
Dim MyRecords As ADODB.Recordset
Set MyConn = New ADODB.Connection
Set MyRecords = New ADODB.Recordset
MyConn.Open location, username, password
MyRecords.ActiveConnection = MyConn
MyRecords.CursorLocation = adUseServer
MyRecords.Source = query 'really long, not included here
MyRecords.Open , , 1, 1
Do While Not MyRecords.EOF
    Range("A2").Offset(cl, 0).Value = MyRecords.Fields.Item(0).Value
    Range("B2").Offset(cl, 0).Value = MyRecords.Fields.Item(1).Value
    Range("D2").Offset(cl, 0).Value = MyRecords.Fields.Item(2).Value
    Range("E2").Offset(cl, 0).Value = MyRecords.Fields.Item(3).Value * 5
    cl = cl + 1 'go to the next line
    MyRecords.MoveNext
Loop
MyRecords.Close
MyConn.Close

我尝试在.Open之后附加一个字段,但是这引发了错误。然后我根据类似的问题尝试了以下内容,检查本地和vba文档:

Set MyRecords = New ADODB.Recordset
With MyRecords
    .Fields.Append "MA", adNumeric, 19
    .Fields.Append "PN", adVarChar, 12
    .Fields.Append "Qty", adNumeric, 19
    .Fields.Append "Data", adNumeric, 19
    .Fields.Append "Mult", adTinyInt, , adFldUpdatable, 1
End With

MyRecords.ActiveConnection = MyConn
MyRecords.CursorLocation = adUseServer
MyRecords.Source = query 'really long, not included here
MyRecords.Open , , 1, 1

但是这会在With结束之前抛出一个错误。

tl; dr我的SQL查询检索了四列,我想在vba中本地添加第五列,完全填充值5.我该怎么做?

1 个答案:

答案 0 :(得分:0)

您是说您的查询要求四个字段,但您希望记录集在返回数据时包含第5个字段?

如果这就是你想要的东西你不能做这样的事情(未经测试!!)?

Select
    Field_1,
    Field_2,
    Field_3,
    Field_4,
    SUM(5)
From
    Your_Table

通过这种方式,我相信记录集的第五列中的每一行都应该有数字5。