本人才学MFC
用ADO连接SQL SERVER 2005
连上以后 可以实现查询数据库表内容等一些基本功能了
但发现 我无法想表中增加记录
试过AddNew();
也试过用Excute()执行Insert into语句 就是报错 要不说未指定的错误,IDispatch error.....m_pRecordset->AddNew();
m_pRecordset->PutCollect("Reader_Name" ,_variant_t(m_newReader_Name));
m_pRecordset->PutCollect("Phone_Num" ,_variant_t(m_newPhone_Num));
m_pRecordset->PutCollect("Person_ID" ,_variant_t(m_newPersonID));其中m_newReader_Name,m_newPhone_Num,m_newPersonID是三个CString类型,是编辑控件的值..
而Reader_Name,Phone_Num,Person_ID是数据库的一个表的三个属性...一编译可以通过 一执行的时候就显示 未指定的错误谁可以帮帮忙么?先谢谢 小弟感激不尽
用ADO连接SQL SERVER 2005
连上以后 可以实现查询数据库表内容等一些基本功能了
但发现 我无法想表中增加记录
试过AddNew();
也试过用Excute()执行Insert into语句 就是报错 要不说未指定的错误,IDispatch error.....m_pRecordset->AddNew();
m_pRecordset->PutCollect("Reader_Name" ,_variant_t(m_newReader_Name));
m_pRecordset->PutCollect("Phone_Num" ,_variant_t(m_newPhone_Num));
m_pRecordset->PutCollect("Person_ID" ,_variant_t(m_newPersonID));其中m_newReader_Name,m_newPhone_Num,m_newPersonID是三个CString类型,是编辑控件的值..
而Reader_Name,Phone_Num,Person_ID是数据库的一个表的三个属性...一编译可以通过 一执行的时候就显示 未指定的错误谁可以帮帮忙么?先谢谢 小弟感激不尽
是否在使用之前已经初始化?CString sql1("select * from table t where Reader_Name='");
sql1+=m_newReader_Name;
sql1+="'";
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_variant_t)sql1,_variant_t((IDispatch*)m_pConn,true),adOpenStatic,adLockOptimistic,adCmdText);m_pRecordset->AddNew()之前先执行这几句看看。
BOOL CADODatabase::Open(LPCTSTR lpstrConnection, LPCTSTR lpstrUserID, LPCTSTR lpstrPassword)
{
HRESULT hr = S_OK; if(IsOpen())
Close(); if(strcmp(lpstrConnection, _T("")) != 0)
m_strConnection = lpstrConnection; ASSERT(!m_strConnection.IsEmpty()); try
{
if(m_nConnectionTimeout != 0)
m_pConnection->PutConnectionTimeout(m_nConnectionTimeout);
hr = m_pConnection->Open(_bstr_t(m_strConnection), _bstr_t(lpstrUserID), _bstr_t(lpstrPassword), NULL);
return hr == S_OK;
}
catch(_com_error &e)
{
return FALSE;
}
}// 把要执行的插入语句放在这里……
BOOL CADODatabase::Execute(LPCTSTR lpstrExec)
{
ASSERT(m_pConnection != NULL);
ASSERT(strcmp(lpstrExec, _T("")) != 0);
_variant_t vRecords;
try
{
m_pConnection->CursorLocation = adUseClient;
m_pConnection->Execute(_bstr_t(lpstrExec), &vRecords, adExecuteNoRecords);
return TRUE;
}
catch(_com_error &e)
{
return FALSE;
}
}
哎 貌似一直有问题哎
在AddNew()前加上你给的句子 显示IDispatch error #3092
CString strSql;
CString str1,str2,str3;
str1 = _T("Test1");
str2 = _T("Test2");
str3 = _T("Test3");
strSql.Format(_T("Insert into tb(col1,col2,col3)" //故意换行看看,
" values('%s','%s','%s')"),str1,str2,str3);m_pConnection->Execute(strSql);大致就这样啦,good luck~
例如:你要插入A表
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));m_pRecordset->Open("select * from A",
_variant_t((IDispatch*pConn,true),adOpenStatic,adLockOptimistic,adCmdText);
pConn 是你到A表数据库的连接
注意:这里的记录集必须是用m_pRecordset->Open打开,其他都不行。
m_pRecordset->AddNew(); //挂起一个记录
m_pRecordset->PutCollect("Reader_Name" ,_variant_t(m_newReader_Name)); //增加
m_pRecordset->PutCollect("Phone_Num" ,_variant_t(m_newPhone_Num)); //增加
m_pRecordset->PutCollect("Person_ID" ,_variant_t(m_newPersonID)); //增加// 这里为什么不更新提交???
m_pRecordset->Update()更新到数据库 或者
m_pRecordset->UpdateBatch(adAffectCurrent)//将当前挂起的记录更新到数据库这样就可以了~~
AddNew()可不负责把数据,放进数据库啊.它将数据挂起读入内存而已!