SQL Serverへの接続 – プログラミング – Home

通知
すべてクリア

[解決済] SQL Serverへの接続


VCビギナー
 VCビギナー
(@VCビギナー)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

いつも参考にさせてもらっています。
SQL Serverへの接続に関して質問させてもらいます。

環境
・Win Xp Pro
・VC++ 2005 MFC SDI
・SQL Server 2005 Express Edition

AppのInitInstanceに、

#include <afxdb.h>
~~~~~~~~~~
CString strCon;
CString strSql;
//接続文字列生成
strCon = DSN=SQLServerTest;;
//実行SQL生成
strSql = select * from test_table;

CDatabase Db;
//接続
Db.OpenEx(strCon, CDatabase::openReadOnly | CDatabase::noOdbcDialog); ←ココ
//実行
CRecordset Rs(&Db);
Rs.Open(CRecordset::forwardOnly, strSql);

と記述して実行したところ、「ココ」で指し示している箇所でエラーになりました。
エラーのメッセージは、

初回の例外が発生しました: Microsoft C++ の例外: CDBException (メモリの場所
0x0012faa0)。
初回の例外が発生しました: Microsoft C++ の例外: [rethrow] (メモリの場所
0x00000000)。
ハンドルされていない例外が発生しました: Microsoft C++ の例外: CDBException (メモ
リの場所 0x0012faa0)。

と出力されました。

ネットで色々調べたのですが、何が悪いのか全くわかりませんでした。
対処法をご存知の方、アドバイスをお願いします。


引用未解決
トピックタグ
VCビギナー
 VCビギナー
(@VCビギナー)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

追記:
ODBCデータソースアドミニストレーターでSQL ServerのユーザーDSNは追加済みで、接続
テストは正常終了しています。


返信引用
switch
 switch
(@switch)
ゲスト
結合: 19年前
投稿: 16
 

DBのある環境では無いので試せませんし、VC6しか入ってないのですが、

CDBExceptionの内部にある、メッセージは何て書いてありますか?
m_strErrorとかに書いてあるかも
もしくは、CExceptionのGetErrorMessageとかでもいいかも
説明が書いてあれば、原因が分かるかもしれないです

例として、
SQL Serverが見つかりません
とか
ユーザーまたはパスワードが間違っています。
とか
入っているかもしれないです。

外していたらすみません。
最近DB関連から遠ざかってるもので・・・


返信引用
VCビギナー
 VCビギナー
(@VCビギナー)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

switch さん
レスありがとうございます。

少し間違いがありましたので、訂正します。
エラーの箇所ですが、
 Db.OpenEx(...);
ではなく、
 Rs.Open(CRecordset::forwardOnly, strSql);
でエラーになっていました。

出力のウィンドウを見ると、SQL ServerにはODBCで接続できているようです。
すいませんでした。

それで、エラー時のm_strErrorの内容ですが、
  オブジェクト名'test_table'が無効です。
  ステートメントを準備できませんでした。
となっています。

これは、test_tableにアクセスできていないということでしょうか?
SQL Serverの設定がまだ必要なのか、もう少し調べてみます。


返信引用
switch
 switch
(@switch)
ゲスト
結合: 19年前
投稿: 16
 

テーブルが無いって言ってますね
おそらくSQLサーバーには繋がっていますが、
どのデータベースかわからないようです
接続文字列にdatabase=xxxxxxとして
明示的に指定してみてはどうでしょう

odbcでデータベース名を設定しても、
見てくれるかどうか怪しいので…

環境が無いので憶測ですが


返信引用
VCビギナー
 VCビギナー
(@VCビギナー)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

switch さん
ありがとうございます。

SQL ServerでSELECT文等を自動生成する機能があるので、生成してみたところ、
 SELECT [test_no]
  ,[test_name]
  FROM [TestDB].[dbo].[test_table]
というものができました。

それで、VS側で
 strSql = select * from test_table;
ではなく、
 strSql = select * from [TestDB].[dbo].[test_table];
と記述して実行したところ、上手くいきました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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