VB5でOracle9iに接続するには?


さち  2007-01-30 04:28:54  No: 97781

はじめまして。
初めて質問させていただきます。

Win98上で、VB5+Oracle8の環境で、DAO(3.5)を使って接続しています。
WinXP上で、VB5+Oracle9iに移行することになったので、
接続文字列を9iのサーバにつながるように変更しました。DAOは3.6にしました。
Accessからは接続できます。
しかしVB5から実行すると、実行時エラー3146が表示されてうまくいきません。
OSがWinXPでも、Oracle8iのままだと接続できます。

VB5だと、Oracle9iは接続できないのでしょうか?

ご教授願いただきたく、よろしくお願いいたします。


おやや  2007-01-30 22:03:32  No: 97782

VB5とOracle9iの問題ではなく、WinXPとVB5の問題ではないでしょうか?
↓マイクロソフトはVB5はWinXPと対応していないとしています。
http://www.microsoft.com/japan/msdn/vs_previous/VSTUDIO/techinfo/toolos.htm
せめてVB6にできないでしょうか?


もげ  2007-01-30 23:33:36  No: 97783

>Win98上で、VB5+Oracle8の環境で、DAO(3.5)を使って接続しています。

Oracle8iのクライアントでも、そのままでOracle9i(当方では9.2.0.1.0)
へ接続できます。接続するサービス名が変わるだけで、
それ以外はどこも変える必要はありません(他の要件があるなら話は別ですが)。

>DAOは3.6にしました。
なぜDAOを3.6にしたのですか?
VB5を使うなら、むしろこれがまずいかと。
最低でもVB6.0SP3以上が必要になります。

そもそも、Oracleに接続するならoo4o等もあり、
DAOでなくても良いわけですが、まあ、それは別途ということで。


さち  2007-02-02 02:04:05  No: 97784

もげさん、おややさん、有難うございます。

WinXPで動作させているのは、OSがWin98上で作成したexeです。
それは、問題なく動作します。

ただ、Oracle9iに接続ができません。
もげさんは、VB5でOracle9iに接続されているんですか!?
oo4oでですか?

DAOを3.6に変更したのは、
ACCESS95で作成していた帳票を、ACCESS2000にバージョンUPしたら、
VB5で開けることができなくなりました。
Netで色々調べたところ、DAOを3.6以上に変更すれば可能と記載されてあったためです。

なんとか、VB5のままでつなげたいのですが。。。


もげ  2007-02-02 03:09:22  No: 97785

Oracle Objects for OLEに関しては、
Microsoft Visual Basic 4/5/6に対応しています(下記URL参照)。

接続方法に関する詳細は、Oracle Objects for OLEのHELPをご参照ください。

(「ただ単に動けばいい」のか、
「お仕事としてちゃんとサポートしていく責任がある」のかにもよりますが)
OracleR9.2.0クライアント+VB5.0の組み合わせでは、
開発環境OSの選択にもご注意ください。
可能であれば、VB6.0やVB.NETのほうがベターと思います。

OracleR9.2.0クライアントの対応OSおよび最小要件 
http://www.oracle.co.jp/products/system/o9/win920/top.html#client

開発ツール対応 OS 一覧
http://www.microsoft.com/japan/msdn/vs_previous/VSTUDIO/techinfo/toolos.htm

Windows デスクトップ製品のライフサイクル
- ライフサイクル サポートおよび入手可能期間のガイドライン
http://www.microsoft.com/japan/windows/lifecycle/default.asp

エラー3146は、ODBC接続エラーなので、
アプリよりもむしろ接続文字列やDSNに問題があるような気もします。
VB5.0からどのようにOracleのテーブルへアクセスしていますか?
(リンクテーブルですか?DSN接続ですか?)
DSN接続なら
>Accessからは接続できます。
と仰っているDSNの設定とVB5の設定がズレていませんか?


もげ  2007-02-02 03:20:49  No: 97786

ごめんなさい。リンクが古かったです。
以下でアクセスできるかと。

OracleR9.2.0の対応OSおよび最小要件 
http://www.oracle.co.jp/products/system/o9/win920/

Windows デスクトップ製品のライフサイクル
http://www.microsoft.com/japan/windows/lifecycle/default.mspx


さち  2007-02-03 04:01:48  No: 97787

もげさん、こんにちわ!
お仕事としては、この状態でサポートなんてとてもまずいと思ってるんですが、
この状態で使わないといけない、理由があるので。。。涙

"ODBC;SRVR=aaaa;DSN=bbb;UID=cccc;PWD=dddd"

