我用的是access数据库。
由于在一个库中我有多张表,所以在查询时我想在界面上添加一个EDIT编辑框,输入我想查询的那张表名,这样我想查询哪张表输入表名,点查询就可以了。
我想知道我的这种想法能实现吗?具体函数怎么写啊!
CString rulename;
GetDlgItemText(IDC_EDIT1,rulename); m_pRecordset->Open("SELECT * FROM rulename",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
我异想天开的这样写,结果自然是行不通的。
由于在一个库中我有多张表,所以在查询时我想在界面上添加一个EDIT编辑框,输入我想查询的那张表名,这样我想查询哪张表输入表名,点查询就可以了。
我想知道我的这种想法能实现吗?具体函数怎么写啊!
CString rulename;
GetDlgItemText(IDC_EDIT1,rulename); m_pRecordset->Open("SELECT * FROM rulename",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
我异想天开的这样写,结果自然是行不通的。
//这样写:
// CString openstr;
// openstr="SELECT * FROM "+rulename;
//然后open(openstr,.......
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是我数据库中的表名,怎么还会死掉,难道这句话我就写错了
初始化的时候可以把表名都作为下拉框的选项添加进去。
::CoInitialize(NULL);
以前也有过没有初始化的,怎么不会报错啊!
com的第一句。
本来用你的方法,openstr定义为CString型,运行时打开表失败。
要将openstr定义为_bstr_t型。
我的问题彻底解决了