>record_RS.GetFieldValue([TableName],string_CS);
なぜフィールド名ではなく、テーブル名なのですか?
エラーが出るのは、どの個所でしょう?
デバッカで追えば分るはずですが・・
お世話になっております。
すいません、
record_RS.GetFieldValue([TableName],string_CS);
の件ですが、テーブル名 と フィールド名は同じなんです。
それから、エラーになる訳ではないんです。
record_RS.Open(CRecordset::snapshot,[TableName],CRecordset::readOnly);
このオープンのところで、警告ダイアログが出るのは確認してます。
あくまで警告なので、フォームが表示されて正常に起動したようには見えます。
ただ、読み込みたいデータは表示されていませんが・・・。
余計な口出しかもしれませんが、データベースを使用する場合、何処でエラーが発生しているか
わかりにくいので、エラートラップ処理[try,catch]を使用してエラーの内容を確認およびエラ
ー処理を追加してみてはいかがでしょうか?
ある程度のエラー内容がわかると思いますよ。
余談ですが[データベース.mdb]を一度フルパスで行ってみてはいかがでしょうか?
まぁ、そんなミスはしてないとは思いますが、焦っていると結構、初歩的なミスを犯していたり
するものですからね・・・(~_~;)
ちなみにADOでの処理ならば、コンボボックスにデータを格納までのソースは記述できるので
すが、あいにく、ODBC経由では行っていないので・・・
コントロールパネルの「データソース(ODBC)」のユーザーデータソースに「MS Access
Database」は入っていますか?
クリリンさん、ありがとうございます。参考にさせて頂きます。
不良PGさん、コントロールパネルの「データソース(ODBC)」の
ユーザーDSN は空でした。
これについては、システムDSN を設定していたので
それでOKだと思っていました。ユーザーDSN も必要なんですか?
でもでも、ユーザーDSNを設定したら
警告メッセージは無くなって、別のエラーになったので良かったです。
お蔭様で一つ前進しました。今度は「FROM句の構文エラー」らしいですが、
しばらく自分で考えてみます。解決できないようならまた質問させて頂きます。
ありがとうございました。
テーブル名 と フィールド名 が同じなのですよね?
こうしてはいかがでしょうか
select t1.データ from データ t1
としてはいかがでしょうか?もしかしたら、名前の解決が上手くいっていないのではないでしょ
うか?
今まで同じテーブル名 と フィールド名 をした事がないので確信が持てませんが・・・
でも、これは、開発するのであれば、問題ですね。
というのも、第三者がコードを見た時に混乱するからです。また、時間が経つと自分自身も忘れ
てしまい、修正が一苦労しますよ!
参考までに私は、テーブル名は頭に[TBL_TEST]や[MST_TEST]みたいにしています。
えらそうな事言ってすいません。m(__)m
こんばんは、ありがとうございます。
ご忠告通りテーブル名とフィールド名は分ける事にします。
その方が余計な混乱をしないで済みそうです。
[TBL_XXX]、[ROW_XXX] などと区別していきます。
またお願いします。
■動 作 環 境:WindowsNT4.0
■開 発 環 境:Visual C++6.0
■データベース:Access2000
お世話になってます。
実行時に 「FROM句の構文エラーです」 となるのは、
●ファイル CXxxRecordset.cpp の
CString CXxxRecordset::GetDefaultSQL()
{
return _T(select FIELD_NAME from TABLE_NAME);
}
このデフォルトSQLの from が、間違っているという事ですよね?
確認するのはここだけでいいんでしょうか。
構文に間違いはないと思われます。
とりあえず、スクリプト文をDB内でチェックしてみてはいかがでしょうか?
たとえば、ACCESSであれば、クエリーでSQLモードにして、スクリプト文を実行。
SQL Server であれば、クエリーアナライザなど、実行結果が出力されるツールを使用して、
結果が返ってくるかどうかしてみてはいかがでしょうか?
案外、テーブル名やフィールド名、検索条件の入力ミスなどが発見できますよ。
また、スクリプトをプログラム内で作成しているのであれば、デバッグでスクリプトが生成され
た処でブレイクして、スクリプト文をコピーする・・・という手もあります。
ま、他にも方法はありますけど、手っ取り早い方法です。
GetDefaultSQLはOpenの第二引数にNULLを指定したときに
デフォルトで使うSQLですので、
Openの第二引数に何か指定している場合は、そちらも確認が必要です。
お世話になっております。
SQLモード というのは、[表示(V)]の[SQLビュー(Q)]の事ですか?
これを選ぶとSQL文が表示されましたが。これで結果が正しければOKって事ですか?
Q.ところで意味が分からない言葉だったんですが、スクリプト文 とは何ですか?
でもとりあえず、レコードの Open を NULL にして、
-------------------------------------------------------------------------------
▼ファイル名:XxxView.cpp
MyRecordset.Open(CRecordset::snapshot,NULL,CRecordset::readOnly);
-------------------------------------------------------------------------------
▼ファイル名:XxxRecordset.cpp
CString CExpertRecordset::GetDefaultConnect()
{
return _T(ODBC;DSN=MS Access Database;DBQ=xxx.mdb);
}
CString CExpertRecordset::GetDefaultSQL()
{
return _T(SELECT フィールド名 FROM テーブル名);
}
-------------------------------------------------------------------------------
GetDefaultConnect,GetDefaultSQL の記述を見に行くようにしたら、
レコードをうまくOpenできました。
二つの場所の記述に整合性が無かったのが原因だと思います。
NULL にしてしまうのもひとつの手なんですね。
dairygoodsさん、クリリンさん、ありがとうございました。
>SQLモード というのは、[表示(V)]の[SQLビュー(Q)]の事ですか?
はい、そうです。
>スクリプト文 とは何ですか?
SQLスクリプト文を指します。
この、[SELECT フィールド名 FROM テーブル名]も、SQLスクリプト文なのです。
お世話になってます。
SQLスクリプト文 = SQL文 で宜しいんですね?
SQL文も勉強して使いこなせるようになりたいですね。
全ての基本は SELECT文 みたいですが。
また宜しくお願いします。