オリオメイト

ニュースリリース


Access2013 VBAとVisual Studio2013から IBM i へのOLEDB経由で接続のプロパティ

 Access2013 VBAからIBM i へデータ接続を行ったときに接続プロパティについての情報があまりに少なく実際に使用できるようになるまで結構時間を費やしてしまったので備忘録の意味も含めて記載します。
 また、Visual Studio2013のライセンスがあったので同じOLEDB経由で接続したときのプロパティに違いがあるか比較も行ってみました。


環境

IBM i
 Power720 V7.1

PC
 Windows10 Pro 64bit(当初はWindows7 Pro 64bit)
 Access 2013
 Visual Studio 2013
 IBM i Access Windows 7.1 SI62603 のOLEDBドライバー
 ※Windows10は動作対象外ですが当時はこれしかありませんでした。

 接続プロパティを設定する上で知りたかったポイントは以下の2つでした。
 ・IBM i のライブラリーとファイル(SQLのスキーマとテーブル)の指定方法
 ・IBM i のライブラリーリストを使用する指定方法


IBM i のライブラリーとファイル(SQLのスキーマとテーブル)の指定方法

 Access2013 VBAでSQL FROM句にライブラリー内のファイルを指定する方法は「FROM ライブラリー名.ファイル名」となるですが、IBM i のCLで使用する形式で「FROM ライブラリー名/ファイル名」とならないかと調べてみました。

 ODBCでは命名規則の項目に「SQL命名規則(*SQL)」と「システム命名規則(*SYS)」が選択可能でありOLEDBでそれらしいパラメータを1個ずつ調べみると「Naming Convention」プロパティ値(「0:SQL命名規則」と「1:システム命名規則」)があり、設定値を 1 としてSQL FROM句に「FROM ライブラリー名/ファイル名」することできるようになりました。


IBM i のライブラリーリストを使用する指定方法

 IBM i の開発で使用するユーザーのライブラリーリストが使用できればSQL FROM句に「FROM ファイル名」と記述できて、接続ユーザー切替ことで本番環境と開発環境のデータベース切替可能となるのでこの辺りのプロパティも調べてみました。

 OLEDB接続時にライブラリーリストを指定できそうなプロパティは「Catalog Library List」と「Library List」の2つでプロパティにいろいろ指定を変えて試行した結果

Catalog Library List Library List 接続結果
無指定 無指定 システムライブラリーリストのみ
ライブラリー指定 無指定 指定したライブラリーのリストのみで
システムライブラリーリストが無い
無指定 ライブラリー指定
※USRLIBL 無指定 システムライブラリーリストのみ
無指定 ※USRLIBL VBAではエラー

 ここまででシステムライブラリーリストが参照可能な2つのケースに着目し、IBM i 側でユーザーに対して設定するライブラリーリストの設定を見直してみます。

 IBM i ログイン時にライブラリーリストを設定する方法としてユーザープロフィールの「呼び出す初期プログラム(INLPGM)」に「ADDLIBLE」でライブラリーを追加するCLを記述していましたが、VBAではこの部分が機能しないようなので、使用するライブラリーを記載したジョブ記述を別途作成後にユーザープロフィールの「ジョブ記述(JOBD)」に指定して再度テストを行った結果

Catalog Library List Library List 接続結果
無指定 無指定 システムライブラリーとジョブ記述(JOBD)
に記述したライブラリーリスト
※USRLIBL 無指定

※「Catalog Library List」、「Library List」ともに無指定の場合にライブラリーリスト参照できますが、OLEDB接続後に「Catalog Library List」へ使用しているライブラリーリストが返らないのでVBAのデバッグ中にライブラリーリストを確認しずらいため、「Catalog Library List」に「*USRLIBL」を指定して現在使用しているライブラリーリストが確認可能なのでこちらを使用しています。


・Access2013 VBAで使用したコード例は以下の通りです。

Public Function DbConnectionCreate(ByRef dbcon As ADODB.Connection, ByRef command As ADODB.command) As Boolean On Error GoTo ERROR
‘ ADODBコネクション生成
Set dbcon = New ADODB.Connection
‘ プロバイダ
dbcon.Provider = “IBMDA400”

‘ データソース名、サーバ名、IPアドレス、ファイル名
dbcon.Properties(“Data Source”) = serverName

‘ ユーザID
dbcon.Properties(“User ID”).value = userId

‘ パスワード
dbcon.Properties(“Password”).value = userPassword

‘カタログライブラリーリスト
dbcon.Properties(“Catalog Library List”).value = “*USRLIBL”

‘ライブラリー指定方法(システム)
dbcon.Properties(“Naming Convention”).value = 1

