ado recordset是不是只能普通select...from语句
我下载了一个别人封装的ado类,其中没有connection.execute,我是不是应该增加这个函数?
我下载了一个别人封装的ado类,其中没有connection.execute,我是不是应该增加这个函数?
解决方案 »
- 真心求分析一段看了2个通宵不太明白的代码!!!!!!里面有容器知识,(才不到50行)
- 怎么重绘ListCtrl的边框又不影响显示, 仅是边框
- 关于数据库的 请达人支招!!!!!!!!!!!!!!!!!!!!!
- 在对话框中放入flash后,这个对话框却响应不了我的鼠标消息了~该怎么办?
- GIF类,得不出HBITMAP
- 请帮忙解答一个API程序的问题
- 怎样通知程序有新硬件的插拔
- 如何将数组打包成SAFEARRAY ?
- DLL变量赋值问题
- VC中的嵌套如何用法。
- VC++6.0 MFC adodc控件
- 我做了个基于MFC的Dialog程序,现正想让主对话框中的局部变量UpdateData(False),而不想因为一两个变量更新了就全部UpdateData(False),各位大侠有何高招?
BOOL CAdoConnection::Execute(_bstr_t CommandText, long Options)
{
ASSERT(m_pConnection != NULL);
_variant_t RecordsAffected; try
{
if (m_pConnection == NULL)
{
return FALSE;
}
m_pConnection->Execute(CommandText, &RecordsAffected, Options);
return TRUE;
}
catch (_com_error e)
{
TRACE(_T(":( 执行命令发生异常: %s\n"), e.ErrorMessage());
return FALSE;
}}
哪里错了?
strSQL="SELECT * INTO [;DataBase=C:\\Documents and Settings\\Fong\\桌面\\信阳样本\\test.mdb].t_kycl FROM t_kycl"出错,是不是因为不能执行SELECT * INTO?
把 e.ErrorMessage()改成e.Description();然后括号中改成如下试试:
"SELECT * INTO [MS Access;Database=C:\\Documents and Settings\\Fong\\桌面\\信阳样本\\test.mdb].t_kycl FROM t_kycl"
现在有另外一个问题,下面的删除出错:
strSQL="DROP TABLE t_kycl";
TRACE("连接状态:%d\n", m_adoConnection.IsOpen());//返回1,正常
if (m_adoConnection.Execute(strSQL.GetBuffer(50))== FALSE)
{
AfxMessageBox("删除t_kycl失败!");
return;
}
错误信息:
:( 执行命令发生异常: IDispatch error #3092
语句DROP TABLE t_kycl直接在access中执行没问题VC的ado怎么这么复杂,以前用VB真的很简单
BOOL Execute(_bstr_t CommandText, long Options=adCmdText);//声明
BOOL CAdoConnection::Execute(_bstr_t CommandText, long Options)//定义
{
ASSERT(m_pConnection != NULL);
_variant_t RecordsAffected; try
{
if (m_pConnection == NULL)
{
return FALSE;
}
m_pConnection->Execute(CommandText, &RecordsAffected, Options);
return TRUE;
}
catch (_com_error e)
{
TRACE(_T(":( 执行命令发生异常: %s,%s\n"), e.ErrorMessage(),e.Description());
return FALSE;
}}
struct _Recordset * _result;
HRESULT _hr = raw_Execute(CommandText, RecordsAffected, Options, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _RecordsetPtr(_result, false);
}code]
出错时
CommandText {"DROP TABLE t_kycl" (2)}
RecordsAffected 0x0013f3ec{VT_EMPTY}
Options 1
TRACE("连接状态:%d\n", m_adoConnection.IsOpen());//返回1,正常
if (m_adoConnection.Execute(strSQL.GetBuffer(50))== FALSE)
{
AfxMessageBox("删除t_kycl失败!");
return;
}
if (!m_adoConnection.Connect(LPCSTR(strConnect)))
{
AfxMessageBox("数据库连接失败!");
return;
}
strConnect的内容为{"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test.mdb"}
BOOL CAdoConnection::Connect(LPCTSTR strConnect, long lOptions)
{
ASSERT(m_pConnection != NULL);
m_strConnect = strConnect;
try
{
// 连接数据库---------------------------------------------
return SUCCEEDED(m_pConnection->Open(strConnect, "", "", lOptions));
}
catch (_com_error e)
{
TRACE(_T(":( 连接数据库发生异常: %s\n"), e.ErrorMessage());
return FALSE;
}
catch (...)
{
TRACE(_T(":( 连接数据库时发生未知错误:"));
}
return FALSE;
}
不知道你是怎么做的,我是可以的,下面是我的代码:CoInitialize(NULL);_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","tyz",adModeUnknown);
m_pConnection->Execute("drop table test",&RecordsAffected,adCmdText);
m_pConnection->Close();
m_pConnection.Release();
CoUninitialize();
return 0;
}
catch(_com_error e)
{
cout<<"数据库连接操作失败!"<<endl;
cout<<(LPCSTR)e.Description()<<endl;
return 1;
}
//是没有找到对象错误
//表不存在?