- - PR -
CRecordsetクラスのDoFieldExchangeの方向性について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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内で「書込のみ」「読込のみ」の方向性を判断することは可能でしょうか? また、その具体的な方法をご教授いただけますでしょうか? よろしくお願いいます |
|
投稿日時: 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