"ODBC;DSN=bbb;UID=cccc;PWD=dddd"

のように、SRVRの部分をカットしたら接続できたようです。
どんな違いがあるのかよくわからないのですが  ^^;

なので、一応接続部分は解決のようです。
色々教えていただいて、本当に有難うございました。

Access2000が"Unrecognized Database Format"とエラーで駄目なのは
相変わらずなんですが。涙
これはやっぱり、VB6にじゃないと、DAO3.6は使えないせいなんでしょうかね。。。


もげ  2007-02-05 17:42:40  No: 97788

>Access2000が"Unrecognized Database Format"とエラーで駄目なのは

もしかして、データコントロールをお使いですか?

[PRB] Access 2000 または Access 2002 にアップグレードするとエラー 
"データベースの形式を認識できません。" が発生するhttp://support.microsoft.com/kb/238401/ja


さち  2007-02-05 18:48:24  No: 97789

もげさん、おはようございます。
いつも有難うございます。

データコントロールを使ってると思います。
で、Access2000で発生するエラーについての対処法で、
DAO3.6を使ったんですけど、
もげさんにご指摘受けるまで、VB6からだというのには気づいてませんでした。

別の掲示板で、Vb5でAccess2000につながりました!という内容のがあったので、
もしかしたら、何かしたらつながるのかなぁ〜と思っているのですが、
その掲示板には詳しい内容が書いてなかったんです。涙

データコントロールを使用しないで、VBからAccessを使用することってできますか?


もげ  2007-02-05 20:03:33  No: 97790

当方は、VB5を検証できる環境がありませんので、参考情報のみになりますが、
前述の、
http://support.microsoft.com/kb/238401/ja
を最後まで読んでいただけましたでしょうか?

・ADO (または ADO データ コントロール) の場合、Microsoft.Jet.OLEDB.4.0 プロバイダを使用します。  
・DAO の場合、Microsoft DAO 3.6 Object Library への参照を追加します。  
・汎用データ コントロールを使用する場合、DAO 3.6 レコードセットを開いてから、そのレコードセットを次のように汎用データ コントロールのソースとして割り当てます(サンプルコードあり)。 
 
とあります。
データコントロールをお使いであれば、
2番目+3番目の対処方法を試してみては如何でしょうか?

それ以外には、

・無理にAccess2000形式のMDBを使わず、Access97形式で運用する。
・やはりVB6.0もしくはVB.NETへ移行する。

でしょう。


さち  2007-02-16 02:46:39  No: 97791

こんにちは。

あれから、色々試してみたんですが、
データコントロールをRefreshするところで、
Access2000のMDBが"Unrecognized Database Format"とエラーになります。
2番目と3番目を試してはみましたが。。。
MDBの中にあるテーブルをOPENできてるようなんですが、Refreshできないみたいなんです。
Refureshって、データコントロールを更新してるってことなのでしょうか。

Access97形式でMDBを使用するということは、クライアントのPCにAccess97が入ってないと駄目ですよね。
VB6や.NETにバージョンアップしたいのは、山々なんですけど。。。


魔界の仮面弁士  2007-02-16 04:56:39  No: 97792

> データコントロールをRefreshするところで、
Jet 4.0 形式を利用したいなら、VB5 のデータコントロールを使い続けるのは
諦めた方が良いかと。DAO 3.6 や ADO のみでアクセスするか、あるいは
Jet 3.5x にダウングレードするか、VB のバージョンアップを検討しましょう。

> Access97形式でMDBを使用するということは、クライアントのPCにAccess97が入ってないと駄目ですよね。
Access のアプリケーション機能(レポートとか)を使うのならば必要です。
Jet のデータベース機能のみを使うのであれば不要です。


さち  2007-02-16 05:22:56  No: 97793

魔界の仮面弁士さん、ご回答有難うございます!

やっぱり、VB5のデータコントロールは無理なんですよね。
色々色々検索を続けてて、なんだかそんな気がしてきました。涙
VB5でもACCESS2000をDAO3.6で使用することは出来るけれども、
データコントロールを使用しては無理ということですよね。

Jet3.5Xにダウングレードすると、Access2000は使用できないですよね?
Jet3.5Xにダウングレードすると、どうゆう効果があるのでしょうか?

Accessはレポート機能も使用しています。

検索してて出てきたんですけど、
ADOコントロールというのは、VB6からの機能でしょうか?

質問ばかりで申し訳ありませんが、よろしくお願いいたします。


魔界の仮面弁士  2007-02-16 12:02:37  No: 97794

# 以下には、未確認ゆえの不正確な情報が含まれている可能性があります。m(_ _)m

