一个由VCKBASE中王骏连access例程改编的程序(改连oracle)
代码如下:
我在oracle中建立的库名是deviser,用户名字是user1,密码是pass1;
建立的表是create table userphoto(ID number,
                                  username varchar(50),
                                  old number,
                                  photo long raw);              
void SavePicture()
 AfxOleInit();
m_pConnection.CreateInstance("ADODB.Connection");
/**************************************************************/
try
{
m_pConnection->ConnectionTimeout = 8;
    m_pConnection->Open("Provider=Microsoft OLE DB Provider for Oracle;Data Source=deviser","user1","pass1",adModeUnknown);
AfxMessageBox("Êý¾Ý¿âÁ¬½Ó³É¹¦!!");
}
catch(_com_error e)///
{
AfxMessageBox("Êý¾Ý¿âÁ¬½Óʧ°Ü!");
//return FALSE;

/***************************************************************
m_pRecordset.CreateInstance("ADODB.Recordset");
HRESULT hr = m_pRecordset->Open("SELECT * FROM userphoto",_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);
    if(SUCCEEDED(hr))
   AfxMessageBox("¼Ç¼´ò¿ª³É¹¦!!");

    HBITMAP hBitmap=m_picture.GetBitmap();
    XBitmap xbmp;
    xbmp.Attach(hBitmap);
    long lSize = 0;
m_pBMPBuffer=NULL;
    xbmp.LoadBitmapIntoBuffer(&m_pBMPBuffer,lSize);
    m_nFileLen=lSize ;
  
/***************************************************************    char *pBuf=m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1];
    _variant_t      RecordsAffected;

     if(m_bNewUser)
m_pRecordset->AddNew();
m_pRecordset->PutCollect("username",_variant_t(m_UserName));
m_pRecordset->PutCollect("old",atol(m_Old));
if(pBuf)
{    
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);//
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);
}
m_pRecordset->Update();
delete m_pBMPBuffer;
    m_pBMPBuffer=NULL;
m_pRecordset->Close();
m_pConnection->Close();
}
可是每当执行到m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBLOB);//倒属第六行调用ADO中的AppendChunk涵数时候就出错不知道是为什么?请好心人帮忙看一下.上面的程序前几部分跟踪出来都是对的,
程序的目的是为了从控键取出BMP图片的句丙然后得到图片的其他所有相关信息,
最后把BMP格式的图片以二进制的形式存入oracle数据库里面.