Cfiledialog种来实现选中多个图像文件并将其保存到sql数据库出错
Cfiledialog类来实现选中多个图像文件并将其保存到sql数据库出错
大家好,在VC++6.0中,我想实现的是:使用我在使用Cfiledialog类来实现选中多个图像文件并将其保存到sql数据库中,Cfile类的read函数时碰到问题;当选中一个文件时,存储到了数据库,但当我用循环时,保存多个文件时报错。
Cpicrecord pSet;
if(pSet.Open(CRecordset::dynaset, NULL))
MessageBox("打开成功");
CFileDialog filedlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | O FN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT );
CString path;
if(filedlg.DoModal()==IDOK)
{
path=filedlg.GetPathName();
CFile file;
CFileStatus filestatus;
file.Open(path,CFile::modeRead);
file.GetStatus(filestatus);
pSet->AddNew();
pSet->m_pic.m_dwDataLength=filestatus.m_size;
HGLOBAL hGlobal = GlobalAlloc(GPTR,filestatus.m_size);
pSet->m_pic.m_hData = GlobalLock(hGlobal);
file.ReadHuge(pSet->m_pic.m_hData,filestatus.m_size);
pSet->m_id=_T("1");
pSet->SetFieldDirty(NULL);
pSet->SetFieldNull(NULL,FALSE);
pSet->Update();
GlobalUnlock(hGlobal);
}
这上面的是存储一张图片到数据库成功了,但我改成下面的代码后如下:
Cpicrecord pSet;
if(pSet.Open(CRecordset::dynaset, NULL))
MessageBox("打开成功");
CFileDialog filedlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT );
CString path;
int count=0;
if(filedlg.DoModal()==IDOK)
{
POSITION pos = filedlg.GetStartPosition();
path=filedlg.GetPathName();
while (pos != NULL)
{
CFile file;
CFileStatus filestatus;
file.Open(path,CFile::modeRead);
file.GetStatus(filestatus);
pSet.AddNew();
pSet.m_pic.m_dwDataLength=filestatus.m_size;
HGLOBAL hGlobal = GlobalAlloc(GPTR,filestatus.m_size);
pSet.m_pic.m_hData = GlobalLock(hGlobal);
file.ReadHuge(pSet.m_pic.m_hData,filestatus.m_size);
pSet.m_id=_T("count");
pSet.SetFieldDirty(NULL);
pSet.SetFieldNull(NULL,FALSE);
pSet.Update();
GlobalUnlock(hGlobal);
path = filedlg.GetNextPathName(pos);
count ++;
}
}
想实现存储多张图片到数据库,编译连接没问题,就是运行时出错了。麻烦帮忙解决一下
------解决方案--------------------
pSet.m_id=_T("count");
写错了吧
大家好,在VC++6.0中,我想实现的是:使用我在使用Cfiledialog类来实现选中多个图像文件并将其保存到sql数据库中,Cfile类的read函数时碰到问题;当选中一个文件时,存储到了数据库,但当我用循环时,保存多个文件时报错。
Cpicrecord pSet;
if(pSet.Open(CRecordset::dynaset, NULL))
MessageBox("打开成功");
CFileDialog filedlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | O FN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT );
CString path;
if(filedlg.DoModal()==IDOK)
{
path=filedlg.GetPathName();
CFile file;
CFileStatus filestatus;
file.Open(path,CFile::modeRead);
file.GetStatus(filestatus);
pSet->AddNew();
pSet->m_pic.m_dwDataLength=filestatus.m_size;
HGLOBAL hGlobal = GlobalAlloc(GPTR,filestatus.m_size);
pSet->m_pic.m_hData = GlobalLock(hGlobal);
file.ReadHuge(pSet->m_pic.m_hData,filestatus.m_size);
pSet->m_id=_T("1");
pSet->SetFieldDirty(NULL);
pSet->SetFieldNull(NULL,FALSE);
pSet->Update();
GlobalUnlock(hGlobal);
}
这上面的是存储一张图片到数据库成功了,但我改成下面的代码后如下:
Cpicrecord pSet;
if(pSet.Open(CRecordset::dynaset, NULL))
MessageBox("打开成功");
CFileDialog filedlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT );
CString path;
int count=0;
if(filedlg.DoModal()==IDOK)
{
POSITION pos = filedlg.GetStartPosition();
path=filedlg.GetPathName();
while (pos != NULL)
{
CFile file;
CFileStatus filestatus;
file.Open(path,CFile::modeRead);
file.GetStatus(filestatus);
pSet.AddNew();
pSet.m_pic.m_dwDataLength=filestatus.m_size;
HGLOBAL hGlobal = GlobalAlloc(GPTR,filestatus.m_size);
pSet.m_pic.m_hData = GlobalLock(hGlobal);
file.ReadHuge(pSet.m_pic.m_hData,filestatus.m_size);
pSet.m_id=_T("count");
pSet.SetFieldDirty(NULL);
pSet.SetFieldNull(NULL,FALSE);
pSet.Update();
GlobalUnlock(hGlobal);
path = filedlg.GetNextPathName(pos);
count ++;
}
}
想实现存储多张图片到数据库,编译连接没问题,就是运行时出错了。麻烦帮忙解决一下
------解决方案--------------------
pSet.m_id=_T("count");
写错了吧