■動 作 環 境 :Windows2000
■開 発 環 境 :Visual C++6.0(ODBC接続)
■データベース:Access2000
お世話になっております。
CRecordsetクラスを使用せずに、ODBC でデータベースにアクセスしています。
// データベース型OBJの宣言
CDatabase MyDatabase_DB;
// データベースを開く(データソース,,読取専用,接続文字列,カーソルDLL不使用)
MyDatabase_DB.Open
(NULL,FALSE,TRUE,ODBC;DSN=MS AccessDatabase;DSQ=my.mdb,FALSE);
というコードでやっていますが、
実行するとデータソースを指定させるダイアログボックスが表示されます。
手動でファイルを選択すれば、正常にオープンできるのですが
MSDNライブラリ によれば、第4引数の[接続文字列]にデータソース名(DSN)を指定すれば
第1引数の[データソース名]には NULL を指定しても良いとなっています。
しかしながら、ユーザーがデータソースを選択したい場合もここ(第1引数)を
NULL にしなさいと言っています。
逆に、第4引数を ODBC; にして、第1引数にDSN=MS AccessDatabase;DSQ=my.mdb
を設定すれば、「データソース名および指定された規定のドライバが見つかりません」
という警告メッセージが出て、テーブルのデータは表示されませんでした。
こういう場合はどちらに記述したら良いのでしょうか?
> MyDatabase_DB.Open
> (NULL,FALSE,TRUE,ODBC;DSN=MS AccessDatabase;DSQ=my.mdb,FALSE);
DSQではなくDBQです。
お世話になります。
駄目ですね、DSQ → DBQ にしても同様でした。
何か良い方法はないのでしょうか?
>DSN=MS AccessDatabase
DSN=MS Access Database
>こういう場合はどちらに記述したら良いのでしょうか?
どちらに記述しても同じです。
コントロールパネルのODBCデーターソース設定すれば改善されませんか
的外れならごめんなさい
不良PGさんへ
私のコピー&ペーストのミスです。
実際のコードには、DSN=MS Access Database でスペースがあります。
woodさんへ
ユーザーDSN に MS Access Database が設定されています。
ただ聞いてくるダイアログボックスはファイルDSN を聞いてきてるような感じなんですよ。
ユーザーDSN を設定したら、それで OK なんですよね?
お世話になってます。
ダイアログボックスがデータソースの指定を求めてきたとして、
そこでファイルを指定してやるとちゃんとレコードを読み込むという事は、
CRecordset はちゃんとオープンされてるって事ですよね?
でも、何故かダイアログが出てきてしまう。
どうすればこの入力をスキップできるのでしょうか?
的外れかもしれませんが、
mdbファイルをフルパスで指定してみたらどうでしょうか?
お世話になっております。
それって Openの文を直すって事ですか?
My_DB.OpenEx
(DSN=MS Access Database;DBQ=F:\VC++\My.mdb,CDatabase::openReadOnly);
第一引数のデータソース部分に DBQ も指定して、パスを入れるんですよね?
これをやるとエスケープシーケンス(\)の警告になりますが、いいんですかね?
やっても同じでした。例のダイアログが出てきますね。
すんません・・・。
>第一引数のデータソース部分に DBQ も指定して、パスを入れるんですよね?
>これをやるとエスケープシーケンス(\)の警告になりますが、いいんですかね?
警告が出て良いわけないでしょう・・
>(DSN=MS Access Database;DBQ=F:\VC++\My.mdb,CDatabase::openReadOnly);
(DSN=MS Access Database;DBQ=F:\\VC++\\My.mdb,CDatabase::openReadOnly);
この辺りは、基本です、エスケープシーケンスを調べましょう
>ただ聞いてくるダイアログボックスはファイルDSN を聞いてきてるような感じなんですよ。
ファイルDSN は入力してみたんですか
お世話になってます。
コントロールパネルのデータソース(ODBC)の設定は、
▼ユーザーDSN に MS Access Database Microsoft Access Driver(*.mdb)
やら、dBASE やら色々設定されていました。
▼システムDSN にネットワークの Microsoft ODBC For Oracle (これは関係無いですよね)
▼ファイルDSN に 該当するデータソースのあるディレクトリが展開されていて、
データソースファイルもそこに表示されています。
という事は、設定は正常になされているという事ですよね。
------------------------------------------
そうですね、¥を使用する時は ¥¥と表記するんでしたね。忘れていました。
すいません。しかし、DBQでフルパスを指定してもダイアログが出ました。
ダイアログが表示されて、ファイルを選択さえすればちゃんとレコードを読めるんであれば
単純に何かの設定の問題ですよね?その方法を知らないだけで・・・。
こういう疑問って皆さんお持ちになるんでしょうか?
お世話になっております。
OpenExの第二引数の設定に、CDatabase::noOdbcDailog というオプションがあります。
これを指定すればダイアログを強制的に表示しないようにできるのですが、
Debug Assertion Failed! となってエラーになります。
エラーの場所は dbcore.cpp というファイルです。
BOOL CDatabase::OpenEx(LPCTSTR lpszConnectString, DWORD dwOptions)
{
// Exclusive access not supported.
→ ASSERT(!(dwOptions & openExclusive));
この矢印部分でエラーになっているんですが、
OpenEx のオプションの指定が間違っているという意味なんでしょうか?
ちなみに、OpenExの第一引数の接続文字列を NULL にしても
同様にダイアログの表になってしまいます。このあたりの動作は
接続文字列を設定した場合と変わらないような感じなんです。
どこか別の場所で、接続文字列を無効にするような設定になっているのでしょうか?
> ダイアログが表示されて、ファイルを選択さえすればちゃんとレコードを読めるんであれば
> 単純に何かの設定の問題ですよね?その方法を知らないだけで・・・。
>
ダイアログが出るということは、接続に必要な情報が全てそろっていない、
ということを意味するのだと思います。
そして、そのダイアログからファイル(多分mdbファイルのことですよね?)を指定すると、
接続が成功する、ということは、ファイルの指定方法に何か問題があるのだと思います。
例えばMy.mdbをもっと単純なところ(Cドライブ直下など)に置いて
試してみてはどうでしょう?
お世話になっております。
sugerさん、こんにちは。
いや、ダイアログが指定を要求してくるのは(mdb)ではなく(dsn)なんです。
(dsn)も(mdb)も VC++\MyProject\Debug\ に置いてます。
だからデバッグ時の実行ファイルと同一 Dir なんです。
なんだか、完全にお悩み状態ですわ。