//'***************************************************************************************
//'函数:将数据库的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;
}

数据库的OLE字段写入长二进制文件的更多相关文章

  1. c# 操作access数据库image ole字段

    using System; using System.Data; using System.Configuration; using System.Web; using System.Data.Ole ...

  2. NLog自定义字段写入数据库表,示例

    //自定义字段写入NLog日志 private void saveNLog(InvokeLogModel model) { LogEventInfo ei = new LogEventInfo(); ...

  3. 通过OCI 处理 Oracle 10g 中处理Clob大字段写入

    Oracle数据库中, 通过存储过程写入Clob字段 , 当数据大于4k时, 报错 ORA-01460: 转换请求无法实施或不合理 经过排查, 数据Bind方式不对, 不能采用字符串的Bind方式 原 ...

  4. 程序处理数据库中值字段值为null的查询显示

    1.如果你做了一个简单的注册界面,需要用户进行注册,但有些项是不必要填的,当用户完成注册时,数据库表中的相应字段的值会写入null,但如何将查询的字段的值null显示出来? 2.首先我们学习一下如何向 ...

  5. python操作MySQL数据库并将数据写入excel

    #!/usr/bin/python# -*- coding:utf-8 -*-'''方法:通过pymsql模块连接mysql数据库,然后通过游标cursor查询SQL语句将结果存储在Excel文件中, ...

  6. dataTable写入数据库(大数据写入)

    例1: connectionStr,链接字符串dataTableName, 数据库中对应表名sourceDataTable DataTable 要写入数据库的DataTable字段要和表一致 publ ...

  7. Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法

    Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法 一丶ORM常用字段 ...

  8. 将Oracle数据库中的数据写入Excel

    将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

  9. Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

    Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子   时间:2012-11-20 17:54:02   Java 通过JDBC查询数据库表结构(字段名称,类型,长 ...

随机推荐

  1. powershell 定时删除脚本

    powershell  定时删除脚本 $today=Get-Date #"今天是:$today" #昨天 #"昨天是:$($today.AddDays(-1))" ...

  2. 2018牛客网暑期ACM多校训练营(第一场)A Monotonic Matrix(LGV)

    题意 分析 考虑01和12的分界线是(n, 0)到(0,m)的两条不相交(可重合)路径分界线以及分界线以上的点是一种,分界线下是一种平移其中一条变成(n-1, -1)到(-1,m-1); 此时起点为{ ...

  3. HDU 6345(子串查询 暴力)

    题意是每组给定一个字符串,在有限查询次数内输出所要查询区间的字典序最小的子串个数. 字典序最小的子串,就是所查询区间中字典序最小的单个字符,问题就转化成了求一段区间内字典序最小的字符个数. 开始时盲目 ...

  4. 使用sort函数进行排序

    介绍 C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list.set.vector.m ...

  5. linux常用命令说明

    1. 基础快捷键使用 ctrl + c:停止进程 ctrl + l:清屏 ctrl + r:搜索历史命令 ctrl + q:退出 2.常用目录或文件夹命令 说明:安装linux时,创建一个itcast ...

  6. Tornado的异步非阻塞

    阻塞和非阻塞Web框架 只有Tornado和Node.js是异步非阻塞的,其他所有的web框架都是阻塞式的. Tornado阻塞和非阻塞两种模式都支持. 阻塞式: 代表:Django.Flask.To ...

  7. C#编程思想(持续更新)

    1.将约束的参数先用变量保存,一定不变的设为const,在使用时不直接填入数字而是使用这些变量,这样可以很大程度上方便后续参数的修改 2.字段先用属性封装后,所有的调用都使用属性而不是字段 3.要返回 ...

  8. ubuntu没有/usr/include/sys目录

    实际上不是没有sys目录,只是系统给换路径了 32位系统:/usr/incude/i386-linux-gnu/sys 64位系统:/usr/include/x86_64-linux-gnu/sys/ ...

  9. 【python小练】0011题

    第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights. #word.tx ...

  10. js获取网页面的高度和宽度

    网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth ...