Access + Webのホームへ戻る

SQLコマンドでレコードを挿入/更新/削除/抽出するには

 

SQL(Structured Query Language)でレコードを挿入、更新、削除、抽出する方法を説明します。SQLを使用すると、ADOAddNew, Update, Delete, Findメソッドを使用するよりも高速な処理ができます。

 

   SQLINSERTステートメントを利用してレコードを挿入するには

 

SQLINSERT ステートメントを使用してテーブルにレコードを挿入する方法を説明します。

 

INSERT INTO table_name (column1, column2,...)

VALUES (value1, value2,....)

 

table_nameには、データベースのテーブル名を指定します。columnには、テーブルのフィールド名を指定します。複数のフィールドを指定するときは、コンマ区切りで指定します。valueには、フィールドの値を指定します。複数の値を指定するときは、コンマ区切りで指定します。

 

INSERT INTO MailAddress (“Email”, “Name”)

VALUES(“admin@accweb.com”,”Akio Kasai”)

 

 

図 INSERTステートメントでレコードを挿入するサンプル

 

Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLINSERTステートメント」をクリックしてください。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-27では、得意先テーブルに新規レコードを挿入するためのSQLを作成して変数strSQLに保存しています。行28では、Response.Writeで変数strSQLに保存されている内容をブラウザに送信しています。

 

strSQL = "Insert Into 得意先 (得意先名,郵便番号,都道府県)" _

  & " Values ('フレンドリーソフト','340-9999','埼玉県');"

response.Write strSQL & "<br>"

èInsert Into 得意先 (得意先名,郵便番号,都道府県)

Values ('フレンドリーソフト','340-9999','埼玉県');

 

29では、ConnectionオブジェクトのExecuteメソッドでstrSQLに保存されているSQLを実行しています。Executeメソッドの引数adExecuteNoRecordsは、レコードセットを生成しないことを意味します。

 

cnn.execute strSQL,,adExecuteNoRecords

 

定数名adExecuteNoRecordsは、行3include file=で指定しているadovbs.incファイルに定義されています。

 

3: <!--#include file=adovbs.inc -->

 

30-32では、SQLINSERTステートメントで挿入したレコードのID(得意先コード)を取得してブラウザに送信しています。得意先テーブルの得意先コードは、オートナンバー型のフィールドですからAccessJetエンジンが自動採番します。行30SELECT @@IDENTITYは、直前に挿入したレコードのIDを取得することを意味します。行32rs(0).Valueは、レコードセットの最初のフィールド値(得意先コード)を取得することを意味します。

 

strSQL = "Select @@IDENTITY;"

set rs = cnn.execute(strSQL)

response.Write "得意先コード:" & rs(0).Value & "<br>"

è 得意先コード: 91

 

33では、行31Executeメソッドで生成したレコードセットを閉じています。行34では、行24Openメソッドで接続したデータベースを切断しています。行35-36では、RecordsetオブジェクトとConnectionオブジェクトを解放しています。

 

set rs = nothing

set cnn = nothing

 

 

   SQLUPDATEステートメントを利用してレコードを更新するには

 

SQLUPDATEステートメントを利用してレコードを更新する方法を説明します。

 

UPDATE table_name SET column_name = new_value

WHERE column_name = some_value


table_name
には、データベースのテーブル名を指定します。column_nameには、テーブルのフィールド名を指定します。new_valueには、フィールドの更新値を指定します。WHERE句のcolumn_nameには、検索するレコードのフィールド名を指定します。some_valueには、検索値を指定します。WHERE句を指定しないときは、テーブルのすべてのレコードが更新対象になりますので注意してください。

 

UPDATE MailAddress SET Name = “Akio Kasai”

  WHERE Email = “admin@accweb.com”

 

図 UPDATEステートメントでレコードを更新するサンプル

 

Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLUPDATEステートメント」をクリックしてください。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-28では、得意先テーブルのレコードを更新するSQLを作成して変数strSQLに保存しています。このSQLは、得意先コード51の担当者名を「平成 太郎」に更新します。SQLWHERE句は、得意先コード51が更新対象となることを意味します。行28では、Response.Writeで変数strSQLの内容をブラウザに送信しています。

 

strSQL = "Update 得意先 Set 担当者名= '平成 太郎'" _

  & " Where 得意先コード= 51;"

response.Write strSQL & "<br>"

èUpdate 得意先 Set 担当者名='平成 太郎' Where 得意先コード= 51;

 

29では、ConnectionオブジェクトのExecuteメソッドでstrSQLに保存されているSQLを実行します。Executeメソッドの引数adExecuteNoRecordsは、レコードセットを生成しないことを意味します。

 

cnn.execute strSQL,,adExecuteNoRecords

 

30-31では、データベースを切断してConnectionオブジェクトを解放しています。

 

cnn.close

set cnn = nothing

 

 

 

   SQLDELETEステートメントを利用してレコードを削除するには

 

SQLDELETEステートメントを利用してテーブルに格納されているレコードを削除する方法を説明します。

DELETE FROM table_name WHERE column_name = some_value

or

DELETE * FROM table_name WHERE column_name = some_value

 

table_nameには、データベースのテーブル名を指定します。WHERE句のcolumn_nameには、検索するレコードのフィールド名を指定します。some_valueには、検索値を指定します。WHERE句を指定しないとテーブルのすべてのレコードが削除対象になりますので注意してください。

 

DELETE FROM MailAddress

  WHERE Email = “admin@accweb.com”

 

 

