一个窗体上有几个输入框,一个列表框。
我在窗体类中的定义了几个成员变量:
_ConnectionPtr pConn;
_RecordsetPtr  pRs;
CString strSQL;在窗体成员函数中定义了InitForm()函数,用来连接数据库,并且从数据库中读取数据初始化窗体的控件列表框。这个函数是在OnInitDialog()中调用的。然而,窗体上有个添加按钮,按添加的时候出现错误。不会是SQL语句的错误,因为不添加,只是一个简单的查询都出错。而pConn直接execute则没有错误。
是不是因为pRs再InitForm和OnButtonAdd都使用了的原因阿?中间是不是应该处理一下阿
void CDataBaseDlg::InitForm()
{
//初始化窗体
m_Name="";
m_Age="";
m_Class.AddString("1234");
m_Class.AddString("5678");
m_Class.AddString("9101");
m_Class.SetCurSel(0);

_variant_t _vValue;
CString strName;
pConn.CreateInstance(__uuidof(Connection));
pConn->CursorLocation=adUseClient;
strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=Student;UID=sa;PWD=aaaaaaaa";
pConn->Open(_bstr_t(strSQL),"","",-1);

pRs.CreateInstance(__uuidof(Recordset));
pRs->CursorLocation=adUseClient;
//此句
pRs->PutActiveConnection(pConn.GetInterfacePtr()); strSQL="select * from student order by sid desc";
pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);
if(!pRs->adoEOF)
{
pRs->MoveFirst();
while(!pRs->adoEOF)
{
_vValue=pRs->GetCollect("sname");
if(_vValue.vt!=VT_NULL)
{
_vValue.ChangeType(VT_BSTR);
strName=_vValue.bstrVal;
}
m_List.AddString(strName);
pRs->MoveNext();
}
}
//pRs->PutRefActiveConnection(NULL);
UpdateData(false);}void CDataBaseDlg::OnButtonAdd() 
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString cls;
m_Class.GetLBText(m_Class.GetCurSel(),cls); //_variant_t RecordsAffected;
strSQL.Format("insert student values('%s',%s,'%s')",m_Name,m_Age,cls);
//strSQL="select * from student";
AfxMessageBox(strSQL);
pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);
//pConn->Execute(_bstr_t(strSQL),&RecordsAffected,adCmdText);
}