//'***************************************************************************************
//'函数:将数据库的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. Hadoop问题:java.net.SocketException: Network is unreachable

    问题描述:Failed on local exception: java.net.SocketException: Network is unreachable; Host Details : loc ...

  2. MyBatis-CURD

    一.接口方法 /** * 删除.修改.添加操作都可以返回三种类型 * Integer.Long.Boolean */ public interface MyUserMapper { public My ...

  3. vscode 配置踩坑记

    vscode-easy-less 遇到问题最好的解决方式是看官网文档,切记!!! 在web开发当中,经常会写less然后编译成css,当然在VS Code当中也有这样的插件(EasyLess), 但是 ...

  4. lasticsearch最佳实践之分片使用优化

    一.遇到的问题 与大多数分布式系统一样,Elasticsearch按照一定的Hash规则把用户数据切分成多个分片,然后打散到不同机器进行存储,从而实现大规模数据的分布式存储. cluster.png ...

  5. PHP7 学习笔记(十五)Repository 模式实现业务逻辑和数据访问的分离

    参考: 1.http://laravelacademy.org/post/3063.html

  6. linux常用命令说明

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

  7. 056、macvlan网络结构分析(2019-03-25 周一)

    参考https://www.cnblogs.com/CloudMan6/p/7383919.html   macvlan不依赖linux bridge   brctl show 可以确认没有创建新的b ...

  8. java8 新特性 Optional容器类

    public class Godness { private String name; public Godness() { } public Godness(String name) { this. ...

  9. MySQL相关信息之数据库操作(三)

    1.创建数据库 CREATE  {DATABASE  |  SCHEMA}  [IF NOT EXISTS]  DB_NAME [DEFAULT]  CHARACTER SET [=] charset ...

  10. MVC下 Area和Web同名的Controller问题

    错误如下图: 解决方案: 1:Area下的XXXAreaRegistration 添加:new string[] { "xxx.Areas.xxx.Controllers" } 2 ...