はじめまして、こんばんは ケロロです。
VCの方は基本的なことしかまだわからず、コンソール上の操作しかしたことがないのですが
過去ログをみてわからなかったので質問させていただきます
DBはAccess2000なのですがコンソール上から検索できる簡単なDB接続というのはVCにはないのでしょうか?
VBとかでしたらOpendatabaseとかでパスを指定したら一発なのですが
VBでしますと元のファイルが200Mなので開くにも時間がかかってしまうので
VCでやってみようと思ったのがきっかけです
電話番号でのあいまい検索から氏名や顧客番号をひっぱりだしてコンソール上に表示ができればとかんがえていますが
DB接続からつまづいてしまっています
DBの接続方法のサンプルなどありましたら教えていただけないでしょうか?
コンソールからはできないとかMFCでの初歩的なことがかかれているHPといったことでもとっかかりを理解していないので
そういったコメントだけでももらえると助かります
はじめまして、Discaと言います。
MFC のクラスで、「CDatabase」があります。
http://www.asahi-net.or.jp/~yy6m-wd/kuma/vctip/db.htm
こちらをご参照ください。
さっそくのお返事ありがとうございます
今休み時間なので作業をためさせてもらいっていますが、
参考にさせてもらっているHPのサンプルコードをためさせてもらっているのですが
//基本的なDBのOpen、Close手続き
CDatabase db;
db.OpenEx("DSN=MS Access Database",CDatabase::openReadOnly); ← ここでエラー
CRecordset rec(&db);
rec.Open(CRecordset::forwardOnly,"SELECT * FROM テーブル名");
//ここにデータ処理用コードを記述
rec.Close();
db.Close();
db.OpenExでエラーがでるのですが(構文エラー : ';' が '.' の前に必要です。)これはいったいどのような意味なのでしょうか?
原因はわかりませんが、
#include <afxdb.h>
はされてますか?
#include <afxdb.h>
は貼り付けを間違えてました。
インクルードはしています
してなかったらCDatabase自体とおらないでしょうし
他にもインクルードしないといけないのでしょうか?
それともMFCとかではなくコンソールアプリケーションを選択してcppファイルにそのままつかってしまっていることがまずいのでしょうか?
Win32 コンソールアプリケーションを選択した場合、
「アプリケーションの設定」で、サポートの追加「MFC」にチェックを入れます。
MFCにチェックが入っていない場合と、入っている場合を比較してみてはいかがでしょうか?
コンソールにもMFCサポートってあったんですね
知りませんでした
さっそくやってみましたが自分には違いがちょっとみわけることができませんでした
違いというよりもファイルが2,3自動でできてるので
そもそもデータソースは一体どこで指定してるのかがわからなかったりします
今日明日はすこしバタバタしてしまいますので、作業の方がすこし遅れぎみになりますが、がんばって調べていきます
何度もお返事いただきありがとうございます
はじめまして、じぶです。
質問が少し前なので、ひょっとしたらもう結論が出てるかもしれませんが、
私はVCでMDBアクセスする際にはCDaoDatabaseクラスをよく使います。
実際にはこんな感じです。
#include <afxdao.h>
CString DatabaseFile = "test.mdb";
// データベースをオープン
CDaoDatabase Database;
TRY{
Database.Open(DatabaseFile);
}CATCH(CDaoException, e){
AfxMessageBox("失敗", MB_OK);
return;
}END_CATCH;
// "テスト"テーブルをオープン
CDaoRecordset Recordset(&Database);
TRY{
Recordset.Open(dbOpenDynaset, "SELECT * FROM テスト", dbReadOnly);
}CATCH(CDaoException, e){
AfxMessageBox("失敗", MB_OK);
Database.Close();
return;
}END_CATCH;
// レコードセットから情報を取得
TRY{
// 先頭のレコードへ移動
Recordset.MoveFirst();
while(!Recordset.IsEOF()){
// 1番目のフィールドの値を取得
COleVariant buf = Recordset.GetFieldValue(0);
// 次のレコード
BaseRecordset.MoveNext();
}
}CATCH(CDaoException, e){
AfxMessageBox("失敗", MB_OK);
Database.Close();
Recordset.Close();
return;
}END_CATCH;
// 終了
Recordset.Close();
Database.Close();
CDatabaseでも同様の処理はできると思いますが、
CDaoDatabaseクラスの方が、特にMDBを使う場合には
あまり細かな指定がいらないみたいです。
あとTRY〜CHATCH〜END_CATCHの辺は・・・好みで
適用に変えてもいいんじゃないでしょうか。
解答ありがとうございます
バタバタしてしまってこっちはなかなかできなかったのですみません
あれから自分の中ではMFCの使い方からはじめないといけないと
思いましてその勉強がひととおりすんでからと(語句だけでも理解できるくらいに)
と思っていたのですがすみません
自分の中ではパスはどこに書くんだろうとかそんな程度のレベルなんです
あとジブさんのコードをコンソールプログラムにはっつけてやってみたのですが
TRYあたりでまず最初に
error C2447: '<L_PROPERTY>' : 関数ヘッダがありません (旧形式の仮引数リスト?)
なるエラーがでたのちに
後は主にRecordset.close()でエラーになってしまいます(構文エラーだったり型指定だったりです 6項目くらいずらずらと)
それで今回せっかく解答をいただいたのですが
VBの方でお聞きしたいことができてしまいましたのでこちらは一時解決済みとさせていただきます
まことにかってながら申し訳ありません
いままで解答くださった方ありがとうございます
またこりずにこの問題にはぶつかっていきたいのでもうすこしまともになりましたら
またお付き合いくださればと思います
どうもすみませんでした
ツイート | ![]() |