‘ DB接続
dbcon.Open
‘ コマンドの初期化
Set command = New ADODB.command
command.ActiveConnection = dbcon
DbConnectionCreate = True
Exit Function
ERROR:

MsgBox “エラー番号:” & Err.NUMBER & vbNewLine & _
“エラー内容:” & Err.Description
DbConnectionCreate = False
End Function

注1) 上記コードを使用する場合は使用環境・用途により書換えが必要です。また動作保証するものでもありません。

注2) 変数について
dbcon,commandは外部で定義しています。
serverName,userId,userPasswordは外部で定数として定義しています。
 
注3) 接続用に生成されるプロパティ
Provider=IBMDA400.DataSource.1;
Password=XXXX;
User ID=XXXX;
Data Source=XXX.XXX.XXX.XXX;
Catalog Library List=*USRLIBL;Naming Convention=1
※XはserverName,userId,userPasswordに設定した定数を表しています。


・Visual Studio2013からのOLEDB接続

今回は「サーバーエクスプローラー」->「データ接続」->「接続の追加」でOLEDBの接続を作成し「詳細設定」のプロパティを確認しました。「接続の追加」で設定して項目とプロパティは以下の通りです。


プロパティ 設定したプロパティ
データソース その他
データプロパイダー .NET Framework OLE DB 用データ プロパイダー
OLE DB プロパイダー IBM DB2 for i IBMDA400 OLE DB Provider
サーバー名またはファイル名 IBM i のIPアドレス
ユーザー名 接続ユーザー名
パスワード 接続ユーザー名のパスワード
パスワードを保存する チェック
Catalog Library List(詳細設定) ※USRLIBL
Naming Convention(詳細設定) 1

注2)接続用に生成されるプロパティ
Provider=IBMDA400.DataSource.1;
Data Source=XXX.XXX.XXX.XXX;
Persist Security Info=True;
User ID=XX;
Catalog Library List=*USRLIBL;
Naming Convention=1
※「Data Source」のXはIPアドレス、「User ID」のXは接続ユーザー名を表しています。


・IBM i(Power720)接続時、プロパティ(Property)の返値

同じOLEDBを使用して接続したときに大きく違いが発生するのかと思い比較してみました。結果としてVisual Studio2013のほうがプロパティ数が多い結果となっていますが動作上問題になりそうなプロパティはなさそうです。

IBM i(Power720)接続時、プロパティ(Property)の返値の比較表

プロパティ(Property) Access2013の設定値 Visual Studio2013
の設定値
Provider IBMDA400.DataSource.1 IBMDA400.DataSOURCE.1
Persist Security Info False True
User ID ユーザー
Data Source IPアドレス
Protection Level NONE 0
Initial Catalog IBM i のホスト名
Transport Product Client Access
SSL DEFAULT
Force Translate 65535
Default Collection
Convert Date Time To Char TRUE
Catalog Library List ユーザーログイン時の
Library List
※USRLIBL
Cursor Sensitivity 3
Use SQL Packages False
SQL Package Library Name
SQL Package Name
Add statements to SQL package True
Unusable SQL Package Action 1
Block Fetch True
Data Compression True
Sort Sequence 0
Sort Table
Sort Language ID
Query Options File Library
Trace 0
Hex Parser Option 0
Maximum Decimal Precision 31
Maximum Decimal Scale 31
Minimum Divide Scale 0
Library List
Naming Convention 1
Query Optimize Goal 0
Query Storage Limit -1
Handle Numeric Data Errors 1
Keep Trailing Blanks False
Application Name MSACCESS.EXE devenv.exe
Decfloat Rounding Mode 0
Decfloat Error Option 0
Client User ID
Client WorkStation Name
Client Program ID
Client Accounting
Block Size 0
Concurrent Access Resolution 0
Xml Strip Whitespace True
Read Only Connection False
Job Name 項目無
Password パスワード(表示は●)
OLE DB Services Default
Connect Timeout 0
Extended Properties
Locale Identifier 1041
File Name

注)
・設定値の「-」は値なしです。
・Persist Security Infoは接続のセキュリティ情報取得有無(有:True 無:False)なので必要がない場合はFalseが良いようです。
・devenv.exeはVisual Studio関連のプロセスです。

2017年11月14日 10:07 AM | 【 技術情報

« 前の記事へ次の記事へ »

弊社サイトのウイルス対策について

このサイトはWebサーバーにアップする際、自動にてウイルスチェックを行っておりますので安心して閲覧いただけますことをご案内いたします。

aAdobe社より配布のAdobe Readerを利用したコンテンツが一部ございます。こちらよりソフトをダウンロードしご利用下さい。