none
CRecordsetにはサイズ限界があるのでしょうか? RRS feed

  • 質問

  • CRecordsetの挙動について、詳しい方がおられましたらコメントをお願いします。

      Visual C++ SQL : SQL と C++ のデータ型 (ODBC) 
      http://msdn2.microsoft.com/ja-jp/library/eshhha8h(VS.80).aspx

    上記ページに、下記の記述があります。

      ODBC カーソル ライブラリを使用しないと、Microsoft SQL Server ODBC
      ドライバと MFC ODBC データベース クラスを使用して長い可変長
      フィールドを複数更新できないことがあります。

      ODBC の SQL_LONGVARCHAR 型と SQL_LONGVARBINARY 型は、
      SQL サーバーの text 型と image 型に対応付けられています。複数の長い
      可変長フィールドを 1 回の CRecordset::Update 呼び出しで更新すると、
      CDBException がスローされます。したがって、CRecordset::Update
       1 回の呼び出しで長い列を複数同時に更新しないでください。


    SQL Serverではありませんが、MySQL(文字コードはCP932設定)にて

      void CBD_OPE_INFO::DoFieldExchange(CFieldExchange* pFX)
      {
        //{{AFX_FIELD_MAP(CBD_OPE_INFO)
        pFX->SetFieldType(CFieldExchange::outputColumn);
        RFX_Int(pFX, _T("[ID]"), m_EQUIP_ID);
        RFX_Byte(pFX, _T("[NO]"), m_TEST_NO);
        RFX_Byte(pFX, _T("[S_NO]"), m_SLOT_NO);
        RFX_Date(pFX, _T("[DATETM]"), m_DATETM);
        RFX_Long(pFX, _T("[L_ID]"), m_LOT_ID);
        RFX_Text(pFX, _T("[C_ID_MAP]"), m_CHIP_ID_MAP,, 2048);
        RFX_Text(pFX, _T("[C_STS_MAP]"), m_CHIP_STS_MAP, 2048);
        RFX_Text(pFX, _T("[T_USECNT_MAP]"), m_TEST_USECNT_MAP, 2048);
        RFX_Text(pFX, _T("[T_FAIL_MAP]"), m_TEST_FAIL_MAP,  2048);
        RFX_Text(pFX, _T("[C_FAILCNT_MAP]"), m_C_FAILCNT_MAP, 2048);
        //}}AFX_FIELD_MAP
      }


    というテーブルを作成し、CRecordsetの派生クラスにて
    AddNew()→Update() を行った所、Exceptionが発生しました。
    (dbcore.cppのAFX_ODBC_CALLにて)

    CDatabaseクラスのExecuteSQLメソッドによるINSERTは問題ありませんでした。

    不可解なのは、設定済みのレコードを、Edit()→Update()した場合は
    Exceptionとならないんです。

     ・なぜAddNew()はエラーとなってしまうのか?

     ・なぜEdit()はエラーとならないのか?

     ・CRecordsetは1レコードあたり何バイトまで対応できるのか?

    ご存知でしたらコメントをお願いします。

    2006年11月28日 12:04