我有一个ACCESS库Test.mdb,库内有一表:User,我想按表内的姓名及日期来进行查询,姓名字段为name,日期字段为date
_RecordSetPrt m_precordset;
...
m_precordset.Open("",.....)
我想问下那条SQL语句怎么写?
Select * from User where name=str_name and Date=dt_date --str_name及dt_date是变量
不知怎么样把这SQL语句放到VC里?谢谢

解决方案 »

  1.   

    看一下Open()的参数就知道了
      

  2.   

    CString ss;ss.format("Select * from User where name= '%s' and Date = #%s#", str_name ,strTime);这里有两个问题,第一,最后拼凑出来的sql语句是要这样的Select * from User where name= '张三' and Date = #2005-7-25#,这样的格式至于怎么拼凑,你用CString 的format也行,用+号把两个CString拼起来也可以第二,我在时间这个地方用了个strtime,这是把时间类型的数据转成了CString的类型了这个怎么转,可以参考CTime::Format,把时间变量转成CString
    即”2005-7-25“这样的格式,这样对于拼凑sql语句比较方便
    呵呵,个人意见,仅供参考
      

  3.   

    1.stdafx.h中加入
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 
    2。app文件的InitInstance中加入
    if(S_OK!=OleInitialize(NULL))  //或者CoInitialize()
    {
    AfxMessageBox("初始化COM组件库错误");
    }
    下面就是数据库操作
    _ConnectionPtr pConn;
    _RecordsetPtr  pRs;
    CString strSQL;
    pConn.CreateInstance(__uuidof(Connection));
    pConn->CursorLocation=adUseClient;
    strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa";
    pConn->Open(_bstr_t(strSQL),"","",-1);pRs.CreateInstance(__uuidof(Recordset));
    pRs->CursorLocation=adUseClient;
    pRs->PutActiveConnection(pConn.GetInterfacePtr());pRs1.CreateInstance(__uuidof(Recordset));
    pRs1->CursorLocation=adUseClient;
    pRs1->PutActiveConnection(pConn.GetInterfacePtr());strSQL="select * from catalog order by cataid";
    pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);
      

  4.   

    按照handsomerun(毛毛) 兄说的做,
    try{
    ss.format("Select * from User where name= '%s' and Date = #%s#", str_name ,strTime);
    m_precordset.Open(_bstr_t(ss)....
    }
    catch(...)
    {
     AfxMessageBox("不能打开表");  //
    }
    但它总是出现AfxMessageBox对话框,数据库是能正确连了,但表为什么不能打开?还有,连数据库的时候很慢,大概要6秒钟,我认为不应该有这么慢的,也不知为什么?不关机子的事
      

  5.   

    sql语句没问题?
    跟踪一下,确实是符合标准的??没有语法错的
    呵呵,给你一段偶的代码吧,但愿能有对你有帮助////////////////////////////////
    _variant_t RecordsAffected;
    _RecordsetPtr pRecordset;pRecordset.CreateInstance(_uuidof(Recordset));pRecordset = pCon->Execute (_bstr_t(strSql) , &RecordsAffected , adCmdUnknown);
    if(pRecordset->State)
    {
    pRecordset->Close();
    pRecordset = NULL;  
    }/////////////////////////////////////////
    这里我用的pRecordset是个局部变量,所以要创建和结束的时候关闭pCon是你的_ConnectionPtr,我想你也要用到的吧
    我喜欢用pCon->Execute 执行sql语句的当然,和你的open道理是一样的啦
    如果不用局部的变量,像你那样用类成员的m_precordset也一样
    m_precordset= pCon->Execute (_bstr_t(strSql) , &RecordsAffected , adCmdUnknown);
    建议还是跟踪一下,看看sql语句是否正确,符合格式
      

  6.   

    另外,给你一段连接access的连接符看看对你有帮助没有Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xxx;xxx是你的access文件的地址(带路径),
    如果你数据库在当前目录下
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=temp.mdb;
      

  7.   

    哦,对了,你试试不加条件的检索,打开表
    即使把sql语句写成Select * from User 
    看看能不能打开,呵呵
      

  8.   

    谢谢了,不加检索是可以的,连数据库也是可以的,我以前是用CB的,最近才刚转VC,SQL语句是正确的,因为我在CB上运行无误,再自己查下,谢谢了