CDatabaseについて

[戻る]
DK 2003/10/17(金) 11:42:51
VC++6.0で、WinNT4.0です。

CDatabaseというクラスは、クラスウィザードに表示されないのでしょうか?
HELPを見たところ、CObject内にCDatabaseがある(派生?)らしいのですが、CObjectクラスも
ありません。
CRecordsetクラスの派生を作成すると、おまけ的についているのですが、CDatabaseクラスと
CRecordsetクラスの派生と言うことですか?


class RE : public CRecordset
{
public:
    RE(CDatabase* pDatabase = NULL);
    DECLARE_DYNAMIC(RE)

最終的にやりたいのは、ExecuteSQLですが、途中を理解できないと先に進めない性格なので、
知っている人がいたら、ぜひ教えていただきたいです。

Euglena 2003/10/17(金) 14:07:04
私もそれほど理解できていませんが・・・(^^;

通常のデータベースアクセスをするだけならば、
CDatabaseクラスを派生させる必要はないと思います。
ExecuteSQL()を使用するだけならCRecordsetクラスはいらないので、

CDatabase db;

db.OpenEx();
db.ExecuteSQL();
db.Close();

の手順で実行できます。(細かい指定は省略)

例として提示されている
RE(CDatabase* pDatabase = NULL);
は、db.OpenEx()で指定したデータベース(あるいはACCESSのmdb等)で
処理を行うという前提条件をクラス構築時に与えているものです。

CDatabase db;
RE* rec;

db.OpenEx();
rec = new RE(&db); ← こんな感じ
rec->Open();
・・ 
ここでテーブルに対して読み書き処理をする。
・・
rec->Close();
delete rec;
db.Close();

指定がない場合(NULL)には、使用するODBCデータソースを特定するための
選択ウィンドウが(多分)表示されるはずです。

rec = new RE; ← こうするとウィンドウが表示される(はず・・)

DK 2003/10/20(月) 09:55:33
[[解決]]
なんとなく分かったような気がします。
* pDatabase にはデータベースのアドレスが格納されるため、指定していない時はNULLが入
り、
CRecordsetではNULLを入れておいて、あとでデータソースを指定させているわけですね。

それと、SQLを使うことはできたのですが、新しい問題が発生してしまったので、新スレに書き
込むことにします。

返答ありがとうございました!

古いスレッドには追加発言できません。