GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBAを極める−VBAスーパーテクニック
  ADOレコードセットを操作しよう!1
 
■ ADOレコードセットを操作しよう!1

前回までADO(Active Data Object)によるレコードセットの取得の仕方を解説しました。
レコードセットは、ただ取得するだけではデータベースに対して何も処理は行えません。
今回は取得したレコードセットに対する様々な操作を解説します。

ADOによるレコードセットへの操作は主に次のような処理が可能です。
・レコードの追加 ・レコードの削除 
・レコードの検索 ・レコードの抽出 
・レコードの移動 ・レコードの取得 
・レコードの並べ替え 

ADOには7種類のオブジェクトが用意されています。
Connection データベースへの接続を表します
Command データベースに対して実行数るコマンドを保持します
Parameter クエリやSQLステートメントのパラメータを保持します
Property 各ADOオブジェクトのプロパティを保持します
Recordset レコードセット(データの集まり)を保持します
Field レコードセットを構成するフィールドを保持します
Error データアクセスに関連したエラーを保持します

この中でもっとも頻繁に参照されるのはフィールドオブジェクトです。フィールドを参照するにはインデックス番号を使用する方法とオブジェクト名を使用する方法があります。

例:
0 1 2  3
SyainID SyainNAME Kinzoku Syozoku
10001    山田 太郎 25 営業一課 
10002    鈴木 一郎 10 営業二課 

SyainIDフィールドを参照する記述例。次のどの記述法でもSyainIDのフィールドを参照します。
・RS.Fields(0)
・RS.Fields("SyainID")
・RS.Fields!SyainID
・RS("SyainID")
・RS!SyainID

レコードセットオブジェクトを作成する

レコードセットを取得するOpenメソッドの書式を解説します。

書式: Recordset.Open Source, ActiveConnection, CursorType, LockType, option

Recordset 取得するRecordsetオブジェクト
Source SQLステートメント、テーブル名、クエリ名を指定します
ActiveConnection Connectionオブジェクトまたは接続情報文字列を指定します
CursorType カーソルタイプを決めるための定数を指定します
LockType ロックタイプを決めるための定数を指定します
Options プロバイダがSource 引数を評価する方法を指定します

※ カーソルタイプとロックタイプの詳細はこちらを参照してください。
エクセルのワークシートに接続してみよう! 

レコードセットに編集、追加、削除を行うにはOpenメソッドの引数に編集可能な定数を指定する必要があります。
例:
RS.Open SQL, CN, adOpenKeyset, adLockOptimistic

レコードセットオブジェクトは同時に複数のレコードを参照することができません。参照できるレコードは1つです。このレコードのことをカレントレコードと呼びます。
レコードセットを作成したとき、カレントレコード(カーソル位置)は先頭レコードになります。

BOFとEOFプロパティ
BOFは"Begin Of File"、EOFは"End Of File"の略で、カレントレコードが移動できる範囲を表します。
たとえばレコード1から順番にレコードを参照していき、EOFプロパティがTRUEになったとき、レコードセットのこれ以上後方にレコードが存在しないことを示します。

レコードセット
BOF       BOF=True、 EOF=False
レコード1    BOF=False、EOF=False
レコード2    BOF=False、EOF=False
レコード3    BOF=False、EOF=False
…         …        …
EOF       BOF=False、EOF=True

カレントレコードを移動する

書式:

Recordset.MoveFirst 先頭レコードに移動します
Recordset.MovePrevious 1つ前のレコードに移動します
Recordset.MoveNext 次のレコードに移動します
Recordset.MoveLast 最終レコードに移動します
Recordset.Move n  指定数"n"のレコードに移動します

例:
次の例では取得したレコードセットの先頭レコードから最終レコードまで、指定されたフィールドの値を出力します。

Do
  Debug.Print RS.Fields("SyainNAME") & "/" & RS.Fields("Syozoku")
  RS.MoveNext
Loop Until RS.EOF

レコードを更新(変更・編集)する

書式: Recordset.Update Fields, Values

Recordset 取得したレコードセットオブジェクト
Fields 編集するフィールド
Values フィールドに代入する値 

例:
次の例では、フィールドオブジェクトのValueプロパティに値を代入し、Updateメソッドでレコードセットを更新しています。

RS.Fields("SyainNAME") = "山田太郎"
RS.Fields("Syozoku") = "営業一課"
RS.Update

次の例では、取得したレコードセットの全てのレコードに対して、勤続年数を加算しています。

Do
  RS.Fields("Kinzoku") = RS.Fields("Kinzoku") + 1
  RS.Update
  RS.MoveNext
Loop Until RS.EOF

※ Updateメソッドを呼び出す前に、カレントレコードを移動すると、自動的にUpdateが呼び出され、変更が保存されます。ですので、RS.Updateを記述しなくてもRS.MoveNextを実行した時点で、テーブルフィールドに変更された値が保存されます

新規レコードを追加(登録)する

書式: Recordset.AddNew 
      Field1 = Value1
      Field2 = Value2
      Field3 = Value3
      ・・・・・・
      Recordset.Update

Recordset 取得したレコードセットオブジェクト
Field 新規で追加するレコードのフィールド名
Value フィールドに代入する値

例:
次の例では、AddNewメソッドでレコードの追加を宣言し、フィールドオブジェクトに値を代入、Updateメソッドでレコードセットを更新しています。

RS.AddNew
  RS.Fields("SyainNAME") = "山田太郎"
  RS.Fields("Syozoku") = "営業一課"
RS.Update

(注)
・AddNewメソッド実行後は、そのレコードがカレントレコードになります。Updateメソッドを呼び出した後もそのままカレントレコードとなります。
・Value引数は、代入するフィールドがテキスト型の場合はダブルクォーテーション、日付時刻型の場合はシャープで囲みます。数値型の場合はそのままの値で記述します。
・値を代入しなかったフィールドには、Null値が入ります。テーブルのフィールドプロパティでNull値を許可しないフィールドの場合にはエラーが発生します。



レコードを削除する

書式: Recordset.Delete  

Recordset 取得したレコードセットオブジェクト

例:
次の例では、取得したレコードセットのカレントレコードを削除します。
RS.Delete

次の例では、取得したレコードセットの全てのレコードを削除します。
Do
  RS.Delete
  RS.MoveNext
Loop Until RS.EOF

(注)
・Deleteメソッドが削除するのはあくまでカレントレコードです。1件のレコードを削除する場合は、MoveメソッドやFindメソッドを使用して、削除するレコードにカレントレコードを移動するか、SQLステートメントで削除する対象のレコード1件のみをレコードセットとして取得するようにします。
・削除したカレントレコードは、別のレコードに移動するまでそのままカレントレコードとなります。

次回も引き続き、ADOレコードセットの操作について解説します。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,