ADODB.ConnectionとADODB.Recordsetを介してExcel VBAを介してDBにアクセスしています。私のクエリは、4つのデータフィールドを返します。私は、私のレコードセットのすべての "行"に対して同じ値(つまり5)で5番目のフィールドにしたい。私はこれをDBに追加したくありません。VBA:レコードセットに値のあるフィールドを追加する
時々私のクエリは、5つのフィールドを返し、5回目の列に乗算に5を置き換えるので、私は私の現在のコードは、このようなある
E.
フィールドとしてこれをしたい: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
しかし、これは終了の前にエラーを投げます。
tl; dr私のSQLクエリは4つの列を取得し、5番目の列をVBAにローカルに追加し、値5で完全に埋め込みます。
'範囲(" F2 ")。最初のループで' cl'の前にオフセット(cl、0).Value = 5'。 Excelダンプに追加したいだけでデータベースには追加しない場合。 –
「SELECT」を更新して、「5」をMyConstantとして含めることができます。それはちょうど「ローカルでvba」ではないが、あなたのために働くかもしれない。 –
私はその理由を明確にするために私の質問を編集しました –