こんにちわ えりたまSpecialです。
AccessMDBに関する質問です。
環境はWin7Professional+VS2005+Access2003です
新規にテーブルを追加した際に規定値に0をセットする方法がもしありましたら
ご教授願えれば幸いです。
現状は空欄で新規作成されるので、別途マニュアルで0をセットしているのですが
データ数が多いと大変なのとセットし忘れが発生する可能性がありまして
たとえば追加したいテーブルの定義を
#pragma once // 二重インクルードを避けるため
#include <afxdb.h> // データベース
class CPocketRate : public CRecordset
{
public:
CPocketRate(CDatabase* pDatabase = NULL);
DECLARE_DYNAMIC(CPocketRate)
// フィールド/パラメータ データ
// 次の文字列型は (記載されていれば) データベース フィールドの
// 実際のデータ型を反映しています。CStringA は ANSI データ型を、また CStringW は Unicode データ型を
// 反映しています。これは、ODBC ドライバが不必要な変換を
// 行わないようにするためです。これらのメンバを CString 型に変えて、
// ODBC ドライバが必要な変換をすべて行うようにすることも可能です。
// (注 : Unicode とこれらの変換の両方をサポートするためには、
// ODBC ドライバのバージョン 3.5 かそれ以降のものを使う必要があります)
int m_PRODUCT_NO;
int m_CAMERA_NO;
int m_TYPE;
int m_LOW;
int m_MID;
int m_HIGH;
// オーバーライド
// ウィザードで生成された仮想関数のオーバーライド
virtual CString GetDefaultConnect(); // 既定の接続文字列
virtual CString GetDefaultSQL(); // レコードセットの既定の SQL
virtual void DoFieldExchange(CFieldExchange* pFX); // RFX サポート
// 実装
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};
として、プログラムで新規追加する箇所を
CPocketRate PR;
try{
PR.Open();
PR.Close();
}
catch(CDBException* pEx){
try {
// POCKET_RATEテーブルが存在しないので新規に作成
CDatabase db ;
CString sql;
// SQL文作成
sql = "CREATE TABLE POCKET_RATE (";
sql = sql + "PRODUCT_NO SMALLINT,";
sql = sql + "CAMERA_NO SMALLINT,";
sql = sql + "TYPE SMALLINT,";
sql = sql + "LOW SMALLINT,";
sql = sql + "MID SMALLINT,";
sql = sql + "HIGH SMALLINT,";
sql = sql + "CONSTRAINT PK_POCKET_RATE PRIMARY KEY (PRODUCT_NO))";
// SQL実行
db.Open("AAA",FALSE,FALSE,"ODBC;DSN=AAA");
db.ExecuteSQL(sql);
}
catch(...) {
// 既にフィールドが存在する場合
if(PR.IsOpen()) {
PR.Close();
}
}
}
とコーディングしています。MDBにはODBCでアクセスするようにしています。
何卒宜しくお願い致します。
えりたまSpecialです。いつもおせわになっております。
投稿の仕方がよくまだ理解していないのでなぜか[解決済み]になって投稿してしまいました。
アドバイスお待ちしております。
宜しくお願い致します。