■動 作 環 境 :Windows2000
■開 発 環 境 :Visual C++6.0(SDI形式,ODBC接続)
■データベース:Access2000
毎度お世話になっております。
ODBC を使用して Visual C++ から Access のテーブルを操作しているのですが、
CRecordset というクラスを追加する必要はあるのでしょうか?
前に VisualBasic と DAO でやった時はできたと思うのですが・・・。
宜しくお願いします。
CRecordsetは、MFCに含まれていますので
#include <afxdb.h>
これで使えますが・・
参考 MSDN
> ODBC を使用して Visual C++ から Access のテーブルを操作しているのですが、
> CRecordset というクラスを追加する必要はあるのでしょうか?
必要はないですが、レコードを受け取る処理をするときに使うと便利です。
何かCRecordsetを使いたくても使えない事情があるのでしょうか?
> 前に VisualBasic と DAO でやった時はできたと思うのですが・・・。
ん~。何ができたのでしょう???
お世話になってます。
更に追加の質問なんですが
普通、ユーザーの使用するデータや宣言等は
Documentクラスのヘッダーファイルに記述しますよね?
class CXxxDoc : public CDocument
{
protected:
// アトリビュート
public:
// オペレーション
public:
}
その中で、// アトリビュート とか書いてあるのはどういう意味ですか?
public: 等はクラスのアクセス指定子ですよね。
// オペレーション の public: と違いがあるのでしょうか?
お世話になってます。
→ dairygoodsさんへ
えー、VB でできた事というのは、レコードの操作です。
DAO.Database や DAO.Recordset を使ってやりました。
つまり、クラスというもの自体が VB には無いので使わずにできたという意味です。
それと、使わない理由に関してですが
ODBC も初めてだし、Database操作そのものの理解も高くは無いので、
クラスを使わないで、コード主体のやり方を覚えたいなというのが理由です。
Recordsetクラスを追加すると、メンバ変数に各フィールドが格納されたりして嫌なので。
VC++ のクラスの概念や利用法もまだまだ馴染めていないので、
できるだけ、普通の C のコード主体というかクラスを使いたくないというか・・・。
分かりますか? こういう C++ 初心者の気持ちって(笑)
> 更に追加の質問なんですが
MSDNの「MFC:MFCソースファイルの利用」に解説されてます。
ところで、話題が全然違うようですので「新規質問」にしましょう。
> えー、VB でできた事というのは、レコードの操作です。
> DAO.Database や DAO.Recordset を使ってやりました。
VBでDB操作をしたことはないのですが、
たぶんこれらがCDatabaseやCRecordsetとおなじ役割のものだと思います。
ウィザードに勝手にCRecordsetの派生クラスを生成されるのがイヤ
ということでしたら、CRecordsetクラスを直接使用することもできます。
CRecordset::GetFieldValueなどをつかって、
フィールド名から値をとりだしたりできます。
また、更新操作の場合は、CDatabase::ExecuteSQLでSQLを直接発行できます。
クラスを一切使いたくないということでしたら、
WIN32のODBC APIを直接使うこともできます。
相手にしてくれませんか・・、とほほ・・
>CRecordset というクラスを追加する必要はあるのでしょうか?
と言ってたから
>CRecordsetは、MFCに含まれていますので
>#include <afxdb.h>
こう答えたのに・・(;;)
派生クラスの意味ですか・・
>VC++ のクラスの概念や利用法もまだまだ馴染めていないので、
馴染む為にがんばってみたらどうです?
>できるだけ、普通の C のコード主体というかクラスを使いたくないというか・・・。
それならSDKでやりましょう
→不良PGさんへ
相手にしない? そんなことありませんよ。(笑)
そうですそうです、派生クラスってやつです。
とにかく、C++ は派生とかオーバーロードとか分かりにくいです。(笑)
今は普通にメンバ関数とかを使うので精一杯ですね。
まずは、用意されているクラスを使って、どういうものかが分かってきたら
自分で基本クラスを継承した便利なユーザークラスを派生させていこうと思います。
とにかく動くものを作るだけでも苦労している状況ですから・・・。
SDK? デベロッパーズキットとかいうやつですかね。
詳しくは知りません。あれはクラスが無いのですか?
SDKは、
dairygoodsさんのおっしゃっている
>WIN32のODBC APIを直接使うこともできます。
のことで、SQL~で始まるAPI関数群です。
API関数なのですべてCで記述できます。(私は、ODBCではやったことありませんが・・)
ただし、難しくて面倒だと思います。
その辺りを考慮して、CRecordset,CDatabaseというこれらのAPIをラップした
クラスが用意されています。
ですから・・
dairygoodsさんのおっしゃっている
>ウィザードに勝手にCRecordsetの派生クラスを生成されるのがイヤ
>ということでしたら、CRecordsetクラスを直接使用することもできます。
>CRecordset::GetFieldValueなどをつかって、
>フィールド名から値をとりだしたりできます。
>また、更新操作の場合は、CDatabase::ExecuteSQLでSQLを直接発行できます。
こちらの方法をお勧めします
OS:Win2000 or XP(現在)
Visual C++ 6.0(EP) MFC (ODBC)
SQL Server 7.0(DE)
こんな環境でやってます
わたしは、2~3年前までWinアプリなんて作るすべを知りませんでした
今でもこのページ以外(書籍以外)、教えてもらっている他人がいません
こんな私ですがよろしくお願いします。
----------------------------------------------------------------------
本題
> // アトリビュート
これは、属性だと思って使ってます
いわゆる、変数の定義場所だと思ってました
char buf[10];
など
> // オペレーション
これは、実行部だと思ってました
処理系関数宣言の場所だと思ってました
void Function(char *,int,char)
など
どちらにしてもPUBLICが連続しているので一つにしてもかまわないと思いますが
クラスウイザードが処理できなくなる可能性があるのでそのままにしておいたほうが
いいと思います
コードの追加は、良いと思いますけど
>ODBC を使用して Visual C++ から Access のテーブルを操作しているのですが、
>CRecordset というクラスを追加する必要はあるのでしょうか?
>前に VisualBasic と DAO でやった時はできたと思うのですが・・・。
>DAO.Database や DAO.Recordset を使ってやりました
ODBC JET(DAO3.0) VBでのJET(DAO3.0)
CDatabase <----> CDaoDatabase <----> DAO.Database
CRecordset <----> CDaoRecordset <----> DAO.Recordset
いろんな書籍読み漁るとこんな感じのようですけど
SDK APIの場合、各メーカが出すデータベースエンジンの有効特性を生かすのは
難しそうですよ
基本的にはODBC接続(エンジン経由なし)のようですが認識間違っていたら
ごめんなさい(誰か訂正・指摘してください)
関数の利用用途が良く分からず、SQL文を主体に開発したい場合
埋め込みSQLのイメージのものが
SqlExecuteの関数が確かMFCで用意されていたと思いますけど
実際使ってません
お世話になってます。
確かに SDK,API直 は敷居が高そうですね。
ご指摘の方法(Cdatabase::???)でやってみます。
これなら、クラスを作成せずに自由にメンバ関数を使うことができるんですね。
ありがとうございました。
SQL Excute ですか? MSDNで調べてみます。
SQL文はやっておけば色々役に立ちそうなので
それを使っていった方がいいでしょうね。
ありがとうございました。