//'***************************************************************************************
//'函数:将数据库的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. weblogic创建控制台启动脚本以及创建服务器

    一.创建控制台脚本 二.创建认证文件 通过上面创建的脚本进行启动的时候,会因为密码问题导致起不来,因为在startWebLogic.sh文件中,没有配置用户名和密码.而且通过上面创建的脚本,启动的时候 ...

  2. 【.net】“Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。

    #事故现场: “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项. #事故原因: 安装的Newtonsoft.Json版本为11.0.2,版本过高,与Micro ...

  3. 【SQL】SqlServer中Group By后,字符串合并

    参考: 1.SQL查询语句 group by后, 字符串合并 2.sql for xml path用法 #需求: 合并列值 表结构,数据如下: id value ----- ------ aa bb ...

  4. 理解maven命令package、install、deploy的联系与区别

    我们在用maven构建java项目时,最常用的打包命令有mvn package.mvn install.deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命 ...

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

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

  6. Set实现数组去重

    ES6 提供了新的数据结构 Set 它类似于数组,但是成员的值都是唯一的,没有重复的值 (set本身是一个构造函数,用来生成 Set 数据结构)   使用Set实现数组去重要简单很多.   第一种数组 ...

  7. [Android] Android Studio 修改Gradle使用国内源

    Gradle 仓库中心的项目,下载速度又比较慢, 网上查询了下, 使用阿里云的Maven镜像仓库 在 project 的 build.gradle中修改如下: allprojects { reposi ...

  8. List<string>序列化与反序列化一个小坑

    Newtonsoft序列化与反序列化有两个重载方法,带<T>和不带<T>的 如果将一个List<String>序列化为jsonStr后,再反序列化,会变成JArra ...

  9. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Assignment(Optimization Methods)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. 请不要ctrl+c/ctrl+v作业. Optimization Methods Until now, you've always u ...

  10. PHP7语法知识(二):流程控制语句、函数、字符串、数组

    流程控制: 一.条件控制语句 1.if条件控制语句: 2.switch分支语句: 二.循环控制语句 1.while循环: 2.do while循环: 3.for循环: 4.foreach循环: 三.跳 ...