我用的是access数据库。
由于在一个库中我有多张表,所以在查询时我想在界面上添加一个EDIT编辑框,输入我想查询的那张表名,这样我想查询哪张表输入表名,点查询就可以了。
我想知道我的这种想法能实现吗?具体函数怎么写啊!
CString rulename;
GetDlgItemText(IDC_EDIT1,rulename); m_pRecordset->Open("SELECT * FROM rulename",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
我异想天开的这样写,结果自然是行不通的。

解决方案 »

  1.   

    //你的rulename是变量啊!
    //这样写:
    //  CString openstr;
    //  openstr="SELECT * FROM "+rulename;
    //然后open(openstr,.......
      

  2.   

    CString rulename;
    GetDlgItemText(IDC_EDIT1,rulename);
    CString openstr;
    openstr="SELECT * FROM"+rulename; int i=0;
    //-----------连接数据库---------------------------
    HRESULT hr;
    try
    {
    hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
    if(SUCCEEDED(hr))
    {
    hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=rules.mdb","","",adModeUnknown);///连接数据库
    ///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;  }
    }
    }
    catch(_com_error e)///捕捉异常
    {
    CString errormessage;
    errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
    MessageBox(errormessage);///显示错误信息

    //--------------读取数据库中表中的信息--------------------------------
        try
    {
         m_pRecordset.CreateInstance("ADODB.Recordset");
    m_pRecordset->Open("openstr",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);程序一运行到open那边就死掉。
    我若按正常写法
    m_pRecordset->Open("SELECT * FROM backdoor",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
     backdoor是我数据库中的表名,怎么还会死掉,难道这句话我就写错了
      

  3.   

    加了trycatchADO数据库程序死的机会就很少
      

  4.   

    与其用edit不如用下拉框
    初始化的时候可以把表名都作为下拉框的选项添加进去。
      

  5.   

    我加了的,现在程序不会死了,因为我刚刚没有初始化
    ::CoInitialize(NULL); 
    以前也有过没有初始化的,怎么不会报错啊!
      

  6.   

    但是后来打开表的时候写的语句应该是差不多的,我按照3楼zzultc说的那样改了下,运行是catch报错“初始化时读取数据库失败”
      

  7.   

    找到问题就好!原来是没有::CoInitialize(NULL);  
    com的第一句。
      

  8.   


    本来用你的方法,openstr定义为CString型,运行时打开表失败。
    要将openstr定义为_bstr_t型。
    我的问题彻底解决了