CDaoDatabase断言错误

时间:2012-12-10 13:44:07

标签: c++ ms-access mfc

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);
}

这里我尝试验证我的数据库(.mdb)中是否包含CString值。当它达到BOOL bFound = rs.Seek("=",&searched);时,会抛出debug assertion failed错误。点击对话框上的重试,应用程序会在此行daocore.cpp的{​​{1}}中触发断点。

1 个答案:

答案 0 :(得分: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
{
}