zoukankan      html  css  js  c++  java
  • 数据库的OLE字段写入长二进制文件

    //'***************************************************************************************
    //'函数:将数据库的OLE字段写入长二进制文件
    //'***************************************************************************************
    //bool THsPart_clsPartCommonDB::PrintFieldToFile(TheFiled As ADODB.Field, ByVal strSaveName As String, _
    // Optional IsAppend As Boolean)
    bool THsPart_clsPartEntityDB::PrintFieldToFile(_RecordsetPtr &myRcdPtr,_variant_t index ,CString strSaveName /*ADODB.Fields TheFiled, CString strSaveName ,*Optional IsAppend As Boolean*/)
    {
        //Dim MyRc As Recordset;
     VARIANT varBLOB;
     CFile myfile;
     bool bReturn = false;
        try
     {
       
     
      //'定义各种参数
      const int conChunkSize = 16384;
      int Chunks ;
      byte *Chunk = NULL; //Chunk() As Byte,
      //int FileNumber;
      long FragMent ,lngTotalSize;
      // 定义各种参数
      myfile.Open(strSaveName,CFile::modeCreate|CFile::modeReadWrite|CFile::typeBinary);
      /*FileNumber = FreeFile;
      Open strSaveName For Binary Access Write As #FileNumber;*/
     
      //将字段内的长二进制文件导出的文件
      lngTotalSize = myRcdPtr->Fields->GetItem(index)->ActualSize; //lngTotalSize = TheFiled.ActualSize;
      Chunks = lngTotalSize /conChunkSize;
      FragMent = lngTotalSize % conChunkSize;
      Chunk = (byte *)GlobalAlloc(GMEM_FIXED,FragMent); //ReDim Chunk(FragMent);
      varBLOB= myRcdPtr->Fields->GetItem(index)->GetChunk(FragMent); //Chunk() = TheFiled.GetChunk(FragMent);
      SafeArrayAccessData(varBLOB.parray,(void **)&Chunk);
      LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)Chunk);
      myfile.Write(buffer,FragMent);
      GlobalUnlock((HGLOBAL)Chunk);
      SafeArrayUnaccessData (varBLOB.parray);
      int counter;
      Chunk = (byte *)GlobalAlloc(GMEM_FIXED,conChunkSize);
      for(counter=1;counter<= Chunks;counter++) //For counter = 1 To Chunks
      {
       //Chunk() = TheFiled.GetChunk(conChunkSize);
       varBLOB= myRcdPtr->Fields->GetItem(index)->GetChunk(conChunkSize);
       SafeArrayAccessData(varBLOB.parray,(void **)&Chunk);
       buffer = (LPSTR)GlobalLock((HGLOBAL)Chunk);
       myfile.Write(Chunk,FragMent);
       SafeArrayUnaccessData (varBLOB.parray);
      }
      GlobalUnlock((HGLOBAL)Chunk);
      Chunk = NULL;
      buffer = NULL;
      ////////////////////////////////////////////////
     
      ////////////////////////////
     
      //////////
      //Close #FileNumber
      myfile.Close();
     
      bReturn = true;
      return bReturn;
     }
     catch(...)
     {
     
      AfxMessageBox(_T("PrintFieldToFile wrong!"));
      //Close #FileNumber;
      myfile.Close();
     }
     return bReturn;
    }
  • 相关阅读:
    flask 源码专题(七):threading.local和高级
    flask 源码专题(六):session处理机制
    flask 源码专题(五):SqlAlchemy 中操作数据库时session和scoped_session的区别
    flask 源码专题(四):wtforms Form实例化流程以及csrf验证
    flask 源码专题(三):请求上下文和应用上下文入栈与出栈
    python 追踪函数调用
    flask 源码专题(一):app.run()的背后
    flask 源码专题(二):请求上下文与全文上下文
    边框间距 | border-spacing (Miscellaneous Level 2)
    边框样式属性 | border-top-style (Backgrounds & Borders)
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4243327.html
Copyright © 2011-2022 走看看