- PR -

CRecordsetクラスのDoFieldExchangeの方向性について

1
投稿者投稿内容
JJ
ベテラン
会議室デビュー日: 2003/02/25
投稿数: 61
投稿日時: 2006-04-26 09:57
開発環境
・VC++6.0
・Postgresql8.xx

CRecordsetを派生したクラスを使用しODBC接続を行っています。
下記の様に実装しています
-------------------------------------------------------
CTime m_timeDate1;
CTime m_timeDate2;

void DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(XXXTable)
pFX->SetFieldType(CFieldExchange:utputColumn);
RFX_Date(pFX, _T("[date1]"), m_timeDate1);
RFX_Date(pFX, _T("[date2]"), m_timeDate2);
//}}AFX_FIELD_MAP
}
-------------------------------------------------------

「m_timeDate1 =CTime(0);」で初期化した場合、2つの問題があります
@「1970-01-01 09:00:00」(GMTの 1970-01-01 00:00:00)になり、
 これをpostgresのDate型に書き込むと「1970-01-01」となり
 読み込み時に「1970-01-01 00:00:00」となりエラーとなる
 (CTimeの有効範囲が「1970-01-01 09:00:00」からのため)
A「1970-01-01 09:00:00」が「1970-01-01 00:00:00」に置き換わるため
 初期値として扱えない「NULLと同様の意味」

これを解決する案として、RFX_HogeDateを自作したいと思い試みました。
・m_timeDate1 =CTime(0)の場合のみはNULLを書込みたいと思っています
 具体的には「RFX_Text」を使用して書込みを行う(これは可能でした)
 CString m_strHoge1 = "";
 RFX_Text(pFX, _T("[date1]"), m_strHoge1);

・CDialogの派生クラスでDoDataExchange内では「pDX->m_bSaveAndValidate」で
 方向性が分かるため
 読み込みと書込みで処理をかえることが可能だったのでDDX_HogeTimeを自作しました。
 同様に作成を考えていますが、
 CFieldExchangeには単純に方向性がわかるフラグがありません。

質問としては
DoFieldExchange内で「書込のみ」「読込のみ」の方向性を判断することは可能でしょうか?
また、その具体的な方法をご教授いただけますでしょうか?

よろしくお願いいます
JJ
ベテラン
会議室デビュー日: 2003/02/25
投稿数: 61
投稿日時: 2006-04-26 10:01
下記の様に試してみましたが使い方が違うようです
----------------------------------------------------------
void DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(XXXTable)
pFX->SetFieldType(CFieldExchange:outputColumn);
//}}AFX_FIELD_MAP
m_nParams =4;
pFX->SetFieldType(CFieldExchange:inputParam);
RFX_Text(pFX, _T("[date1]"), m_strHoge1);
RFX_Text(pFX, _T("[date2]"), m_strHoge2);
pFX->SetFieldType(CFieldExchange:outputParam);
RFX_Date(pFX, _T("[date1]"), m_timeDate1);
RFX_Date(pFX, _T("[date2]"), m_timeDate1);
}
----------------------------------------------------------
文字化けするため一部コロンを削除しました
1

スキルアップ/キャリアアップ(JOB@IT)