在数据库中新建一张名为"photo"的表
字段分别为:id,username,datetime,photo;
主键是:username
在项目中主要是根据用户名来进行参数查询,读取用户的存放的图片
现在已经实现了图片根据参数的存放,问题是在用户输入了"username"
以后想一张一张的显示图片 (有两个导航键),现在我实现不了向前或者向后移动游标
知道有m_precordset->movenext()/previores();方法,但看不到效果
想知道游标使用的原理以及相关的方法.
字段分别为:id,username,datetime,photo;
主键是:username
在项目中主要是根据用户名来进行参数查询,读取用户的存放的图片
现在已经实现了图片根据参数的存放,问题是在用户输入了"username"
以后想一张一张的显示图片 (有两个导航键),现在我实现不了向前或者向后移动游标
知道有m_precordset->movenext()/previores();方法,但看不到效果
想知道游标使用的原理以及相关的方法.
while(!pRecordset->adoEOF)
{
显示图像部分
pRecordset->MoveNext();
}
这样出来的效果就是遍历了表中的所有记录而且一下子把图片全部显示出来了.我把移动记录集指针的函数贴出来,这是一个Caption 为"下一个"按钮的消息响应函数
我是觉得我的逻辑出现了问题,这个函数的动作应该是这样的:单击一下该按钮就是先连接数据库,然后就打开记录集,游标后移到一条记录就不再移动了.看一下代码吧:
void CCuserInfDlg::OnNextPIC()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=testdb.mdb",
"","",adModeUnknown);
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
CString strSQL;
strSQL.Format("select BeforePic,DateTime from UserPictrue where USerNAme='%s'",m_userid);
_variant_t vt(strSQL);
m_pRecordset->Open(vt,_variant_t((IDispatch*)m_pConnection)
,adOpenDynamic,adLockOptimistic,adCmdText);
try
{
m_pRecordset->MoveNext();
long nSize = m_pRecordset->GetFields()->GetItem("BeforePic")->ActualSize;
if(nSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("BeforePic")->GetChunk(nSize);
GetDlgItem(IDC_EDIT1)->SetWindowText((_bstr_t)m_pRecordset->GetCollect("DateTime"));
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(BYTE *pBuffer = new BYTE [nSize+1]) //分配必要的存储空间
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(pBuffer,pBuf,nSize);
SafeArrayUnaccessData (varBLOB.parray);
m_Pic.LoadPictureData(pBuffer, nSize);
delete [] pBuffer;
pBuf=0;
CClientDC dc(this);
m_Pic.UpdateSizeOnDC(&dc); // Get Picture Dimentions In Pixels
m_Pic.Show(&dc, CRect(180,400,180+m_Pic.m_Width,400+m_Pic.m_Height) );
}
}
}
}
catch (_com_error e)
{
}
}
//记录集先打开,比如在按下浏览按钮后就打开记录集
//在结束浏览后关闭记录集
OnButtonNext()
{
try
{
m_pRS->MoveNext();
DrawPicture();
}
Catch(_com_error )
{
}
}