何故データソースを手動で指定しないといけないのですか? – プログラミング – Home

何故データソースを手動で指定しないとい...
 
通知
すべてクリア

[解決済] 何故データソースを手動で指定しないといけないのですか?

固定ページ 1 / 2

Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

■動 作 環 境 :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
を設定すれば、「データソース名および指定された規定のドライバが見つかりません」
という警告メッセージが出て、テーブルのデータは表示されませんでした。

こういう場合はどちらに記述したら良いのでしょうか?


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> MyDatabase_DB.Open
> (NULL,FALSE,TRUE,ODBC;DSN=MS AccessDatabase;DSQ=my.mdb,FALSE);

DSQではなくDBQです。


返信引用
Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になります。

駄目ですね、DSQ → DBQ にしても同様でした。
何か良い方法はないのでしょうか?


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

>DSN=MS AccessDatabase

DSN=MS Access Database

>こういう場合はどちらに記述したら良いのでしょうか?
どちらに記述しても同じです。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

コントロールパネルのODBCデーターソース設定すれば改善されませんか
的外れならごめんなさい


返信引用
Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

不良PGさんへ

私のコピー&ペーストのミスです。
実際のコードには、DSN=MS Access Database でスペースがあります。

woodさんへ

ユーザーDSN に MS Access Database が設定されています。
ただ聞いてくるダイアログボックスはファイルDSN を聞いてきてるような感じなんですよ。

ユーザーDSN を設定したら、それで OK なんですよね?


返信引用
Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になってます。

ダイアログボックスがデータソースの指定を求めてきたとして、
そこでファイルを指定してやるとちゃんとレコードを読み込むという事は、
CRecordset はちゃんとオープンされてるって事ですよね?

でも、何故かダイアログが出てきてしまう。
どうすればこの入力をスキップできるのでしょうか?


返信引用
第3水準
 第3水準
(@第3水準)
ゲスト
結合: 23年前
投稿: 17
 

的外れかもしれませんが、
mdbファイルをフルパスで指定してみたらどうでしょうか?


返信引用
Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になっております。

それって Openの文を直すって事ですか?

My_DB.OpenEx
(DSN=MS Access Database;DBQ=F:\VC++\My.mdb,CDatabase::openReadOnly);

第一引数のデータソース部分に DBQ も指定して、パスを入れるんですよね?
これをやるとエスケープシーケンス(\)の警告になりますが、いいんですかね?

やっても同じでした。例のダイアログが出てきますね。
すんません・・・。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

>第一引数のデータソース部分に DBQ も指定して、パスを入れるんですよね?
>これをやるとエスケープシーケンス(\)の警告になりますが、いいんですかね?
警告が出て良いわけないでしょう・・

>(DSN=MS Access Database;DBQ=F:\VC++\My.mdb,CDatabase::openReadOnly);
(DSN=MS Access Database;DBQ=F:\\VC++\\My.mdb,CDatabase::openReadOnly);
この辺りは、基本です、エスケープシーケンスを調べましょう


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

>ただ聞いてくるダイアログボックスはファイルDSN を聞いてきてるような感じなんですよ。
ファイルDSN は入力してみたんですか


返信引用
Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になってます。

コントロールパネルのデータソース(ODBC)の設定は、

▼ユーザーDSN に MS Access Database Microsoft Access Driver(*.mdb)
やら、dBASE やら色々設定されていました。

▼システムDSN にネットワークの Microsoft ODBC For Oracle (これは関係無いですよね)

▼ファイルDSN に 該当するデータソースのあるディレクトリが展開されていて、
データソースファイルもそこに表示されています。

という事は、設定は正常になされているという事ですよね。

------------------------------------------

そうですね、¥を使用する時は ¥¥と表記するんでしたね。忘れていました。
すいません。しかし、DBQでフルパスを指定してもダイアログが出ました。

ダイアログが表示されて、ファイルを選択さえすればちゃんとレコードを読めるんであれば
単純に何かの設定の問題ですよね?その方法を知らないだけで・・・。

こういう疑問って皆さんお持ちになるんでしょうか?


返信引用
Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になっております。

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 にしても
同様にダイアログの表になってしまいます。このあたりの動作は
接続文字列を設定した場合と変わらないような感じなんです。
どこか別の場所で、接続文字列を無効にするような設定になっているのでしょうか?


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> ダイアログが表示されて、ファイルを選択さえすればちゃんとレコードを読めるんであれば
> 単純に何かの設定の問題ですよね?その方法を知らないだけで・・・。
>
ダイアログが出るということは、接続に必要な情報が全てそろっていない、
ということを意味するのだと思います。
そして、そのダイアログからファイル(多分mdbファイルのことですよね?)を指定すると、
接続が成功する、ということは、ファイルの指定方法に何か問題があるのだと思います。

例えばMy.mdbをもっと単純なところ(Cドライブ直下など)に置いて
試してみてはどうでしょう?


返信引用
Takeshi
 Takeshi
(@Takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になっております。

sugerさん、こんにちは。
いや、ダイアログが指定を要求してくるのは(mdb)ではなく(dsn)なんです。

(dsn)も(mdb)も VC++\MyProject\Debug\ に置いてます。
だからデバッグ時の実行ファイルと同一 Dir なんです。

なんだか、完全にお悩み状態ですわ。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました