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}}中触发断点。
答案 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
{
}