Windows7-VisualBasic6 - Oracle
Window7 で Visual Basic が使えるか?そのうえでOracleに接続できるか.という命題です.
前半は「接続」について,VB6については後半です
結論をいうと,単純なプロジェクトはかけそうだが,ホントにちゃんと動いているか,exeが出来ているかは不安である.
oracle 9i に 繋げるか (client が 9 のとき, 11のとき)(ODBCは oo4oは)
oracle 11g に繋げるか (client が 9 のとき, 11のとき)(ODBCは oo4oは)
まずは Windows7 を 普通にインストールします.これは問題ないと思います.spでどうこうという話もあったので,spはなしにしておきます.
次に Visual Studio をインストールします
いきなりこんなことを言われますが,とりあえず無視して進みます
次にこんなことを言われます.このチェックを外すと先に進めないので,チェックを入れたままで先に進みます.
またこんなことを言われますが,これも無視.
で,JVMがインストールされて再起動がかかります.
VSのセットアップが始まるとすぐに叱られますが,これも無視
で,一応インストールは終了する.
再起動を促されるので再起動する.
VBを起動する....と,
OKすると,VBが起動する.ちゃんと動いているのかしら.ただし二回目からはでない.これまた不思議.
第一回の起動を「管理者として実行」すると,このオートメーションエラーはでない.
なお,その後も互換性プロパティで「管理者として実行」をチェックしておく方が吉
client を 11, server も 11 に繋いだ環境でテストしていきます.
oracle9.2.0.1 client をインストールしてみる
と...
無視して進めると [Oracle Universal Installer 2.2] というのが走る
だがしかし,はしらない.
OK すると進んでしまう.
oracle enterprise manager でテストするとでつながるようだ
sqlplusでは?ということで,まず
oracle net manager でサービス・ネーミングの構成
で,SQLを起動して,接続
というわけで,
Windows 7 上で
(このインストールがちょっとあやしいけど) 92010NT_CLT を install
SQL*Plus: Release 9.2.0.1.0 で Oracle9i Release 9.2.0.1.0 に接続可(Enterprise manager, Net Manager, SQL*Plus)
SQL*Plus: Release 9.2.0.1.0 で Oracle11g Release 11.2.0.1.0 に接続不可(設定次第かもしれない. Net Managerのテストが通らないのでODBCやoo4oもNGだろう).
win32_11gR2_client (instant client でなくて管理者)を install
Net Manager で設定 ホスト名は名前解決できればdomail名はあってもなくても(server側のfirewallの状況によるみたい.後述).
(SQL plus の記述方法によっては Net Manager の設定は不要)
SQL*Plus: Release 11.2.0.1.0 で Oracle9i Release 9.2.0.1.0 に接続可(Net Manager, SQL*Plus)
実はこの記述なら Net Manager の設定は不要.
Net Manager の設定をすると 9->9 に繋ぐみたいに,この記述が可能
というわけで,
Windows 7 上で
(このインストールがちょっとあやしいけど) 92010NT_CLT を install
Oracle9i Release 9.2.0.1.0 に接続可(Enterprise manager, Net Manager, SQL*Plus(SQL*Plus: Release 9.2.0.1.0)
Oracle11g Release 11.2.0.1.0 に接続不可(設定次第かもしれない. Net Managerのテストが通らないのでSQL*Plus, ODBCやoo4oもNGだろう).
win32_11gR2_client (instant client でなくて管理者)を install
Oracle9i Release 9.2.0.1.0 に接続可 Net Manager, SQL*Plus(SQL*Plus: Release 11.2.0.1.0)
11gに繋ぐために
Net Manager で設定.
サービス名は[orcl.camp.local] である必要があった.[orcl]ではダメだった.listner.ora の違い?
ホスト名は名前解決できることが条件のようだ
Net Manager でサービス・ネーミングを設定してあるので,この記述でOK
(下の絵は間違えている.
>sql*Plus scott/tiger@conTo11g
のはず
もちろんこの記述でもOK
しかし,これではNG (前述)[..../orcl.camp.local] なら OK だが,[..../orcl] では NG...
SERVICE_NAME の
[orcl.camp.local] ->[orcl] に書き換えてみる.で,reboot
一緒みたい...
サーバーで net configuration assistant いじってみるか
database configuration assistance で データベース ordAを作ってみる
oadAには[ordA.camp.local] などとしなくても [ordA] でつながる
サーバーをもう一度installしてみることにした.この画面で入力している グローバル・データベースの名前が使われているんだ
server の問題?
tnsnames.ora Network Configuration File: C:\app\{username}\product\11.2.0\dbhome_1\network\admin\tnsname.ora を眺めてみると
このグローバル・データベース名を[ordA]にしてインストールしてみた.インストールが終わって出来上がった tnsnames.ora はこんな感じ
で,つながるかといえば...firewall で 1251 を開けてあげて,---あれっつながらない.
server名にドメインを入れていない [campORCL11g]としている.
(11g は scott さんがlock されているので,EMでデヘタベース - セキュリティ - ユーザー と辿って,lock 解除の要あり)
これなら繋げる
server名にドメインを入れている [campORCL11g.camp.local]としている.
serverのfirewall を off にすると,ドメインを入れずに [campORCL11g]としても繋げる.
dos窓でserverにpingを打っても,同じ状況が再現される.windows2008の仕様かも?
Net Manager のテストもOK
というわけで,
Windows 7 上で
win32_11gR2_client を install
Oracle9i Release 9.2.0.1.0 に接続可 Enterprise manager, Net Manager, SQL*Plus(SQL*Plus: Release 11.2.0.1.0)
Oracle11g Release 11.2.0.1.0 に接続可 Enterprise manager(firewallあけて), Net Manager, SQL*Plus(SQL*Plus: Release 11.2.0.1.0)
oracle 9i に 繋げるか (client が 9 のとき, 11のとき)(SQL*Plusは, ODBCは oo4oは)
oracle 11g に繋げるか (client が 9 のとき, 11のとき)(SQL*Plusは, ODBCは oo4oは)
上記の環境で,VB6 で ODBC 接続,oo4o 接続を試みます.
ODBCドライバはこれを使用.instant client の時はどうなるんだろう
ちゃんと繋がります
ちなみに,TNSサービス名のこの記述ではつながりません.ODBC 接続の場合には,サービスネーミングの設定が必要そうです.
11gへのODBC接続はどうでしょうか.大丈夫です
ちなみに,11gへの接続ならば,TNSサービス名のこの記述でもつながります.ODBC 接続の場合には,サービスネーミングの設定が必要ないかも.
さて,oo4o実験のためVisual Basic 6 を起動します.
一部レジストリへの登録エラーが出るので,初回起動は「管理者として実行する」のが吉です
そして,Oracle InProc Server 5.0 Type Libraryを参照設定します.
コードはこんな感じ
実行結果はこんな
SQL*Plus ではこんな記述が通るので,
こんな②のコードも試してみましたがNGでした - 記述が悪かった.何とかなります(後述)
oracle11gへも接続OKです.コードは③
結果は
サービス・ネーミングを使わないでこんな記述もOK
結果
では,②も同様に書き換えてみましょう
結果は
では,既存のvb6 project を持ってきて,開いてみよう.
以下は,もちろん開くprojectによって違いがある
「管理者として実行」にしないとでるエラーもある
Oracle InProc Server 5.0 Type Library の参照先を変更
わわわ
上の①②③④はclient9がinstallされたXPでどう動く?
直接記述の②④は無理だろう.
Windows 7 + instant client で ②④のような直接記述で書いた VB6 のコードは XP + Client 9 の環境では開発を続けられないだろう?実行は可能?
Windows 7 + non-instant client でサービス・ネーミングを使って書いたVB6 のコードは XP + Client 9 の環境では開発を続けられる?
XP + Client 9 (non-instant client )の環境で書いたVB6 のコードは,Windows 7 + non-instant client でサービス・ネーミングを使って書けば,開発を続けられる? 参照設定は変える必要がありそうだが.
--たぶん---
Windows 7 + Oracle11g の環境で,windows 7 からの接続設定が instant client で設定されている場合には,サービス・ネーミングを使わない直接記述に接続部分を変更する必要がありそうだ.oracle home が作られて,サービス・ネーミングが使える状況なら,これが変更されていなければ,コードはそのまま使えそう.
ODBC 接続 oo4o 接続は instant client や ODAC を install した場合もチェックして.
instant client だと9iへはODBC接続できなさそう(homeがいるから).
Windows XP + Client 9 で作っていた project を持ってきます
フォームをloadするところで,まずCrystal Report がないと叱られたので,install して コンポーネントに登録します.ペイン右クリックで登録します.VS2010もinstallすればこれも入ってしまうかとも思いましたが,VS2010についてるのは.NET用だろうから,OCXが必要なのでダメでしょう.
とりあえず実行してみると,recordset の宣言で叱られます.
DAOを使用していたので,これの参照設定がおかしくなっているかと思い登録しようとしますが,以下のようにできません.
新規プロジェクトを作って,参照設定を試みますが同じです.以前の環境ではできたのに...
これは難易度高そうだ!.
この直前に office2003 を install していたので,元に戻したら OK です.(Viertual Machine は便利です)
いずれにしても,このような参照エラーがあるし,
DAOも古いので,
office 2010 を install してみましょう
これでもやっぱり駄目だ!!!
決方法は,ここらに書いてある.Crystal Recport 8 (8.0.0.371)が悪いと書いてある.
http://x68stage.ddo.jp/casper/sunbbs/1719.html
まさにこれだ.Crystal Recport 8 (8.0.0.371) インストール前まで戻ってみる.(virtual machine は便利だ)
Crystal Report 10 を install
いずれにしても,実行環境でのテストがひつようだな
なんと,Crystal32.ocx が無い...
Crystal Report を使わないコードに書き直すし方が早そうだ...
SOAP と excel library もあきらめよう
excel library はあってもよいかな
次の障害はこれ.
sp6をinstallしてOK