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

在这里,我尝试验证我的数据库 (.mdb) 中是否包含 CString 值。当它到达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");

如果存在特定记录,这种检查方式非常慢。你通过网络吸取所有记录,然后检查它们。最好在打开之前修改记录集的过滤器,然后检查是否返回了任何记录。

方法一:

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 回答