在做图像数据存储到sql server 中时,使用了 ADO流,保存成功之后,立刻查询,其中的机制是将查询到的信息保存到由查询时间命名的根目录下的文件(也是采用ADO流来完成的),当程序运行到savetofile时,出错了,出错问题是vector deleting destructor,同时路径下的文件夹也没有建立成功,但是,如果一开始,不进行保存数据,而直接查询时,是成功运行的,我自认为是某个指针没关闭或者delete掉,但是,具体不清楚哪个东西,急求高手指点。

解决方案 »

  1.   

    我自认为是某个指针没关闭或者delete掉,但是,具体不清楚哪个东西
    ===我也这么认为。不过你藏着代码不贴出来,你当大家是神仙啊。
      

  2.   

    void CImport::OnButtonImport() 
    {
    // TODO: Add your control notification handler code here
    CFile NewFile;
    CFileException e;
    CString m_FileName;
    if(m_Browse=="")
    {
    MessageBox("保存失败,请选择所需文件!");
    return;
    }
    if(NewFile.Open(mPath,CFile::modeRead | CFile::typeBinary,&e))//打开指定的jpg文件
    {
    ADOConn m_Adoconn;
    m_Adoconn.OnInitADOConn();

    //设置insert语句
    m_FileName=NewFile.GetFileTitle();//获得文件名
    NewFile.Close();//关闭文件 //获得当地时间
    COleDateTime datetime=COleDateTime::GetCurrentTime();
    CString dt=datetime.Format("%Y-%m-%d %H:%M:%S");
    CString fname=datetime.Format("%Y%m%d%H%M%S");
    _bstr_t vSQL;
    vSQL="insert into image(image_name,image_time) values ('"+fname+"','"+dt+"')";
    //执行insert语句
    m_Adoconn.ExecuteSQL(vSQL); _RecordsetPtr m_pRs;
    vSQL="select * from image where image_name='" +fname +"'";
    m_pRs=m_Adoconn.GetRecordSet(vSQL);
    //捕捉异常
    try{
    //CString mPath="E:\\壁纸\\1.jpg";
    _bstr_t m_Path=_bstr_t(mPath.GetBuffer(mPath.GetLength()));
    mPath.ReleaseBuffer();
    _StreamPtr pStm;
    pStm.CreateInstance("ADODB.Stream");
    variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    pStm->PutType(adTypeBinary);
    pStm->Open(varOptional,adModeUnknown,adOpenStreamUnspecified,_bstr_t(),_bstr_t());
    pStm->LoadFromFile(m_Path);//读入文件
    variant_t varBLOB=pStm->Read(adReadAll);
    m_pRs->GetFields()->GetItem("image_data")->Value=varBLOB;//保存到数据集对象
    pStm->Close(); 
    }
    catch (_com_error &e)
    {
    }
    //更新数据库
    m_pRs->Update();
    //断开数据库
    m_Adoconn.ExitConnect();
    }
    Refresh_Data();
    }//这个是保存下面是查询了
    try{
    int x=0,y=20;
    while(!m_pRs->adoEOF)
    {
    _StreamPtr ptm;
    ptm.CreateInstance("ADODB.Stream");
    _variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    ptm->PutType(adTypeBinary);//类型为二进制
    ptm->Open(varOptional,adModeUnknown,adOpenStreamUnspecified,_bstr_t(),_bstr_t());
    ptm->Write(_variant_t(m_pRs->GetFields()->GetItem("图像数据")->Value));
    CString fname = m_pRs->GetFields()->GetItem("图像名")->Value.bstrVal;
    long lDataSize = m_pRs->GetFields()->GetItem("图像数据")->ActualSize;
    CString path="picture/";//相对起始路径
    COleDateTime datetime=COleDateTime::GetCurrentTime();//获得系统时间供查询文件夹创建
    CString fptime=datetime.Format("%Y%m%d%H%M%S");
    CString fpdir=path+fptime+"/";
    m_fpdir=fpdir;
    CreateDirectory(fpdir,NULL);
    CString ppname=fpdir+fname+".jpg";
    _bstr_t fpname=_bstr_t(ppname);
    ptm->SaveToFile(fpname,adSaveCreateOverWrite);
    ptm->Close();
    m_pRs->MoveNext();
    }
    }
    catch(_com_error &e)
    {
    AfxMessageBox("出错啦!");
    }
    //断开与数据库的连接
    m_adoconn.ExitConnect();
      

  3.   

    CString path="picture/";//相对起始路径 
    ==CString path = "picture\\";
    CString fpdir=path+fptime+"/"; 
    ==CString fpdir = path + fptime + "\\";