VC+Access+ODBC,数据库的简单问题:模糊查询和获得记录总数???急

时间:2021-01-22 21:44:09
1. 如何实现对备注型字段的模糊查询?
描述:查询 Meaning字段(备注型),用于存储 英语单词的意思,现在想要根据中文意思,查询意思相近的所有英语单词?
     用 ... Meaning like '%关键字%' 和 ...Meaning like '*关键字*' 结果都不对。。请高手指点!

2. 利用->GetRecordCount() 为啥总是 =1 呢
代码如下:
//首先 ,通过CRecordset类派生出 CASet类 与 数据库的单词表 关联
class CASet : public CRecordset 
{
....
}
//
......类的实现
//

//在APP头文件里定义:
CASet m_ASet;//供全局共同使用
//
//在需要调用的对话框头文件定义:
CASet *theASet;
//
void CYJWordDlg::OnBUTTONAllWORD() //查询所有词汇并输出
{
m_ListWord.ResetContent(); //列表框,用于显示所有单词
         
         theASet = &theApp.m_ASet;
          
if (!theASet->IsOpen())
{
theASet->Open();
}

theASet->m_strFilter = "";//选择所有单词
theASet->Requery();

if (theASet->GetRecordCount()) //词库里的单词数量
{
                  int nCount = theASet->GetRecordCount();//这里一直 nCount=1 ???不明白 
while (!theASet->IsEOF())
{
m_ListWord.AddString(theASet->m_Word);
theASet->MoveNext();
}
}
theASet->Close();
}

问题:这里的明明 m_strFilter = "",表示选择所有单词,而结果也是所有单词都输出了,
      可nCount 为啥是1呢?不应该是 全部的单词数量吗
////
。。以上两个问题,请教大家,希望知道的给予指点,谢谢

8 个解决方案

#1


http://topic.csdn.net/u/20100907/23/ecf4483a-9809-4499-85e4-b360b088f4a1.html
这里测试下SQL语句是否如你所想的结果,如果结果是对的,推荐你换成 ADO

#2


引用 1 楼 zyq5945 的回复:
http://topic.csdn.net/u/20100907/23/ecf4483a-9809-4499-85e4-b360b088f4a1.html
这里测试下SQL语句是否如你所想的结果,如果结果是对的,推荐你换成ADO。

测试助手下不下来,重新给个下载地址吧

#3


引用 1 楼 zyq5945 的回复:
http://topic.csdn.net/u/20100907/23/ecf4483a-9809-4499-85e4-b360b088f4a1.html
这里测试下SQL语句是否如你所想的结果,如果结果是对的,推荐你换成ADO。

好了,我测试了下,用这个ADO测试之后,确实没问题,难道是CRecordSet 的问题吗? 不过我还是想把这个问题搞明白,希望知道的能 给提点提点啊

#4


加上转意符号尝试下

"Meaning = \'%关键字%\'"

#5


引用 4 楼 tiger9991 的回复:
加上转意符号尝试下

"Meaning = \'%关键字%\'"

按照这样,确实可以,
太好了,现在第1问题已经解决了。

。。。下来,第2个问题,不晓得有没有人知道原因呢。
theASet->GetRecordCount() 为啥一直 =1 呢?

#6


你查询的方式不对。。。
这个呢?
"Meaning = \'%\'"


#7


CRecordset::GetRecordCount 返回值看MSDN说的,有记录时1 无记录时0,想获得记录数目重复MoveNext统计

可以执行SQL语句来获取记录条数

LONG GetRecordeCount(CDatabase *m_pDatabase)
{
  long nCount = 0;
  try
  {
    if(m_pDatabase && m_pDatabase->IsOpen())
    {
      CString cmdSQL = _T("");
      cmdSQL = _T("SELECT COUNT(*) FROM youTabName WHERE youCondition");
      
      CRecordset rsCount(m_pDatabase);
      if(rsCount.Open(CRecordset::forwardOnly, cmdSQL, CRecordset::executeDirect))
      {
        CString strValue = _T("0");
        if (!rsCount.IsEOF())
          rsCount.GetFieldValue((short)0, strValue);
        nCount = _ttol(strValue);
        rsCount.Close();
      }
    }
  }
  catch(CDBException * e)
  {
    e->ReportError();
    e->Delete();
  }
  
  return nCount;
}

#8


哦,可能我理解MSDN的 GetRecordCount()函数时理解错了,我以为 有的时候则返回记录数,没有则返回0

哎,从头到尾遍历一下算了, 

#1


http://topic.csdn.net/u/20100907/23/ecf4483a-9809-4499-85e4-b360b088f4a1.html
这里测试下SQL语句是否如你所想的结果,如果结果是对的,推荐你换成 ADO

#2


引用 1 楼 zyq5945 的回复:
http://topic.csdn.net/u/20100907/23/ecf4483a-9809-4499-85e4-b360b088f4a1.html
这里测试下SQL语句是否如你所想的结果,如果结果是对的,推荐你换成ADO。

测试助手下不下来,重新给个下载地址吧

#3


引用 1 楼 zyq5945 的回复:
http://topic.csdn.net/u/20100907/23/ecf4483a-9809-4499-85e4-b360b088f4a1.html
这里测试下SQL语句是否如你所想的结果,如果结果是对的,推荐你换成ADO。

好了,我测试了下,用这个ADO测试之后,确实没问题,难道是CRecordSet 的问题吗? 不过我还是想把这个问题搞明白,希望知道的能 给提点提点啊

#4


加上转意符号尝试下

"Meaning = \'%关键字%\'"

#5


引用 4 楼 tiger9991 的回复:
加上转意符号尝试下

"Meaning = \'%关键字%\'"

按照这样,确实可以,
太好了,现在第1问题已经解决了。

。。。下来,第2个问题,不晓得有没有人知道原因呢。
theASet->GetRecordCount() 为啥一直 =1 呢?

#6


你查询的方式不对。。。
这个呢?
"Meaning = \'%\'"


#7


CRecordset::GetRecordCount 返回值看MSDN说的,有记录时1 无记录时0,想获得记录数目重复MoveNext统计

可以执行SQL语句来获取记录条数

LONG GetRecordeCount(CDatabase *m_pDatabase)
{
  long nCount = 0;
  try
  {
    if(m_pDatabase && m_pDatabase->IsOpen())
    {
      CString cmdSQL = _T("");
      cmdSQL = _T("SELECT COUNT(*) FROM youTabName WHERE youCondition");
      
      CRecordset rsCount(m_pDatabase);
      if(rsCount.Open(CRecordset::forwardOnly, cmdSQL, CRecordset::executeDirect))
      {
        CString strValue = _T("0");
        if (!rsCount.IsEOF())
          rsCount.GetFieldValue((short)0, strValue);
        nCount = _ttol(strValue);
        rsCount.Close();
      }
    }
  }
  catch(CDBException * e)
  {
    e->ReportError();
    e->Delete();
  }
  
  return nCount;
}

#8


哦,可能我理解MSDN的 GetRecordCount()函数时理解错了,我以为 有的时候则返回记录数,没有则返回0

哎,从头到尾遍历一下算了,