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;
    }
  • 相关阅读:
    UIPasteboard 粘贴板
    UIViewController没有随着设备一起旋转的原因
    UIButton 应用选择状态(附:UIButton 常用状态)
    WebService 中参数为枚举时引发的血案
    设计模式(1)之面向对象设计原则 阿正
    2012年年终总结 阿正
    生活工作如登山 阿正
    感谢我的技术总监 阿正
    尽孝要尽早 阿正
    我老了吗?不 你依然年轻 阿正
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4243327.html
Copyright © 2011-2022 走看看