1. ホーム
  2. VBA

ADODBを使用したExcel VBAで、小計を使用してデータベースにアクセスする

2022-02-16 03:34:05

<スパン Oracleデータベースへの接続

    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open "プロバイダ=msdaora;データソース=dl580;ユーザID=emssxjk;パスワード=emssxjk;"を開きます。

    dl580は、tnsnames.oraで設定されたサービス名です。

▲レコードセットの作成 レコードセット

    セットrst = CreateObject("ADODB.Recordset")
    sqls = "select * from tb_city"
    セットrst = cnn.Execute(sqls)を実行します。

    ここでのSQL文は、クエリのselectの他に、insert, update, delete, truncate tableなどのコマンドで実行することができます。これらのSQL文は、コマンドオブジェクトでも実行でき、プロシージャの呼び出しやパラメータの受け渡しも可能です。

レコードセット結果の引用

<スパン Excel VBAでは、ADO経由でデータを取得した後、以下のような参照になります(レコードセット名はrstとする)。

1. フィールド数:rst.fields.count.

2, フィールド名: rst.fields(0).name, 0は最初のフィールド、他のフィールドは1,2,...を意味します。. rst.fields.count-1です。

3. フィールド値: rst(0) または rst(0).Value または rst.fields(0).value, ここで 0 は最初のフィールドを意味し、代わりにフィールド名、例えば rst("city") を使うこともできます。

4.レコードセット全体。Range("a2").CopyFromRecordset rst コマンドは、セル A2 から始まるワークシートにレコードセットを保存します。

5。レコードの移動:最初に配置されたレコードの数をフェッチした後、rst.movenextは、次の終了フラグに移動することができます:rst.eof = trueは、Excel VBAのみ(rst.movenext)前方移動をサポートしています。

6、RecordCountは:rst.RecordCountは、フィードバックレコード数ですが、VBAで、常にフィードバック-1、しかし、あなたはrst.eofによると、クエリの結果があるかどうかを判断することができますrst.eof = trueは、クエリの結果が空であることを意味する場合。

▲ ストアドプロシージャを呼び出す

1. 前回と同様に、データベースに接続します。

2、ストアドプロシージャを定義する

   Set cmd = CreateObject("ADODB.Command")

    Set cmd.ActiveConnection = cnn
    cmd.CommandText = "zfqf_bag2mail" '2つのパラメータを持つストアドプロシージャ名
    cmd.CommandType = adCmdStoredProc

3. パラメータの割り当て

     cmd.Parameters(0).Value = Cells(row1, pos_acc)
     cmd.Parameters(1).Value = Cells(row1, pos_lab)
4. ストアドプロシージャを実行する 

    cmd.Executeを実行します。

このプロシージャの結果は、テーブルに保存され、変更によって返されないクエリ文によって結果が得られます。


サンプルリンクです。

<テーブル
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub InputData()
Dim cn As New ADODB.
Dim rs As New ADODB.
Dim cnStr As 
String
, sqlStr As 
String
Dim datarg
cnStr = 
"Provider=SQLOLEDB.1;Persist Security Info=True;User ID=[LoginName];Password=[password]@;Initial Catalog=[DBName];Data Source=[IP] ;Connect Timeout=720;"
sqlStr = ThisWorkbook.Worksheets(
"Parameters"
). [B2] '
// store SQL statements
cn.Open cnStr
ThisWorkbook.Worksheets(
2
). [a2].CopyFromRecordset ConnectRst(cn, sqlStr)