odbc如何根据程序输入的参数动态检索

nickshen 2005-03-16 03:43:58
我想根据程序传递过来的一个string变量(这是个地址)
查询数据库中有相同地址的纪录,我的数据库是一对多的纪录,就是table1可能对应多个table2纪录
所以需要类似于这样
m_strfilter = "table1.addr = table2.addr = str"
我这样写了以后调用requery(),怎么发现还是查找了数据库头一行的纪录,和我的要求不符,请问应该怎么写这样的语句在vc中
谢谢!!
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nickshen 2005-03-17
  • 打赏
  • 举报
回复
现在有点发现问题所在了,是我的m_strFilter.Format("table1.addr = table2.addr = '%s'",temp); 设置不对,有语法错误
导致在requery时,没有查询语句,从而使用了open(AFX_DB_USE_DEFAULT_TYPE,NULL),也就是查询了
默认的SQL语句
现在我应该怎么写这个filter,或是我怎么写这个open语句,下面报告where附近有语法错误
str1.Format("table1.Addr = table2.RSAddr and table1.Addr = '%s'",strAddr);
str = "select * from table1, table2 where ";
str += str1;
if ( m_pSet->IsOpen() ){
m_pSet->Close();
}
m_pSet->Open(CRecordset::dynaset,str);
谢谢!!
nickshen 2005-03-16
  • 打赏
  • 举报
回复
如果在加上try语句之前加上
if ( m_pSet->IsBOF() && m_pSet->IsEOF() ){
return;
}
程序运行结果表示是有数据的,没有那样返回!我的default sql语句是查询整个数据库
CString CLUSSSet::GetDefaultSQL()
{
m_strFilter = "table1.Addr = table2.Addr";
return _T("[dbo].[table1],[dbo].[table2]");
}
现在要根据返回的str重新查数据库,只要返回addr是str的一些纪录就可以了
难道我上面那样改动m_strfilter不对?

请指教,谢谢!!
oyljerry 2005-03-16
  • 打赏
  • 举报
回复
MoveFirst前先判断一下得到的记录集是否为空
nickshen 2005-03-16
  • 打赏
  • 举报
回复
m_pSet->m_strFilter.Format("table1.Addr = table2.Addr = '%s'",Addr);
if ( !m_pSet->Requery() ){
AfxMessageBox("Requery has failed");
return;
}
try{
m_pSet->MoveFirst();
}
catch( CDBException *e ){
AfxMessageBox("No records were found",MB_ICONEXCLAMATION);
e->Delete();
return;
}
照楼上的写法怎么还是找到数据库中第一个记录呢?莫非是movefirst不该用?请指教!谢谢!!
nickshen 2005-03-16
  • 打赏
  • 举报
回复
还有一个问题,在这之间,如果还想查询默认的数据库检索
是否要在检索前,调用getdefaulatsql()这样的语句
待会问题解决了就结帖
Kudeet 2005-03-16
  • 打赏
  • 举报
回复
m_strFilter.Format("table1.addr = table2.addr = '%s'",temp); //这个temp就是输入的动态参数

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