SQLコマンドでレコードを挿入/更新/削除/抽出するには
SQL(Structured Query Language)でレコードを挿入、更新、削除、抽出する方法を説明します。SQLを使用すると、ADOのAddNew, Update, Delete, Findメソッドを使用するよりも高速な処理ができます。
● SQLのINSERTステートメントを利用してレコードを挿入するには
SQLのINSERT ステートメントを使用してテーブルにレコードを挿入する方法を説明します。
|
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のダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLのINSERTステートメント」をクリックしてください。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は、行3のinclude file=で指定しているadovbs.incファイルに定義されています。
3: <!--#include file=adovbs.inc -->
行30-32では、SQLのINSERTステートメントで挿入したレコードのID(得意先コード)を取得してブラウザに送信しています。得意先テーブルの得意先コードは、オートナンバー型のフィールドですからAccessのJetエンジンが自動採番します。行30のSELECT @@IDENTITYは、直前に挿入したレコードのIDを取得することを意味します。行32のrs(0).Valueは、レコードセットの最初のフィールド値(得意先コード)を取得することを意味します。
strSQL = "Select @@IDENTITY;"
set rs = cnn.execute(strSQL)
response.Write "得意先コード:" & rs(0).Value & "<br>"
è 得意先コード: 91
行33では、行31のExecuteメソッドで生成したレコードセットを閉じています。行34では、行24のOpenメソッドで接続したデータベースを切断しています。行35-36では、RecordsetオブジェクトとConnectionオブジェクトを解放しています。
set rs = nothing
set cnn = nothing
● SQLのUPDATEステートメントを利用してレコードを更新するには
SQLのUPDATEステートメントを利用してレコードを更新する方法を説明します。
|
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のダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLの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-28では、得意先テーブルのレコードを更新するSQLを作成して変数strSQLに保存しています。このSQLは、得意先コード51の担当者名を「平成 太郎」に更新します。SQLのWHERE句は、得意先コード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
● SQLのDELETEステートメントを利用してレコードを削除するには
SQLのDELETEステートメントを利用してテーブルに格納されているレコードを削除する方法を説明します。
|
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のダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLの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-29では、レコードを挿入するSQLを作成して新規レコードを挿入しています。得意先テーブルの得意先コードは、オートナンバー型のフィールドですからAccessのJetエンジンが自動採番します。
strSQL = "Insert Into 得意先 (得意先名,郵便番号,都道府県)" _
& " Values ('フレンドリーソフト','340-9999','埼玉県');"
cnn.execute strSQL,,adExecuteNoRecords
行30-32では、挿入したレコードの得意先コードを取得して変数lngCustIDに保存しています。行30のSELECT @@IDENTITYは、直前に挿入したレコードのID(得意先コード)を取得することを意味します。行32のrs(0).Valueは、レコードセットの最初のフィールド(得意先コード)の値を取得することを意味します。
strSQL = "Select @@IDENTITY;"
set rs = cnn.execute(strSQL)
lngCustID = rs(0).Value è 95
行34-36では、挿入したレコードを削除するSQLを作成して変数strSQLに保存しています。SQLのWHERE句には、挿入したレコードの得意先コードを指定しています。行36では、Response.WriteでstrSQLの内容をブラウザに送信しています。
strSQL = "Delete * From 得意先 Where 得意先コード = " _
& clng(lngCustID) & ";"
response.Write strSQL & "<br>"
èDelete * From 得意先 Where 得意先コード= 95;
行37では、ConnectionオブジェクトのExecuteメソッドでstrSQLに保存されているSQLを実行します。このSQLのWHERE句には、「得意先コード=95」が指定されていますので、得意先コード95のレコードが削除対象になります。Executeメソッドの引数adExecuteNoRecordsは、レコードセットを生成しないことを意味します。このオプションを指定すると処理が高速になります。
cnn.execute strSQL,,adExecuteNoRecords
行38では、データベースを切断しています。行39-40では、RecordsetオブジェクトとConnectionオブジェクトを解放しています。
set rs = nothing
set cnn = nothing
● SQLのSELECTステートメントを利用してレコードを抽出するには
SQLのSELECTステートメントを使用してテーブルのレコードを抽出する方法を説明します。
|
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のダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「SQLのSELECTステートメント」をクリックしてください。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.WriteでstrSQLの内容をブラウザに送信しています。
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-37のdo 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ビューに表示されます。このSQLをASP/ADOに流用するとSQLの知識がなくても簡単に作成することができます。
図 クエリをSQLビューに表示させた例 |