OleContainer操作Excel以二进制方式读写数据库

需求源头:
OleContainer操作Excel,想把Excel以二进制方式存入数据库,并且以二进制方式读取
存入流:
Procedure SaveToStream(ADOTable1: TAdoTable)
var
  vStream: TMemoryStream;
begin
 try
   try
    vStream := TMemoryStream.Create;
    vStream.Clear;
    OleContainer1.SaveToStream(vStream);
    vStream.Position := 0;
    ADOTable1.Append;
    TBlobField(ADOTable1.FieldByName("BlobField")).LoadFromStream(vStream);
    ADOTable1.Post;  
   finally
      FreeAndNil(vStream);
   end;
  except
    exit;
  end;
end;
读取流:
procedure LoadFromStream(ADOTable1: TAdoTable)
var
  //注意:这里要用TADOBlobStream,如果用TMemoryStream等流类,则会出现错误  
  //OleContainer的二进制流格式和Access的二进制流格式不同
  //TADOBlobStream是专门用来Access的流转化的,TADOBlobStream继承自TMemoryStream
  vStream: TADOBlobStream;
begin
  try    
    vStream := TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName("BlobField")), bmread);
    if (OleContainer1.State = osOpen) or (OleContainer1.State = osUIActive) then
    begin
      OleContainer1.DestroyObject;
    end;
    vStream.Position := 0;
    Olecontainer1.LoadFromStream(vStream);
  except
  end;
end;
问题总结:
注意流格式的问题。
注:附件里有我的一个小工具,用来帮助自己平时操作Excel在Access中的读取。http://www.delphibbs.com/keylife/iblog_show.asp?xid=21941

http://blog.csdn.net/shuaihj/article/details/725534

时间: 2024-10-23 10:47:56

OleContainer操作Excel以二进制方式读写数据库的相关文章

C++结构体对象数组的二进制方式读写

以一个学生信息的结构体数组为例. #include<iostream>#include<string>#include<fstream>using namespace std;struct Student{public: int n;//学号 char name[20];//姓名 int age;//年龄};int main(){ const int N=3; Student a[N]; //下面进行输入每个学生信息for(int i=0;i<N;i++){ ci

ASP.Net将图片以二进制方式存入数据库,并读取

把图片转换成二进制--把二进制转换成图片 private void button1_Click(object sender, EventArgs e) { string path = this.textBox1.Text; byte[] imgBytesIn = SaveImage(path); ShowImgByByte(imgBytesIn); //Parameters.Add("@Photo", SqlDbType.Binary).Value = imgBytesIn; } //

以二进制方式读写jpg文件

long _filesize(FILE *stream) { long curpos, length; curpos = ftell(stream); fseek(stream, 0L, SEEK_END); length = ftell(stream); fseek(stream, curpos, SEEK_SET); return length; } char* readBinFile(char* name,int& nSize) { FILE *fp; if ((fp=fopen(name

MFC 操作excel 读写 感悟

在项目实现中,要操作excel 对表格进行读写,或者是将listcontrol控件里面的内容导入到表格中,为此在网上找了很多代码作为参考,但是都没有达到自己想要的效果! 在此,将自己在项目开发中遇到的问题和解决方法一一列出,希望能帮到其他人.    问题1   出现range等类的重定义,报错100多项 出错原因 主要是对于excel类库的多次添加导致,可以将类库删除后,重新添加.注意:在添加类中,应该添加自己需要的类,最好不要将类全部添加,否则程序运行会很慢. 同时,对于excel类库中类的操

C#操作Excel(创建、打开、读写、保存)几种方法的总结

在.NET开发中,不管是web程序还是桌面软件(尤其是涉及数据库操作的MIS系统等),常常需操作Excel,如导出数据到Excel,读取Excel中数据到程序中等.总结起来,其操作不外乎创建.打开.读写.保存(后退出/释放),而其操作方法,则主要有:通过ADO.NET数据连接方式.通过Excel对象模型"自动化"操作.使用中间数据格式如文本文件,XML等间接操作Excel.使用第三方控件(主要用于向Excel传输数据)等.在开始讨论之前,先把相关的一些网上资源罗列一下,其中大部分来自M

POI操作Excel详解,HSSF和XSSF两种方式

HSSF方式: package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.

VC——使用DLL的方式操作excel

写工具软件,一直和excel打交道,之前一直采用excel.cpp.excel.h直接添加到工程的方式来读写excel,现在由于要对代码进行单元测试,excel.cpp和excel.h文件中竟然有上万行代码,会引起很大的测试量,因此打算采用dll调用的方式来读写excel. 1. 首先从本机安装的office软件中导出DLL文件. 在程序的的stdafx.h中增加以下内容.文件路径修改为本机安装office的路径 #import "C:\\Program Files (x86)\\Common

Python操作excel的几种方式--xlrd、xlwt、openpyxl

openpyxl xlrd xlwt 在处理excel数据时发现了xlwt的局限性–不能写入超过65535行.256列的数据(因为它只支持Excel 2003及之前的版本,在这些版本的Excel中行数和列数有此限制),这对于实际应用还是不够的.为此经过一番寻找发现了一个支持07/10/13版本Excel的openpyxl,虽然功能很强大,但是操作起来感觉没有xlwt方便.下面分别说下几个模块的常用操作. xlrd xlrd是用来从Excel中读写数据的,但我平常只用它进行读操作,写操作会遇到些问

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与