ADOを利用してレコードを追加/更新/削除/検索するには

 

ADORecordsetオブジェクトの各種メソッドを利用してレコードを追加、更新、削除、検索する方法を説明します。

 

   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の物理パスは、ASPServerオブジェクトの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では、VBScriptWith…End WithステートメントでRecordsetのオブジェクトを参照しています。行28Openメソッドでは、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

 

定数名adOpenKeysetadLockOptimisticは、行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でブラウザに送信しています。得意先テーブルの得意先コードは、オートナンバー型のフィールドですからAccessJetエンジンが自動採番します。この例では、80が採番されています。

 

response.Write "得意先コード:" & .fields("得意先コード").value & "<br>"

è 得意先コード: 80

 

38では、レコードセットを閉じています。行40では、データベースを切断しています。行41-42では、RecordsetオブジェクトとConnectionオブジェクトを解放しています。ASPServer.CreateObjectメソッドで生成したオブジェクトは、必ず明示的に解放するようにします。

 

set rs = nothing

set cnn = nothing

 

 

   RecordsetオブジェクトのAddNewメソッドでレコードを追加するには(配列使用)

 

RecordsetオブジェクトのAddNewメソッドでレコードを追加するとき、引数に配列を指定する方法を説明します。配列を作成するには、VBScriptArray()関数を利用すると便利です。AddNewメソッドの引数1には、フィールド名の配列を指定します。引数2には、フィールドに対応した値を指定します。

 

rs.AddNew _

  Array(“ID”,”Name”,”Phone”), _

  Array(“100”,”Kasai Akio”,”0480-40-9999”)

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-35Witn..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”, “Kasai Akio

rs.Update Array(“ID”,”Name”), Array(“100”,”Kasai Akio”)

 

図 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-37With…End Withでは、Recordsetのオブジェクトを参照しています。行28では、RecordsetIndexプロパティに主キーのインデックス名(PrimaryKey)を設定しています。得意先テーブルのPrimaryKeyには、得意先コードが設定されています。ここで設定したインデックスは、行31Seekメソッドで使用します。行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は、行3include 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-46With…End Withでは、Recordsetのオブジェクトを参照しています。行29では、Indexプロパティに主キーのインデックス名(PrimaryKey)を指定しています。ここで設定したインデックスは、行39Seekメソッドで使用します。行30では、Openメソッドでado.mdb得意先テーブルを開いています。行32-34では、新規レコードを追加しています。ここで追加したレコードは、行41Deleteメソッドで削除します。

 

.AddNew _

  Array("得意先名", "郵便番号", "都道府県", "住所1"), _

  Array("フレンド", "340-9999", "埼玉県", "**")

.Update

 

35-36では、追加したレコードの得意先コードを表示しています。得意先コードは、オートナンバー型のフィールドですからAccessJetエンジンが自動採番します。行37では、得意先コードを変数lngCustIDに保存しています。

 

response.Write "得意先コード<b> " _

  & .Fields("得意先コード") & " </b>を登録しました!<br>"

è 得意先コード 86 を登録しました!

lngCustID = .Fields("得意先コード").Value

 

39-44では、Seekメソッドで追加したレコードを検索してDeleteメソッドで削除しています。行39Seekメソッドの引数には、追加したレコードの得意先コードを指定しています。行40ifステートメントでレコードが見つかったかどうか確認しています。レコードが見つかったときは、行41Deleteメソッドでレコードを削除します。行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

レコードのKeyKeyValuesと一致する先頭レコードを検索。

adSeekLastEQ

2

レコードのKeyKeyValuesと一致する最終レコードを検索。

adSeekAfterEQ

4

レコードのKeyKeyValuesと一致するレコードまたはKeyValuesより大きいレコードを検索。

adSeekAfter

8

レコードのKeyKeyValuesより大きいレコードを検索。

adSeekBeforeEQ

16

レコードのKeyKeyValuesと一致するレコードまたはKeyValuesより小さいレコードを検索。

adSeekBefore

32

レコードのKeyKeyValuesより小さいレコードを検索。

 

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-39With…End Withでは、Recordsetオブジェクトを参照しています。行28では、Indexプロパティに主キーのインデックス名(PrimaryKey)を設定しています。ここで設定したインデックスは、行31Seekメソッドで使用します。行29-30では、Openメソッドでado.mdb得意先テーブルを開いています。得意先テーブルのインデックスPrimaryKeyには、主キーとして得意先コードが設定されています。Seekメソッドを使用するときは、Openメソッドの引数にadCmdTableDirectを指定する必要があります。行31では、Seek