0

MFC を使用して Access データベースにデータを追加しようとしています。2 つのテーブルがあり、最初のテーブルに 1 つのレコードを追加した後、ID を取得して 2 番目のテーブルを更新します。最初のパスではすべてが正常に機能します。しかし、2 番目のレコードでは、表 1 の rs.Update() が例外をスローします - 制限されたデータ型の属性違反です。両方のレコードに同じデータを使用しています。表 1 の ID は自動生成されます。

function AddData(){

rs.Open(CRecordset::snapshot, _T("SELECT * FROM Table1"));

for ( each of the objects ) 
{
    db.BeginTrans();
    rs.AddNew();  // Parent table

    m_xx = xx; 
    .......
    .....

   rs.Update(); 

   db.CommitTrans();

   id = GetParentId();  // Get Id of added record

   // Update the second table with id.
   UpdateSecondTable ( id ) ; 

 }
 rs.close(); 

}


int GetParentId(){

 rs.Open(CRecordset::forwardOnly, _T("SELECT @@Identity FROM Table1"));
 int id = rs.GetFieldValue(); 
 return id; 
}

前もって感謝します。

4

1 に答える 1

0

@@identityAccess ではうまく動作しません。挿入された ID を取得するには、まったく同じ接続を使用する必要があります。

これを解決する簡単なハックは次のようになります。select max(ID) from table1

ただし、これはマルチユーザー環境では安全ではありません。

于 2012-07-31T19:26:42.457 に答える