ADOについて その2 Connectionオブジェクト [ADO]
ADOはいくつかのオブジェクトで構成されていますが、私が普段使っているのは、次の2つです。
Connection
Recordset
Connectionオブジェクトは、データベースへの接続を行います。Connectionオブジェクトに、接続先データベースの場所・ユーザID・パスワードなどの情報を設定することで、データベースにアクセスできる状態にします。
接続を行うメソッドは、Openです。
書式は、
connection.Open ConnectionString, UserID, Password, Options
ConnectionString・・・接続文字列を設定します。必須。
UserID・・・接続先データベースのユーザIDを設定。省略可。
Password・・・接続先データベースのパスワードを設定、省略可。
Options・・・同期・非同期処理の選択。省略可。省略すると同期。普通は同期。
ここで謎の言葉が現れます、「接続文字列」。私も未だにどう書くのが正しいのかわかりません。とりあえず、MDBに繋ぎたいときは、次のように書けば繋がるようです。
例)
Dim Cn As New ADODB.Connection
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEST.MDB;"
Cn.Close
赤文字部分に、繋ぎたいMDBのパスを指定してやります。
接続文字列について、ちょっとだけふれておきます。
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEST.MDB;"
接続文字列は、「項目名」「=(イコール)」「値」区切りの「;(セミコロン)」を、複数持った文字列になっています。
最初の「Provider」は、接続先データベースの種類を設定しています(正確には、接続に使用するドライバ)。
二つめの「Data Source」は、データベースの場所、接続先の識別情報を設定しています。
こんな感じで、接続に必要な項目を指定するようになっています。どんな項目を指定するかは、接続するデータベースで変わってきます。
ACCESS自身もConnectionで接続を行っていて、
Application.CurrentProject.Connection
に、このConnectionオブジェクトがあります。
「ConnectionString」プロパティで、接続文字列が参照できます。
Debug.Print Application.CurrentProject.Connection.ConnectionString
Provider=Microsoft.Jet.OLEDB.4.0;User ID=XXXXX;Data Source=C:\TEST.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database=C:\PROGRA~1\COMMON~1\System\SYSTEM.MDW;Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
という感じで、接続文字列には様々は項目が存在しています。が、普通に繋ぐ分には上記例の内容でも十分です。
参考までに、
Oracleに繋ぐときの接続文字列
"Provider=OraOLEDB.Oracle;Data Source=SID;User ID=USER;Password=PASSWORD;"
SQLSERVERに繋ぐときの接続文字列(SQLSERVER認証)
"Provider=SQLOLEDB;Network Library=dbmssocn;Data Source=SERVERNAME;Initial Catalog=DBNAME;User ID=USER;Password=PASSWORD;"
赤文字部分は各々適宜変えて下さい。
Oracleは、だいたい上記の例で繋がると思います。SQLSERVERは、クライアントのMDACバージョンで、上記の例では繋がらない場合があるかも。SQLSERVERのバージョンでも違うことが。SQLSERVERは結構苦労した記憶が・・・。SERVERNAMEには、SQLSERVERが実行されているコンピュータ名とかIPアドレスを指定します。DBNAMEには、データベース名(?)を。DB作ったことある人ならわかるはず(?)。Network Library=dbmssocnはよくわからないけど、とりあえず付けてます(TCPで接続する指定らしい・・・)。
(20080814追記
SQL Server 2005 Express Editionに対する接続は、上記の書き方では繋がらないようです。Native Client OLE DB(SQLNCLI)を使うようにしたら、繋がりました。あと、Data Sourceの書き方がサーバ名¥SQLEXPRESSになるようです。
まだよく調べてないのですが、Express Editionはちょっと特殊なようです。)
(20110525追記
上記のExpressの件ですが、インストールするときの途中の指定でこうなることがあるみたい。具体的にはまた今度確認してみます。)
別タイプの接続文字列もあって、ODBC設定のDSN名を使用します。ヘルプにサンプルが載っています。このタイプで接続を行った場合、私の経験上(3~5年前の事)動作が不安定になることが多かったです。なのでこっちのタイプは使っていません。
以下、主要なプロパティ、メソッドについて。
詳細はVBAのエディタで、単語を入力してF1キーを押してください。
・プロパティ
CommandTimeout プロパティ
SQL文を実行した時に、処理結果が帰ってくるまで待機する時間を設定します。設定した時間までに応答が無い場合は、タイムアウトエラーになります。秒単位で指定します。
規定値は30秒が設定されているようです。そこそこの規模のDBになると、処理によっては結構時間がかかるようになってくるので、10分(600秒)くらいを常に設定しておくのが無難です。無制限にするのはおすすめしません。
ConnectionString プロパティ
さっきの接続文字列が参照できます。(設定もできる)
ConnectionTimeout プロパティ
先のCommandTimeoutと似ていて紛らわしいですが、こちらはconnection.Openを実行して、DBから接続確立の返事が返ってくるまでの待ち時間です。
通常は設定しなくても大丈夫だと思いますが、Openでエラーが起きる場合は、調整が必要になるかもしれません。
CursorLocation プロパティ
小難しいことをしない限り意識する必要は無いのですが、ADOにはカーソルサービスという、動作状態を表すものがあります。
クライアントカーソル(adUseClient) と サーバーカーソル(adUseServer)の二つの状態があり、動作が変わってきます。
余談ですが、OracleでFOR UPDATE NOWAITを使ってロックをかけようとしたら、adUseClientにしないとうまくいかないことがありました。
State プロパティ
Connectionの状態を確認できます。
・メソッド
Open メソッド
データベースへ接続します。
Close メソッド
データベースへの接続を解除します。
データベースの処理が終わったら、closeします。
Execute メソッド
SQL文を実行します。
結果を受け取る必要のないSQL文は、これで実行します。
Insert、Update、Delete、あと、ストアドの実行とか。
Selectは結果を受け取る必要があるので、RecordSetを使用します。
BeginTrans メソッド
CommitTrans メソッド
RollbackTrans メソッド
トランザクション処理の制御を行います。
トランザクションの詳細はまた今度っ。
次回はRecordsetオブジェクトです。
コメント 0