0
CString m_strRemorcaNmb; // value for this string is set before 
CString path = "DB\\dataBase";
CDaoDatabase db;
try
{
    db.Open(path, 0, 0, "");
    CDaoRecordset rs(&db);
    rs.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT Numar_inmatriculare FROM Masini;"), 0);

    COleVariant searched(m_strRemorcaNmb); 
    BOOL bFound = rs.Seek("=",&searched);
}

ここでは、CString値がデータベース(.mdb)に含まれているかどうかを確認しようとしています。エラーに達するBOOL bFound = rs.Seek("=",&searched);debug assertion failedスローされます。ダイアログボックスで再試行を押すと、アプリケーションdaocore.cppはこの行でブレークポイントをトリガーしますASSERT(m_nOpenType == dbOpenTable);

4

1 に答える 1

1

使用Seekするには、テーブルタイプのレコードセットが必要です。(MSDN: http: //msdn.microsoft.com/en-US/library/k3tkt1zd%28v=vs.80%29.aspxを参照してください)これを取得するには、レコードセットを開くときにタイプを指定する必要があります。

例:

rs.Open(CDaoRecordSet::dbOpenTable,"table1");

特定のレコードが存在する場合、このチェック方法は非常に低速です。ネットワークを介してすべてのレコードを吸い上げてから、それらをチェックします。開く前にレコードセットのフィルターを変更してから、レコードが返されたかどうかを確認することをお勧めします。

方法A:

sql = "SELECT count(*) AS xyz FROM table WHERE Field='value'";
rs.Open(CDaoRecordset::dbOpenSnapshot,sql);
COleVariant count = rs.GetFieldValue(0);

生成されたレコードセットの方法B:

rs.m_strFilter.Format("Field = '%s'", value);
rs.Open(CDaoRecordset::dbOpenSnapshot,"table");

if(rs.IsEOF()) // no records returned
{
}
于 2012-12-10T15:39:10.830 に答える