_RecordsetPtr rst;//定义记录集// _RecordsetPtr rst;//定义记录集
rst.CreateInstance(__uuidof(Recordset));//数据库查询初始化
rst->CursorLocation = adUseClient;
CString str;
str = "select * from daiqq where ID = '1';";
try{
rst->Open((LPCTSTR)str ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockPessimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("chucuo le ");
}
if ( !rst->adoEOF)
rst->MoveLast();
rst->AddNew();
CString ID = "2";
CString NAME = "DAIQQ";
rst->PutCollect("ID",_variant_t(ID));
rst->PutCollect("NAME",_variant_t(NAME));
CString strBlob;
strBlob = "gogogo";
char* pBuffer = strBlob.GetBuffer(strBlob.GetLength());
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuffer)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 7;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
for (long i = 0; i < (long)7; i++)
SafeArrayPutElement (psa, &i, pBuffer++); ///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中
varBLOB.vt = VT_ARRAY | VT_UI1; ///将varBLOB的类型设置为BYTE类型的数组
varBLOB.parray = psa; ///为varBLOB变量赋值
rst->GetFields()->GetItem("F_MESSAGE")->AppendChunk(varBLOB);///加入BLOB类型的数据
}
rst->Update();
rst->Close();
后来我把写入二进制的代码去掉,新建了一个只有"ID""NAME"的表,但是总是到了"rst->Update();"这个地方出错,怎么回事?请大家伙指教.
rst.CreateInstance(__uuidof(Recordset));//数据库查询初始化
rst->CursorLocation = adUseClient;
CString str;
str = "select * from daiqq where ID = '1';";
try{
rst->Open((LPCTSTR)str ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockPessimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("chucuo le ");
}
if ( !rst->adoEOF)
rst->MoveLast();
rst->AddNew();
CString ID = "2";
CString NAME = "DAIQQ";
rst->PutCollect("ID",_variant_t(ID));
rst->PutCollect("NAME",_variant_t(NAME));
CString strBlob;
strBlob = "gogogo";
char* pBuffer = strBlob.GetBuffer(strBlob.GetLength());
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuffer)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 7;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
for (long i = 0; i < (long)7; i++)
SafeArrayPutElement (psa, &i, pBuffer++); ///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中
varBLOB.vt = VT_ARRAY | VT_UI1; ///将varBLOB的类型设置为BYTE类型的数组
varBLOB.parray = psa; ///为varBLOB变量赋值
rst->GetFields()->GetItem("F_MESSAGE")->AppendChunk(varBLOB);///加入BLOB类型的数据
}
rst->Update();
rst->Close();
后来我把写入二进制的代码去掉,新建了一个只有"ID""NAME"的表,但是总是到了"rst->Update();"这个地方出错,怎么回事?请大家伙指教.
试着这么写
rst->Open((LPCTSTR)str ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
rst->Open((LPCTSTR)str ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
但是还是不行.
我把存二进制的字段取消了,只是保留"ID""NAME",这两个,
str = "select * from daiqq ;";
try{
rst->Open((LPCTSTR)str ,_variant_t((IDispatch*)g_MyDb,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
}
catch(_com_error e)
{
AfxMessageBox("chucuo le ");
}
if ( !rst->adoEOF)
rst->MoveLast();
rst->AddNew();
CString ID = "2";
CString NAME = "DAIQQ";
rst->PutCollect("ID",_variant_t((long)2));
rst->PutCollect("NAME",_variant_t(NAME));
rst->Update();
结果还是到了"update()"这个地方就停滞了,程序好像死掉了.