図 DELETEステートメントでレコードを削除するサンプル

 

Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLDELETEステートメント」をクリックしてください。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-29では、レコードを挿入するSQLを作成して新規レコードを挿入しています。得意先テーブルの得意先コードは、オートナンバー型のフィールドですからAccessJetエンジンが自動採番します。

 

strSQL = "Insert Into 得意先 (得意先名,郵便番号,都道府県)" _

  & " Values ('フレンドリーソフト','340-9999','埼玉県');"

cnn.execute strSQL,,adExecuteNoRecords

 

30-32では、挿入したレコードの得意先コードを取得して変数lngCustIDに保存しています。行30SELECT @@IDENTITYは、直前に挿入したレコードのID(得意先コード)を取得することを意味します。行32rs(0).Valueは、レコードセットの最初のフィールド(得意先コード)の値を取得することを意味します。

 

strSQL = "Select @@IDENTITY;"

set rs = cnn.execute(strSQL)

lngCustID = rs(0).Value   è 95

 

34-36では、挿入したレコードを削除するSQLを作成して変数strSQLに保存しています。SQLWHERE句には、挿入したレコードの得意先コードを指定しています。行36では、Response.WritestrSQLの内容をブラウザに送信しています。

 

strSQL = "Delete * From 得意先 Where 得意先コード = " _

  & clng(lngCustID) & ";"

response.Write strSQL & "<br>"

èDelete * From 得意先 Where 得意先コード= 95;

 

37では、ConnectionオブジェクトのExecuteメソッドでstrSQLに保存されているSQLを実行します。このSQLWHERE句には、「得意先コード=95」が指定されていますので、得意先コード95のレコードが削除対象になります。Executeメソッドの引数adExecuteNoRecordsは、レコードセットを生成しないことを意味します。このオプションを指定すると処理が高速になります。

 

cnn.execute strSQL,,adExecuteNoRecords

 

38では、データベースを切断しています。行39-40では、RecordsetオブジェクトとConnectionオブジェクトを解放しています。

 

set rs = nothing

set cnn = nothing

 

 


 

   SQLSELECTステートメントを利用してレコードを抽出するには

 

SQLSELECTステートメントを使用してテーブルのレコードを抽出する方法を説明します。

 

SELECT column_name(s) FROM table_name

or

SELECT * FROM table_name

 

column_nameには、テーブルのフィールド名を指定します。複数のフィールドを指定するときは、コンマ区切りで指定します。テーブルのすべてのフィールドを選択するときは、フィールド名の代わりにを指定します。table_nameには、データベースのテーブル名を指定します。テーブルのレコードを絞り込むには、WHERE句を指定します。また、テーブルのレコードを並べ替えするには、ORDER BY句を指定します。

 

SELECT Email, Name FROM MailAddress;

SELECT * FROM MailAddress;

SELECT * FROM MailAddress

  WHERE Email = “admin@accweb.com”;

SELECT Name, Email FROM MailAddress

  ORDER BY Name;

 

 

 

図 SELECTステートメントでレコードを抽出するサンプル

 

Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLSELECTステートメント」をクリックしてください。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-28では、得意先テーブルからレコードを抽出するSQLを作成して変数strSQLに保存しています。このSQLでは、SELECTのフィールド名にを指定していますのでレコードのすべてのフィールドが抽出されます。また、WHERE句で「都道府県=’東京都」を指定していますので東京都内の得意先のみ抽出されます。行28では、Response.WritestrSQLの内容をブラウザに送信しています。

 

strSQL = "Select * From 得意先" _

  & " Where 都道府県='東京都';"

response.Write strSQL & "<br><br>"

èSelect * From 得意先 Where 都道府県='東京都';

 

29では、ConnectionオブジェクトのExecuteメソッドでstrSQLに保存されているSQLを実行します。Recordsetのオブジェクトが生成されて変数rsにポインタが設定されます。

 

set rs = cnn.execute(strSQL)

 

31-37do until…loopでは、レコードセットのすべてのレコードをブラウザに送信しています。行32-34では、レコードセットのフィールド名(都道府県、得意先名、担当者名)を指定して値を取得してResponse.Writeでブラウザに送信しています。行35では、HTML<br>タグを送信して改行しています。行36では、RecordsetオブジェクトのMoveNextメソッドで次のレコードに移動しています。カレントが最終レコードのとき、MoveNextメソッドを実行するとEOFが報告されてdo until…loopが終了します。

 

do until rs.EOF

  response.Write rs("都道府県").Value & vbTab

  response.Write rs("得意先名").Value & vbTab

  response.Write rs("担当者名").Value

  response.Write "<br>"

  rs.MoveNext

loop

 

39では、レコードセットを閉じています。行40では、データベースを切断しています。

 

rs.close

cnn.close

 

41-42では、RecordsetオブジェクトとConnectionオブジェクトを解放しています。

 

set rs = nothing

set cnn = nothing

 

 

 

Tip

Accessのクエリで作成したSQLを流用するには:

 

Access には、テーブルからクエリを作成する機能がサポートされています。このクエリを使用すると、テーブルからフィールドをドラッグするだけで簡単にクエリを作成することができます。

 

図 Access 2002で得意先のクエリを作成した例

 

Accessには、クエリをSQL形式で表示させるSQLビューの機能がサポートされています。AccessのメニューからSQLビューをクリックするとクエリがSQLビューに表示されます。このSQLASP/ADOに流用するとSQLの知識がなくても簡単に作成することができます。

 

図 クエリをSQLビューに表示させた例

 

 

Access + Webのホームへ戻る