Visual Basic6 リファレンス
|
VB6 データベース(ADO) 操作
データベースへの接続・操作についてのリファレンス |
Microsoft ActiveX データ オブジェクト (ADO) OLE DB プロバイダを通してデータベース サーバー上のデータへのアクセスと操作を行います。 [参照設定] Microsoft ActiveX Data Objects 2.5 Library (msado15.dll) [変数宣言] Dim cn As ADODB.Connection Dim rs As ADODB.Recordset [オブジェクト生成] Set cn = New ADODB.Connection Set rs = New ADODB.Recordset |
お品書き |
サンプル プログラム | |
● サンプル (SELECT) | MS-AccessのDBに接続して、SELECT文を実行後、データを抽出して、DBを切断する |
● サンプル (CREATE) | MS-AccessのDBに接続して、新規レコードを作成後、DBを切断する |
● サンプル (UPDATE) | MS-AccessのDBに接続して、レコードの内容を変更して、DBを切断する |
ADO Connection | データソースとの固有のセッションを表します。 |
● Open | データベースへ接続する |
● Close | コネクションを閉じます |
ADO Recordset | 基になるテーブルからのレコードセット全体、またはコマンドの実行によって返された結果のレコードを表します。 |
● Open | カーソルを開きます |
● BOF | レコードの位置が最初のレコードより前にあるかどうか |
● EOF | レコードの位置が最後のレコードより後にあるかどうか |
● RecordCount | レコード数を返します |
● MoveFirst | カレントレコードを先頭のレコードにします |
● MoveLast | カレントレコードを最後のレコードにします |
● MoveNext | カレントレコードを次のレコードにします |
● MovePrevious | カレントレコードを前のレコードにします |
● AddNew | 新規レコードを作成します |
● Update | カレントレコードへの変更内容を保存します |
● Delete | カレントレコードを削除します |
● Close | レコードセットを閉じます |
Q & A | |
● Q & A | EXCELをデータベースにした場合に、次のエラーが出ます |
● SELECT サンプルプログラム '*************************************************************** ' MS-AccessのDBに接続して、SELECT文を実行後、データを抽出して、DBを切断する '*************************************************************** Private Sub getSQL() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset Dim strSQL cn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:¥WK¥TEST.mdb" 'MS-AccessのDBに接続 strSQL = "SELECT * FROM HINMST" 'SQL文 rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText 'SQLを実行 While Not rs.EOF 'レコード数分ループ Debug.Print rs!HINMEI '「品名」フィールドの内容を抽出 rs.MoveNext '次のレコードへ DoEvents Wend rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub |
● CREATE サンプルプログラム '******************************************************************* ' MS-AccessのDBに接続して、新規レコードを作成後、DBを切断する '******************************************************************* Private Sub getSQL() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset Dim strTBL cn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:¥WK¥TEST.mdb" 'MS-AccessのDBに接続 strTBL = "HINMST" 'テーブル名 rs.Open strTBL, cn, adOpenForwardOnly, adLockOptimistic, adCmdTable 'テーブルを開く rs.AddNew '新規レコードを追加 rs!HINMEI = "あんぱん" '「商品名」をセット rs!HINCODE = "100" '「商品コード」をセット rs!PRICE = 70 '「価格」をセット rs.Update '更新(保存) rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub |
● UPDATE サンプルプログラム '****************************************************** ' MS-AccessのDBに接続して、レコードの内容を変更して、DBを切断する '****************************************************** Private Sub getSQL() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset Dim strSQL cn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:¥WK¥TEST.mdb" 'MS-AccessのDBに接続 strSQL = "SELECT * FROM HINMST WHERE HINCODE='100'" 'SQL文 rs.Open strSQL, cn, adOpenStatic, adLockOptimistic, adCmdText 'SQLを実行 If Not rs.EOF Then rs!PRICE = 80 '「価格」を変更 rs.Update '更新(保存) End If rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub |
● Open メソッド
|
● Close メソッド
※ Connectionオブジェクトを閉じると、接続に関連するアクティブ Recordsetオブジェクトもすべて閉じます。 ※ Recordset オブジェクトを開いたまま Connection オブジェクトを閉じると、すべての Recordset オブジェクトの未処理の変更がロールバックされます。 ※ オブジェクトを閉じてもメモリからは削除されません。メモリからオブジェクトを完全に削除するには、オブジェクト変数を Nothing に設定します。 |
● Open メソッド
|
● BOF、EOFプロパティ
※ Recordsetオブジェクトで最後に残ったレコードを削除しても、カレントレコードの位置を移動するまで BOF および EOFプロパティは Falseのままです。 |
● RecordCount プロパティ
※ レコード数がわからない場合、または、プロバイダやカーソルの種類が RecordCountをサポートしていない場合は、プロパティは -1 を返します。 ※ RecordCountプロパティは、前方スクロールタイプのカーソルでは -1 を返し、静的カーソルまたはキーセットカーソルでは実際の数を返し、動的カーソルではデータソースによって -1 または実際の数を返します。 ※ BOFとEOFプロパティが Trueの場合、RecordCountプロパティ設定値は 0 になります。 |
● MoveFirst、MoveLast、MoveNext、MovePrevious メソッド
※ EOFプロパティが既に Trueの場合、前方へ移動しようとするとエラーが発生します。 ※ BOF プロパティが既に True の場合、後方へ移動しようとするとエラーが発生します。 ※ Recordsetオブジェクトが後方スクロールをサポートしていない場合に MoveLastを呼び出すとエラーが発生します。 |
● AddNew メソッド
※ AddNewメソッドを呼び出した後は、新規レコードがカレントレコードになり、Updateメソッドを呼び出した後もそのままカレントレコードになります。 ※ カレントレコードの編集中、または新規レコードの追加中に AddNewメソッドを呼び出すと、Updateメソッドが呼び出されてすべての変更を保存して新規レコードを作成します。 |
● Update メソッド
※ Updateメソッドを呼び出す前に追加または編集中のレコードから移動した場合、ADOは Updateを自動的に呼び出して変更を保存します。 ※ Updateメソッドを呼び出した後、カレントレコードはカレントとして維持されます。 |
● Delete メソッド
※ Recordsetオブジェクトでレコードの削除が使用できない場合はエラーが発生します。 ※ 即時更新モードではすぐにデータベースで削除が行われます。それ以外のモードでは、キャッシュから削除するレコードがマークされ、UpdateBatchメソッドを呼び出したときに実際に削除されます。 ※ 削除したカレントレコードは、別のレコードに移動するまでそのままカレントレコードになります。 ※ トランザクションで削除レコードをネストしている場合、RollbackTransメソッドを使って削除レコードを復活することができます。 |
● Close メソッド
※ 即時更新モードで編集しているときに Close メソッドを呼び出すと、エラーが発生します。この場合は先に Update または CancelUpdate メソッドを呼び出してください。 ※ オブジェクトを閉じてもメモリからは削除されません。メモリからオブジェクトを完全に削除するには、オブジェクト変数を Nothing に設定します。 |
● Q & A
|