ADOを利用してレコードを追加/更新/削除/検索するには
ADOのRecordsetオブジェクトの各種メソッドを利用してレコードを追加、更新、削除、検索する方法を説明します。
● RecordsetオブジェクトのAddNewメソッドでレコードを追加するには
RecordsetオブジェクトのAddNewメソッドでレコードを追加する方法を説明します。
|
recordset.AddNew FieldList ,Values |
FieldListには、追加するレコードのフィールド名を指定します。複数のフィールド名を指定するときは、配列変数を利用します。この引数はオプションです。
Valuesには、FieldListで指定したフィールドの値を指定します。複数のフィールドの値を指定するときは、配列変数を利用します。この引数はオプションです。
AddNewメソッドで追加したレコードをデータベースに書き込むには、Updateメソッドを使用します。
rs.AddNew
rs.Fields(“ID”) = 100
rs.Fields(“Name”) = “Akio Kasai”
rs.Update
rs.AddNew _
Array(“ID”,”Name”), _
Array(k”100”,”Akio Kasai”)
rs.Update
|
|
図 AddNewメソッドでレコードを追加するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「RecordsetオブジェクトのAddNewメソッドを利用した手法」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、実行結果が表示されます。
図の行21-24では、Access 2000のデータベースado.mdbを接続するための処理を行っています。データベースado.mdbの物理パスは、ASPのServerオブジェクトのMapPathメソッドを使用して取得しています。
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & server.MapPath("webdb/ado.mdb")
set cnn = server.CreateObject("adodb.connection")
cnn.open strConnection
行26では、ServerオブジェクトのCreateObjectメソッドでRecordsetのインスタンスを生成しています。行27-39では、VBScriptのWith…End WithステートメントでRecordsetのオブジェクトを参照しています。行28のOpenメソッドでは、ado.mdbの得意先テーブルを開いています。Openメソッドの先頭のピリオド(.)は、Recordsetオブジェクトを参照することを意味します。RecordsetオブジェクトのOpenメソッドには、以下のような引数を指定することができます。
.Open Source, ActiveConnection, CursorType, LockType, Options
Sourceには、ado.mdbの得意先テーブル名を指定しています。ActiveConnectionには、行24で接続したConnectionオブジェクトを指定しています。CursorTypeには、adOpenKeysetを指定しています。LockTypeには、adLockOptimisticを指定しています。
.Open "得意先", cnn, adOpenKeyset, adLockOptimistic
定数名adOpenKeysetとadLockOptimisticは、行3の#include file=で指定しているadovbs.incファイルに定義されています。
3: <!--#include file=adovbs.inc -->
行29では、AddNewメソッドでレコードを追加しています。レコードの値はAddNewメソッドの引数で指定することもできますが、このサンプルではFieldsプロパティを使用してフィールドの値を設定しています。行30-34では、レコードの得意先名、郵便番号、都道府県、住所1、電話番号のフィールドに値を設定しています。行35では、Updateメソッドでレコードをデータベースに書き込んでいます。
.AddNew
.Fields("得意先名") = "フレンドリーソフト"
.Fields("郵便番号") = "340-9999"
.Fields("都道府県") = "埼玉県"
.Fields("住所1") = "****"
.Fields("電話番号") = "(0480)40-9999"
.Update
行36-37では、AddNewメソッドで追加したレコードの得意先コードをResponse.Writeでブラウザに送信しています。得意先テーブルの得意先コードは、オートナンバー型のフィールドですからAccessのJetエンジンが自動採番します。この例では、80が採番されています。
response.Write "得意先コード:" & .fields("得意先コード").value & "<br>"
è 得意先コード: 80
行38では、レコードセットを閉じています。行40では、データベースを切断しています。行41-42では、RecordsetオブジェクトとConnectionオブジェクトを解放しています。ASPのServer.CreateObjectメソッドで生成したオブジェクトは、必ず明示的に解放するようにします。
set rs = nothing
set cnn = nothing
● RecordsetオブジェクトのAddNewメソッドでレコードを追加するには(配列使用)
RecordsetオブジェクトのAddNewメソッドでレコードを追加するとき、引数に配列を指定する方法を説明します。配列を作成するには、VBScriptのArray()関数を利用すると便利です。AddNewメソッドの引数1には、フィールド名の配列を指定します。引数2には、フィールドに対応した値を指定します。
rs.AddNew _
Array(“ID”,”Name”,”Phone”), _
Array(“100”,”
rs.Update
|
|
図 AddNewメソッドで引数に配列を指定してレコードを追加するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「RecordsetオブジェクトのAddNewの配列を利用した手法」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、実行結果が表示されます。
図の行21-24では、Access 2000のデータベース ado.mdbを接続するための処理を行っています。
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & server.MapPath("webdb/ado.mdb")
set cnn = server.CreateObject("adodb.connection")
cnn.open strConnection
行26では、Recordsetのインスタンスを生成しています。行27-35のWitn..End Withでは、Recordsetのオブジェクトを参照しています。行28では、ado.mdbの得意先テーブルを開いています。
.Open "得意先", cnn, adOpenKeyset, adLockOptimistic
行29-30では、AddNewメソッドでレコードを追加しています。このサンプルでは、AddNewメソッドの引数に配列を指定してフィールドの値を設定しています。AddNewメソッドの引数1には、フィールド名の配列を指定します。引数2には、フィールド値の配列を指定します。
.AddNew _
Array("得意先名", "郵便番号", "都道府県", "住所1"), _
Array("フレンドリーソフト", "340-9999", "埼玉県", "****")
.Update
行31では、Updateメソッドでレコードをデータベースに書き込んでいます。行32-33では、追加したレコードの得意先コードを表示させています。得意先コードは、オートナンバー型のフィールドですから自動採番されます。この例では、81が採番されています。
response.Write "得意先コード:" & .Fields("得意先コード").value & "<br>"
è 得意先コード: 81
行34では、レコードセットを閉じています。
● RecordsetオブジェクトのUpdateメソッドでレコードを更新するには
RecordsetオブジェクトのUpdateメソッドを使用してレコードを更新する方法を説明します。
|
recordset.Update Fields ,Values |
Fieldsには、フィールド名を指定します。複数のフィールド名を指定するときは、配列を指定します。この引数はオプションです。Valuesには、フィールド名に対応した値を指定します。複数の値を指定するときは、配列を指定します。この引数はオプションです。
rs.Update “Name”,
“
rs.Update Array(“ID”,”Name”),
Array(“100”,”
|
|
図 Updateメソッドでレコードを更新するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「RecordsetオブジェクトのUpdateメソッドを利用した手法」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、実行結果が表示されます。
図の行21-24では、Access 2000のデータベースado.mdbを接続するための処理を行っています。
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & server.MapPath("webdb/ado.mdb")
set cnn = server.CreateObject("adodb.connection")
cnn.open strConnection
行26では、Recordsetのインスタンスを生成しています。行27-37のWith…End Withでは、Recordsetのオブジェクトを参照しています。行28では、RecordsetのIndexプロパティに主キーのインデックス名(PrimaryKey)を設定しています。得意先テーブルのPrimaryKeyには、得意先コードが設定されています。ここで設定したインデックスは、行31のSeekメソッドで使用します。行29-30では、Openメソッドでado.mdbの得意先テーブルを開いています。
.Index = "PrimaryKey"
.Open "得意先", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
行31-33では、Seekメソッドで得意先テーブルのレコードを検索して担当者名を更新しています。Seekメソッドの引数1にはキーの値を指定します。引数2にはオプションを指定します。adSeekFirstEQは、検索条件に一致する最初のレコードを渡すことを意味します。
.Seek 51, adSeekFirstEQ
.Fields("担当者名") = "平成 花子"
.Update
定数名adSeekFirstEQは、行3のinclude file=で指定したadovbs.incファイルに定義されています。
3: <!--#include file=adovbs.inc -->
行32では、Fieldsプロパティに担当者名を指定して「平成 花子」に更新しています。行33では、Updateメソッドでレコードをデータベースに書き出しています。
行34-35では、更新した得意先レコードの担当者名を表示させています。
response.Write "得意先コード51の担当者名を<b> " _
& rs("担当者名") & " </b>に変更しました!<br>"
● RecordsetオブジェクトのDeleteメソッドでレコードを削除するには
RecordsetオブジェクトのDeleteメソッドでレコードを削除する方法を説明します。
|
recordset.Delete AffectRecords |
AffectRecordsには、Deleteメソッドによって影響を受けたレコード数を返すオプションを指定します。AffectRecordsには、adAffectCurrent(1), adAffectGroup(2)のいずれかを指定します。デフォルトはadAffectCurrentです。
rs.Seek key, adSeekFirstEQ
rs.Delete
|
|
図 Deleteメソッドでレコードを削除するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「RecordsetオブジェクトのDeleteメソッドを利用した手法」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、実行結果が表示されます。
図の行22-25では、Access 2000のデータベースado.mdbを接続するための処理を行っています。
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & server.MapPath("webdb/ado.mdb")
set cnn = server.CreateObject("adodb.connection")
cnn.open strConnection
行27では、Recordsetのインスタンスを生成しています。行28-46のWith…End Withでは、Recordsetのオブジェクトを参照しています。行29では、Indexプロパティに主キーのインデックス名(PrimaryKey)を指定しています。ここで設定したインデックスは、行39のSeekメソッドで使用します。行30では、Openメソッドでado.mdbの得意先テーブルを開いています。行32-34では、新規レコードを追加しています。ここで追加したレコードは、行41のDeleteメソッドで削除します。
.AddNew _
Array("得意先名", "郵便番号", "都道府県", "住所1"), _
Array("フレンド", "340-9999", "埼玉県", "**")
.Update
行35-36では、追加したレコードの得意先コードを表示しています。得意先コードは、オートナンバー型のフィールドですからAccessのJetエンジンが自動採番します。行37では、得意先コードを変数lngCustIDに保存しています。
response.Write "得意先コード<b> " _
& .Fields("得意先コード") & " </b>を登録しました!<br>"
è 得意先コード 86 を登録しました!
lngCustID = .Fields("得意先コード").Value
行39-44では、Seekメソッドで追加したレコードを検索してDeleteメソッドで削除しています。行39のSeekメソッドの引数には、追加したレコードの得意先コードを指定しています。行40のifステートメントでレコードが見つかったかどうか確認しています。レコードが見つかったときは、行41のDeleteメソッドでレコードを削除します。行42-43では、削除したレコードの得意先コードを表示しています。
.Seek lngCustID, adSeekFirstEQ
if not (.EOF or .BOF) then
.Delete
response.Write "得意先コード<b> " _
& clng(lngCustID) & " </b>を削除しました!"
è 得意先コード 86 を削除しました!
end if
行45では、レコードセットを閉じています。
● RecordsetオブジェクトのSeekメソッドでレコードを検索するには
RecordsetオブジェクトのSeekメソッドでレコードを検索する方法を説明します。
|
recordset.Seek KeyValues, SeekOption |
KeyValuesには、レコードのキーを指定します。キーが複数のフィールドから構成されているときは配列を指定します。Seekメソッドは、RecordsetオブジェクトのIndexプロパティに設定されているインデックッスを利用して検索します。KeyValuesで指定するキーは、Indexプロパティに設定されているキーと対応させる必要があります。
SeekOptionには、レコードのキーとKeyValuesで指定したキーを比較する条件を指定します。
表 SeekメソッドのSeekOptionの一覧
|
定数名(SeekEnum) |
値 |
意 味 |
|
adSeekFirstEQ |
1 |
レコードのKeyがKeyValuesと一致する先頭レコードを検索。 |
|
adSeekLastEQ |
2 |
レコードのKeyがKeyValuesと一致する最終レコードを検索。 |
|
adSeekAfterEQ |
4 |
レコードのKeyがKeyValuesと一致するレコードまたはKeyValuesより大きいレコードを検索。 |
|
adSeekAfter |
8 |
レコードのKeyがKeyValuesより大きいレコードを検索。 |
|
adSeekBeforeEQ |
16 |
レコードのKeyがKeyValuesと一致するレコードまたはKeyValuesより小さいレコードを検索。 |
|
adSeekBefore |
32 |
レコードのKeyがKeyValuesより小さいレコードを検索。 |
Seekメソッドを使用するときは、ConnectionオブジェクトのCursorLocationプロパティにadUseClientを設定する必要がります。さらに、RecordsetオブジェクトのOpenメソッドでレコードセットを開くとき、 adCmdTableDirectを指定する必要がります。
rs.Index = “PrimaryKey”
rs.Seek Key, adSeekFirstEQ
|
|
図 Seekメソッドでレコードを検索するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「RecordsetオブジェクトのSeekメソッドを利用した手法」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、実行結果が表示されます。
図の行21-24では、Access 2000のデータベースado.mdbを接続するための処理を行っています。
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & server.MapPath("webdb/ado.mdb")
set cnn = server.CreateObject("adodb.connection")
cnn.open strConnection
行26では、Recordsetのインスタンスを生成しています。行27-39のWith…End Withでは、Recordsetオブジェクトを参照しています。行28では、Indexプロパティに主キーのインデックス名(PrimaryKey)を設定しています。ここで設定したインデックスは、行31のSeekメソッドで使用します。行29-30では、Openメソッドでado.mdbの得意先テーブルを開いています。得意先テーブルのインデックスPrimaryKeyには、主キーとして得意先コードが設定されています。Seekメソッドを使用するときは、Openメソッドの引数にadCmdTableDirectを指定する必要があります。行31では、Seek