ADOとは
ADOとは、ActiveX Data Objectsの略で各種データベースをアクセスするコンポーネントです。ADOは、マイクロソフトのテクノロジーでIISをインストールすると自動的にインストールされます。なお、ADOの最新版はマイクロソフトのWebサイトからダウンロードすることができます。ADOは、MDAC(Microsoft Data Access Components)に含まれていますのでMDACをダウンロードします。
ADOには、SQL Server, Oracle, Access Jetなどの各種データベースのドライバーが用意されています。これらのデータベースにアクセスするには、ODBCでDSN(Data Source Name)を登録する方法と、DSNを使用しないで直接データベースを指定する方法(DSN-less方式と呼びます)があります。ここでは、DSN-less方式でデータベースを直接接続します。
ADOには、図に示すようにConnection, Command, Recordset, Record, Steamオブジェクトなどがサポートされています。RecordとStreamは、ADO 2.5でサポートされたオブジェクトです。ADOの各種オブジェクトには、プロパティとメソッドがあります。表にConnection, Command, Recordsetオブジェクトでサポートされているプロパティとメソッドの一覧を列挙しましたので参考にしてください。
ADOには、ADOX(ADO Extensions for DDL and Security)と呼ばれるADOの拡張コンポーネントがります。ADOXには、データベースの構造を保守するための各種プロパティとメソッドがサポートされています。
重要
|
Access
2002で作成されたデータベース(MDB)をADO経由でアクセスしたときの不具合: Access 2002で作成されたデータベース(MDB)を、ADO 2.7を使用してアクセスすると「選択されたCollating SequenceはOSではサポートされていません。」のエラーになります。この不具合は、Access 2000のデータ形式(デフォルトのデータ形式)とAccess 2002のデータ形式双方で発生します。 この不具合を回避するには、 ① Access 2000でデータベース(MDB)を作成する。 ② Access 2002で作成したデータベース(Access 2000/2002のデータ形式)をAccess 97のデータ形式に変換する。 の方法があります。 この不具合は、Access 2002 SP1でも解決されていないようです。 |
|
|
図 ADOオブジェクトモデル
|
|
図 ADOXオブジェクトモデル
表 Connectionオブジェクトのプロパティ/メソッド
|
プロパティ |
Attributes |
Connectionオブジェクトの属性を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") response.Write(cnn.Attributes) |
|
CommandTimeout |
Command実行時のタイムアウト時間(単位秒)を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") cnn.CommandTimeout=10 ‘ seconds response.Write(cnn.CommandTimeout) è 10 |
|
|
ConnectionString |
Connection情報を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0" response.Write(cnn.ConnectionString) èProvider=Microsoft.Jet.OLEDB.4.0 |
|
|
ConnectionTimeout |
ConnectionのOpenメソッドのタイムアウト時間(単位秒)を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0" cnn.ConnectionTimeout=30 ‘ seconds response.Write(cnn.ConnectionTimeout) è 30 |
|
|
CursorLocation |
Cursorのロケーション(adUseServer,adUseClient)を設定/参照します。 例: const adUseServer=2 const adUseClient=3 strSQL="SELECT * FROM 得意先" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set rs=server.CreateObject("ADODB.Recordset") rs.CursorLocation=adUseClient response.Write(rs.CursorLocation ) è 3 rs.Open strSQL,cnn |
|
|
DefaultDatabase |
デフォルトデータベース名を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.DefaultDatabase="mydb" |
|
|
IsolationLevel |
トランザクションのIsolationレベルを設定/参照します。 例: const adXactIsolated = 1048576 set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.IsolationLevel=adXactIsolated cnn.Open
server.MapPath("webdb/ado.mdb") response.Write(cnn.IsolationLevel) è 1048576 |
|
|
Mode |
プロバイダーのアクセク権限を設定/参照します。 例: const adModeRead = 1 const adModeWrite = 2 const adModeReadWrite = 3 set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Mode=adModeReadWrite cnn.Open
server.MapPath("webdb/ado.mdb") response.Write(cnn.Mode) è 3 |
|
|
Provider |
プロバイダー名を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") response.Write(cnn.Provider) è Microsoft.Jet.OLEDB.4.0 |
|
|
State |
Connectionの状態(open/closed)を返します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" response.Write(cnn.State) è 0(closed) cnn.Open
server.MapPath("webdb/ado.mdb") response.Write(cnn.State) è 1(open) |
|
|
Version |
ADOのバージョン番号を返します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") response.Write(cnn.Version) è 2.7 |
|
|
メソッド |
BeginTrans |
新規トランザクションを開始します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") cnn.BeginTrans |
|
Cancel |
実行を中止します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") cnn.Cancel |
|
|
Close |
データベースを切断します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") cnn.Close |
|
|
CommitTrans |
トランザクションを保存して終了させます。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") cnn.BeginTrans ・・・ cnn.CommitTrans |
|
|
Execute |
各種処理を実行します。 例: strSQL = "SELECT * FROM 得意先;" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
rs=cnn.Execute(strSQL) |
|
|
Open |
データベースを接続します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") |
|
|
OpenSchema |
スキーマ情報を返します。 |
|
|
RollbackTrans |
トランザクションを復元して終了させます。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open server.MapPath("webdb/ado.mdb") cnn.BeginTrans ・・・ cnn.RollbackTrans |
表 Commandオブジェクトのプロパティ/メソッド
|
プロパティ |
ActiveConnection |
Connection情報を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.Mappath("webdb/ado.mdb") set
cmd=server.CreateObject("ADODB.Command") cmd.ActiveConnection=cnn response.Write(cmd.ActiveConnection) èProvider=Microsoft.Jet.OLEDB.4.0; èPassword="";User ID=Admin; èData Source=D:\webdb\ado.mdb; ・・・ |
|
CommandText |
プロバイダーのCommand情報(SQL,Table,URL.・・・)を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.Mappath("webdb/ado.mdb") set
cmd=server.CreateObject("ADODB.Command") cmd.CommandText="得意先" response.Write(cmd.CommandText) è 得意先 |
|
|
CommandTimeout |
Command実行時のタイムアウト時間(単位秒)を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set cmd=server.CreateObject("ADODB.Command") cmd.CommandTimeout=10 response.Write(cmd.CommandTimeout) è 10 |
|
|
CommandType |
Commandオブジェクトのタイプ(adCmdText, adCmdTable, adCmdStoredProc,・・・)を設定/参照します。 例: const adCmdText = 1 const adCmdTable = 2 const adCmdStoredProc = 4 set cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
cmd=server.CreateObject("ADODB.Command") cmd.CommandText="得意先" cmd.CommandType=adCmdTable response.Write(cmd.CommandType) è 2 |
|
|
Name |
Commandオブジェクト名を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
cmd=server.CreateObject("ADODB.Command") cmd.Name="CommandName" response.Write(cmd.Name) è CommandName |
|
|
Prepared |
Commandを最初に実行するときコンパイル版を保存するかどうかの指示を設定/参照します。 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
cmd=server.CreateObject("ADODB.Command") cmd.ActiveConnection=cnn cmd.CommandText="得意先" cmd.Prepared=true response.Write(cmd.Prepared) è True |
|
|
State |
Commandオブジェクトの状態(Closed, Open, Connecting, Executing, Fetching)を返します。 例: const adStateClosed = 0 const adStateOpen = 1 const adStateConnecting = 2 const adStateExecuting = 4 const adStateFetching = 8 set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
cmd=server.CreateObject("ADODB.Command") response.Write(cmd.State) è 0 |
|
|
メソッド |
Cancel |
処理を中止します。 書式: cmd.Cancel |
|
CreateParameter |
パラメータオブジェクトを新規に生成します。 書式: set
prm= cmd.CreateParameter(name,
type, direction, size, value) |
|
|
Execute |
処理を実行します。 書式: set
rs = cmd.Execute(recordaffected, parameters, options) or cmd.Execute
recordaffected, parameters, options |
表 Recordsetオブジェクトのプロパティ/メソッド
|
プロパティ |
AbsolutePage |
Recordsetオブジェクトのページ番号を設定/参照します。 書式: rs.AbsolutePage |
|
AbsolutePosition |
カレントレコードの位置を設定/参照します。 書式: rs.AbsolutePosition |
|
|
ActiveCommand |
RecordsetのCommandオブジェクトを返します。 書式: rs.ActiveCommand |
|
|
ActiveConnection |
RecordsetのConnectionオブジェクトを設定/参照します。 書式: rs.ActiveConnection |
|
|
BOF |
Recordsetの先端を検出したときにTrueを返します。 書式: rs.BOF |
|
|
Bookmark |
Bookmark(カレントレコードの位置)を設定/参照します。 書式: rs.Bookmark 例: const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set rs=server.CreateObject("ADODB.recordset") rs.Open strSQL, cnn , adOpenStatic,
adLockReadOnly, adCmdText rs.MoveFirst varBookmark=rs.Bookmark rs.MoveLast rs.Bookmark=varBookmark |
|
|
CacheSize |
キャッシュサイズを設定/参照します。 書式: rs.CacheSize 例: const adUseClient = 3 const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set rs=server.CreateObject("ADODB.recordset") rs.PageSize = 10 rs.CacheSize
= 10 rs.CursorLocation = adUseClient rs.Open strSQL, cnn, adOpenStatic,
adLockReadOnly, adCmdText response.Write(rs.Recordcount) è 51 response.Write("<br>") response.Write(rs.PageCount) è 6 (=51/10+1) |
|
|
CursorLocation |
CursorのLocation(adUseServer, adUseClient)を設定/参照します。 書式: rs.CursorLocation 例: const adUseClient = 3 const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.CursorLocation
= adUseClient rs.Open strSQL, cnn, adOpenStatic,
adLockReadOnly, adCmdText |
|
|
CursorType |
Cursorのタイプ(adOpenForwardOnly, adOpenKeyset, adOpenDynamic, adOpenStatic)を設定/参照します。 書式: rs.CursorType 例: const adUseClient = 3 const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.CursorLocation = adUseClient rs.CursorType
= adOpenStatic rs.LockType = adLockReadOnly rs.Open strSQL, cnn |
|
|
DataMember |
DataMember名を設定/参照します。 書式: rs.DataMember |
|
|
DataSource |
DataSourceのオブジェクトを設定/参照します。 書式: rs.DataSource |
|
|
EditMode |
カレントレコードの編集状態を返します。 書式: rs.EditMode |
|
|
EOF |
Recordsetの終端を検出したときにTrueを返します。 書式: rs.EOF 例: strSQL="SELECT * FROM 得意先" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set rs=cnn.Execute(strSQL) do until rs.eof
response.Write rs(0)
response.Write "<br>"
rs.MoveNext loop |
|
|
Filter |
Recordsetのフィルタ条件を設定/参照します。 書式: rs.Filter |
|
|
Index |
Recordsetのカレントのインデックス名を設定/参照します。 書式: rs.Index |
|
|
LockType |
排他制御の種類を設定/参照します。 書式: rs.LockType 例: const adUseClient = 3 const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.CursorLocation = adUseClient rs.CursorType = adOpenStatic rs.LockType
= adLockReadOnly rs.Open strSQL, cnn |
|
|
MarshalOptions |
サーバーにどのレコードを戻すかを設定/参照します。 書式: rs.MarshalOptions |
|
|
MaxRecords |
Recordsetの最大レコード数を設定/参照します。 書式: rs.MaxRecords 例: strSQL="SELECT * FROM 得意先" set cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.MaxRecords=20 rs.Open strSQL,cnn |
|
|
PageCount |
Recordsetの総レコード数をページ数に換算して返します。 書式: rs.PageCount 例: const adUseClient = 3 const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open server.MapPath("webdb/ado.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.PageSize = 10 rs.CacheSize = 10 rs.CursorLocation = adUseClient rs.Open strSQL, cnn, adOpenStatic,
adLockReadOnly, adCmdText response.Write(rs.Recordcount) è 51 response.Write("<br>") response.Write(rs.PageCount) è 6 (=51/10+1) |
|
|
PageSize |
ページ当たりのレコード数を設定/参照します。 書式: rs.PageSize 例: const adUseClient = 3 const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.PageSize
= 10 rs.CacheSize = 10 rs.CursorLocation = adUseClient rs.Open strSQL, cnn, adOpenStatic, adLockReadOnly,
adCmdText response.Write(rs.Recordcount) è 51 response.Write("<br>") response.Write(rs.PageCount) è 6 (=51/10+1) |
|
|
RecordCount |
Recordsetのレコード件数を返します。 書式: rs.RecordCount 例: const adUseClient = 3 const adOpenStatic = 3 const adLockReadOnly = 1 const adCmdText = &H0001 strSQL="SELECT * FROM 得意先" set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.CursorLocation = adUseClient rs.Open strSQL, cnn, adOpenStatic,
adLockReadOnly, adCmdText response.Write(rs.Recordcount) è 51 |
|
|
Sort |
Recordsetを並べ替えするフィールドを設定/参照します。 書式: rs.Sort 例: rs.Sort = “フリガナ” rs.Sort = “受注日 DESC, 受注番号 |
|
|
Source |
Recordsetのソースを設定/参照します。 書式: rs.Source |
|
|
State |
Recordsetの状態を返します。 書式: rs.State |
|
|
Status |
カレントレコードのステータスを返します。 書式: rs.Status |
|
|
StayInSync |
親レコードと子レコードを連動させるかどうかの指示を設定/参照します。 書式: rs.StayInSync |
|
|
メソッド |
AddNew |
新規レコードを作成(登録)します。 書式; rs.AddNew
[fieldlist][,values] 例: varFields=Array("ProductName","Prize","Quantity") varValues=Array("Access
2000","3500","5") rs.AddNew
varFields,varValues |
|
Cancel |
実行を中止します。 書式: rs.Cancel |
|
|
CancelBatch |
バッチ更新処理を中止します。 書式: rs.CancelBatch
[affectrecord] |
|
|
CancelUpdate |
変更されたレコードを変更前の状態に復元します。 書式: rs.CancelUpdate |
|
|
Clone |
レコードのクローン(重複レコード)を作成します。 書式: set
rsClone=rs.Clone(locktype) |
|
|
Close |
Recordsetを閉じます。 書式: rs.Close 例: set
cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/asp.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.Open "得意先", cnn rs.Close cnn.Close |
|
|
CompareBookmarks |
Bookmarkを比較します。 書式: result=rs.CompareBookmarks(mark1,mark2) |
|
|
Delete |
レコードを削除します。 書式: rs.Delete
[affectrecords] |
|
|
Find |
レコードを検索します。 書式: rs.Find(criteria,skiprows,direction,start) |
|
|
GetRows |
Recordsetのレコードを二次元の配列変数に格納します。 書式: varArray=rs.GetRows(rows,start,fields) |
|
|
GetString |
Rrecordsetの全レコードを文字列として返します。 書式: set
strRs=rs.GetString(format,n,coldel,rowdel,nullexpr) |
|
|
Move |
レコードの位置を移動します。 書式: rs.Move
numrec,start |
|
|
MoveFirst |
先頭レコードに移動します。 書式: rs.MoveFirst |
|
|
MoveLast |
最終レコードに移動します。 書式: rs.MoveLast |
|
|
MoveNext |
次のレコードに移動します。 書式: rs.MoveNext |
|
|
MovePrevious |
前のレコードに移動します。 書式: rs.MovePrevious |
|
|
NextRecordset |
カレントのRecordsetオブジェクトを消去して次のRecordsetオブジェクトを返します。 書式: set
rsNext=rs.NextRecordset([affectrecord]) |
|
|
Open |
Recordsetを開きます。 書式: rs.Open
source,cnn,cursortype,locktype,option 例: set cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/asp.mdb") set
rs=server.CreateObject("ADODB.recordset") rs.Open
"得意先", cnn rs.Close cnn.Close |
|
|
Requery |
Recordsetを再クエリして最新のデータを取り込みます。 書式: rs.Requery
options |
|
|
Resync |
Recordsetのデータをリフレッシュします。 書式: rs.Resync
affectrecords,resyncvalues |
|
|
Save |
Recordsetをファイルまたはストリームオブジェクトに保存します。 書式: rs.Save
destination,persistformat 例: set
xmlDoc=server.CreateObject("Microsoft.XMLDOM") set cnn=server.CreateObject("ADODB.Connection") cnn.Provider="Microsoft.Jet.OLEDB.4.0" cnn.Open
server.MapPath("webdb/ado.mdb") set rs =
server.CreateObject("ADODB.recordset") rs.Open "得意先", cnn rs.Save
xmlDoc, 1 |
|
|
Seek |
レコードのキーを指定して検索します。 書式: rs.Seek
keyvalues,seekoption |
|
|
Supports |
指定した機能をサポートしているかどうかをTrue/Falseで返します。 書式: rs.Supports(cursoroptions) |
|
|
Update |
レコードを更新します。 書式: rs.Update
[fields][,values] |
|
|
UpdateBatch |
更新されているすべのレコードをデータベースに保存します。 書式: bool=rs.UpdateBatch
[affectrecords] |
● レコードセットの内容をブラウザに表示するには
ADOのConnectionオブジェクトを使用してAccess のデータベースado.mdbから得意先テーブルを読み込んでブラウザに表示する方法を説明します。Access のデータベースを使用可能にするには、ADOのConnectionオブジェクトのOpenメソッドでデータベースを接続します。AccessのJetエンジンを使用するには、ConnectionのProviderプロパティに” Microsoft.Jet.OLEDB.4.0”を設定する必要がります。参考までに、SQL Serverを使用するには”SQLOLEDB”、Oracleを使用するときは”MSDAORA”を設定します。Openメソッドの引数には、データベースの物理パスを指定します。
set cnn=Server.CreateObject("ADODB.Connection")
cnn.Provider="Microsoft.Jet.OLEDB.4.0"
cnn.Open "C:\webdb\ado.mdb"
データベースのテーブルを開くには、Connection, Command, Recordsetオブジェクトを利用する方法がありますがここでは、ConnectionオブジェクトのExecuteメソッドを使用します。Executeメソッドの引数1にはSQLを指定します。Executeメソッドには、引数2と引数3もありますが省略します。
set rs=cnn.Execute(“Select * From 得意先”)
ExecuteメソッドでRecordsetオブジェクトを取得したら、do until…loopでEOFを検出するまでMoveNextメソッドでレコードを読み込みます。
do until rs.EOF
・・・
rs.MoveNext
loop
|
|
図 レコードセットの内容を表示するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「レコードセットの内容を表示する」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには実行結果が表示されます。
図の行12-15では、ConnectionオブジェクトのOpenメソッドで指定するコネクション情報を変数strConnectionに保存しています。Provider=に”Microsoft.Jet.OLEDB.4.0;"を指定していますが、これはMicrosoftのJetエンジンのOLEDBを使用することを意味します。Data Source=には、Access 2000のデータベースado.mdbの物理パスを指定します。このサンプルでは、ado.mdbの物理パスを取得するのに、ASPのServer.MapPathメソッドを使用しています。
Server.MapPath(webdb/ado.mdb)
è D:\Inetpub\wwwroot\accweb\samples\ado\webdb\ado.mdb
行16では、ado.mdbの得意先テーブルを読み込むためのSQL(Structured Query Language)を作成して変数strSQLに保存しています。SELECTの後の*は、得意先テーブルのすべてのフィールドを取り込むことを意味します。特定のフィールドのみ取り込むときは、フィールド名を指定します。
SELECT * FROM 得意先;
SELECT 得意先コード, 得意先名 FROM 得意先;
行17-18では、Connectionオブジェクトのインスタンスを生成してOpenメソッドでAccessのデータベースado.mdbを接続(使用可能状態にする)しています。
set cnn = server.CreateObject("adodb.connection")
cnn.open strConnection
行19のExecuteメソッドは、引数で指定されたSQLを実行してRecordsetオブジェクトを返します。(データベースado.mdbの得意先テーブルのを読み込んで使用可能状態にします。)
set rs = cnn.execute(strSQL)
行20-27のdo until…loopでは、得意先テーブルのレコードをEOFになるまで読み込んでブラウザに表示しています。行21-24のfor each…nextループでは、レコードのすべてのフィールドを処理しています。行22-23では、フィールド名とフィールド値をResponse.Writeでブラウザに表示しています。行26では、RecordsetオブジェクトのMoveNextメソッドで得意先テーブルの次のレコードに移動しています。最終レコードを読み込んだ状態でMoveNextメソッドを発行するとEOFプロパティがTrueになります。
行28では、RecordsetオブジェクトのCloseメソッドでレコードセットを閉じています。行29では、ConnectionオブジェクトのCloseメソッドでデータベースを切断しています。
行30-31では、RecordsetとConnectionオブジェクトを解放しています。
● レコードセットの内容を表形式で表示するには
レコードセットの内容を表形式で表示させるには、HTMLの<table>・・・</table>タグを使用します。
<table>
<tr>
<td>列1</td>
<td>列2</td>
<td>列3</td>
</tr>
</table>
|
|
図 レコードセットの内容を表形式で表示するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「レコードセットの内容を表に表示する」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、実行結果が表示されます。
図の行15-20では、Access 2000のデータベースado.mdbに接続するための処理を行っています。行21では、ConnectionオブジェクトのExecuteメソッドでado.mdbの得意先テーブルのRecordsetオブジェクトを生成しています。SQLのSELECTに得意先テーブルのフィールド名(得意先名、担当者名、電話番号)が指定されていますので、ここで指定したフィールドのみ読み込まれます。
strSQL = "Select 得意先名,担当者名,電話番号 from 得意先"
set rs = cnn.execute(strSQL)
行22,36では、HTMLの<table>・・・</table>タグを生成しています。行23-27では、表の見出しを生成しています。行24-26のfor each…nextでは、RecordsetオブジェクトのFieldsコレクションからレコードセットのすべてのフィールド名(得意先名、担当者名、電話番号)を取得して表の見出しとして表示させています。表の見出しは、HTMLの<th>・・・</th>タグを使用して生成しています。
response.write "<tr>"
for each fld in rs.fields
response.write "<th>" & fld.name & "</th>"
next
response.write "</tr>"
行28-35のdo until…loopでは、表のデータ部を生成しています。行29,33では、HTMLの<tr>・・・</tr>タグを生成しています。行30-32のfor each…nextでは、HTMLの<td>・・・</td>タグを生成しています。
do until rs.eof
response.write "<tr>"
for each fld in rs.fields
response.write "<td>" & fld.value & "</td>"
next
response.write "</tr>"
rs.MoveNext
loop
● 表に背景色をつけてレコードを表示させるには
HTMLの<table>・・・</table>タグで表を作成するとき、行ごとに異なる背景色をつける方法を説明します。表に背景色をつけるには、スタイルシートのbackgroundプロパティを使用します。前景色は、colorプロパティを使用します。たとえば、表のセルの背景色をオレンジ、前景色を黒に設定するには、以下のようなCSSを定義します。
<style>
td {background: orange; color: black}
</style>
|
|
図 表に背景色をつけてレコードを表示するサンプル
Access + Webのダウンロードにサンプルが収録されています。ダウンロードの目次を表示させたら、「表に背景色をつけて表示する」をクリックしてください。Internet Explorerの左側のフレームには、ASPのソースが表示されます。右側のフレームには、実行結果が表示されます。
表の見出しのセルの背景色をブラウン、前景色を白にするには以下のようなCSSを定義します。
th {background: brown; color: white; font-size: 80%; }
表のデータ部のセルの背景色は、行ごとに交互に切り替えるためにオレンジとピンクの2種類用意します。
td.orange {background: orange; color: black; font-size: 80%;}
td.pink {background: pink; color: black;font-size: 80%;}
図の行33-40では、Access 2000のデータベースado.mdbを接続するための処理を行っています。行41では、ConnectionオブジェクトのExecuteメソッドでado.mdbの得意先テーブルのRecordsetオブジェクトを生成しています。行42, 63では、<table>・・・</table>タグを生成しています。行43-47では、表の見出しを生成しています。HTMLの<th>タグには、CSSが定義されていますので見出しはブラウンの背景色と白の前景色で表示されます。
response.write "<tr>"
for each fld in rs.fields
response.write "<th>" & fld.name & "</th>"
next
response.write "</tr>"
行48-62のdo until…loopでは、表のデータ部を生成しています。行49-59で表の行を生成するとき、行ごとに背景色を切り替えるために変数fOrangeを使用しています。fOrangeがTrueのときは、<td>タグを生成するときclass=”orange”を指定して、td.orangeのスタイルシートを適用させています。fOrangeがFalseのときは、<td>タグを生成するときclass=”pink”を指定して、td.pinkのスタイルシートを適用させています。
for each fld in rs.fields
if fOrange then
response.write "<td class='orange'>" & fld.value & "</td>"
else
response.write "<td class='pink'>" & fld.value & "</td>"
end if
next
行60では、フラグfOrangeの値を逆に設定して背景色を行ごとに切り替えています。
fOrange = not fOrange
True è False
False è True
Tip
|
Response.WriteでHTMLタグを生成するときHTMLソースを見易くするには: Response.WriteメソッドでブラウザにHTMLタグを送信するとき、vbNewLineまたはvbCrLfを付加して改行すると、HTMLソースを解析するときに見易くなります。 Response.Write “<br>” & vbNewLine Response.Write “<br>” & vbCrLf 個々のResponse.WriteにvbNewLineを付加するのが煩わしいときは、Echoのようなサブプロシージャを作成すると便利です。 Echo “<br>” ‘ 自動的にvbNewLineが付加されます sub Echo(strValue) response.write(strValue & vbNewLine) end sub |