SSブログ

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オブジェクトです。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。