> Jet3.5Xにダウングレードすると、Access2000は使用できないですよね?
Access 97 で Jet 4.0 形式を扱うことはできませんが、その逆に
Access 2000 で下位バージョン(2.5以上?)の mdb を扱うことは
できたような気がします。手元に環境が無いので、うろ覚えですが。

> Jet3.5Xにダウングレードすると、どうゆう効果があるのでしょうか?
できるかどうかは試していませんが、Jet 3.5x 形式の mdb 上にデータを
格納しておき、それを(レポート等を含んだ)Jet 4.0 形式の mdb から
リンクテーブルによって利用することはできないかな? と。

> Accessはレポート機能も使用しています。
デザイナ設定の変更が無いのであれば、Access ランタイムによる運用という手もあります。

> ADOコントロールというのは、VB6からの機能でしょうか?
下記を見る限りでは、VB5用の ADOデータ コントロールを提供している
メーカーがあったようですが、標準で実装されたのは VB6 からですね。
http://www.microsoft.com/japan/msdn/data/download.aspx

あとは、VB5 Enterprise Edition の、RDO 2.0 コントロールによる
Jet 4.0 アクセスが可能かどうかを検証してみるとか。


魔界の仮面弁士  2007-02-16 12:22:09  No: 97795

> できるかどうかは試していませんが、Jet 3.5x 形式の mdb 上にデータを
> 格納しておき、それを(レポート等を含んだ)Jet 4.0 形式の mdb から
> リンクテーブルによって利用することはできないかな? と。

あっと。Oracle も絡めて考えなければいけないんでしたっけか。
そうすると、接続手順としては

  Oracle → (ODBCリンクテーブル) → Jet 3.5 mdb ワークデータ → VB5 データコントロール
    ↓                                    /
  (ODBCリンクテーブル)      (リンクテーブル)
    ↓                              /
  レポート入り の Jet 4.0 mdb
    ↓
  Access 2000 での帳票表示

という図式になるかな。 できるかどうかはわからないですけど。

# いっそ VB5 を諦め、Acccess 2000 VBA で開発、という選択肢とか。(汗


さち  2007-02-17 05:48:23  No: 97796

魔界の仮面弁士さん、有難うございます!!

教えていただいたとおり、データコントロールはJet3.5形式のmdbで、
レポートと印刷は、Jet4.0形式のmdbで実行してみました。

なんとか、"Unrecognized Database Format"とエラーが表示されなくなりました!!
レポートもVBからOPENできてます。
が、印刷ボタンで「オートメーションエラー」と不可解なエラーが、まだ出ますが。汗
もう少し、調べてみます。

あと、Jet4.0のmdbだと、「Microsoft ODBC for Oracle Connect」のウィンドウが開いて、
パスワードの入力を聞かれることはなかったんですが、
Jet3.5のmdbだと、パスワード入力を要求されます。
ODBC接続文字列に、ちゃんと記載してるんですけど。。。
"ODBC;SERVER=XXX;DSN=XXX;UID=XXX;PWD=XXX" 
ネットで接続文字列の記載の仕方を色々調べて試してみてるのですが、
どうしても、パスワード入力を要求されてしまいます。
なにか書き方に原因があるのでしょうか。

まだネットなど検索して調べてみますが、ご教授いただけたら幸いです。


魔界の仮面弁士  2007-02-17 22:16:14  No: 97797

> Jet3.5のmdbだと、パスワード入力を要求されます。

mdb内にODBCリンクテーブルを貼るときのダイアログで、
パスワード保存のチェックボックスをチェックしていますか?


さち  2007-02-20 03:29:26  No: 97798

こんばんは。
いつも有難うございます。

VBから、ACCESSにリンクテーブルを削除してから作っているので、
VBのコーディング中でパスワードを設定しないと駄目かなと思いました。

色々調べて、なんとかコーディング中にパスワードを設定する方法を見つけて、入力要求はされなくなりました!

でも、まだまだ不具合は収束してくれません。涙

rs = aa.OpenRecordset(strsql,dbOpenDynaset)
set dat1.Recordset =rs
dat1.Refresh

としているのですが、何故か結果が返ってきません。
書き方がおかしいのか、何か問題があるのか、色々調べているのですが。。。

これはRecordset、これはRecordsource  というふうに、Sqlをセットするにも使い分けているようで、
RecordsourceにセットしてるSqlからは、ちゃんと結果が返ってきます。
どうゆう理由で使い分けているのでしょうか。

初歩的な質問で申し訳ありませんが、よろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加