`
kimfly
  • 浏览: 47210 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

读取OLE字段

阅读更多

前一阵由于工作中需要,从ORACLE数据库中读取包含ole信息的字段。

access中我们存储图片信息所用到的类型是OLE.要显示图片我们需要使用stream,这就需要知道唯一标识图像的文件头.
所有的图片文件(格式)都有用来唯一的标识图像的文件头。JPG图片文件以所谓的SOI标记开始,该标记的十六进制值是$FFD8
MS Access
把连接的OLE对象的路径作为对象定义的一部分存储在OLE对象字段中。因为OLE对象的存储定义没有被文档化(!?这直接来自于MS),所以没有办法知道真正的图像数据被写之前能得到什么。

分两个部分考虑这个问题。第一:我们需要找到'FFD8'并从那儿开始读取图像。第二:'FFD8'不可能总在文件的同一个位置。结论:我们需要一个函数,返回Access数据库中存储为OLE对象的JPG文件的SOI标记的位置。<o:p></o:p>

<o:p> </o:p>

Private Sub Command2_Click()

    Dim conn As New ADODB.Connection

    Dim rs As New ADODB.Recordset

    conn.ConnectionString = "DSN=photo;uid=sa;pwd=;"

    conn.ConnectionTimeout = 30

    conn.Open

    rs.Open "select * from t_Photo order by pid", conn, adOpenStatic, adLockReadOnly, adCmdText

    Dim index As String

    For t = 0 To Val(rs.RecordCount) - 1

    If (t > 2) Then

    index = Trim(rs.Fields("pid").Value)

   

    Dim size, i, j

    '要输出字段的总字节数

    size = rs("Picture1").ActualSize

    '循环找到 SOI marker 的位置

    For i = 1 To size

    If AscB(MidB(rs("Picture1"), i, 1)) = &HFF And AscB(MidB(rs("Picture1"), i + 1, 1)) = &HD8 Then

    Exit For

    End If

    Next

 

    Debug.Print "i==========" & i

   

   

    Dim picsize As Long

        picsize = rs("Picture1").ActualSize

        Dim iStm As New ADODB.Stream

       

    Set iStm = New ADODB.Stream

       With iStm

               .Mode = adModeReadWrite

               .Type = adTypeBinary

               .Open

               rs("Picture1").GetChunk (i - 1)

               .Write rs("Picture1").GetChunk(picsize - i + 1)

       End With

       iStm.SaveToFile App.Path & "/cc" & t & ".jpg"

       Picture1.Picture = LoadPicture(App.Path & "/cc" & t & ".jpg")

       

    End If

    rs.MoveNext

   

    Combo1.AddItem index

    Next t

    rs.Close

   

<o:p> </o:p>

End Sub

<o:p> 上面是段vb程序,我已经使用过是正确的。可以获取图片ole标记位的地址。然后在java里直接指定到该处进行获取就可以取出图片了。</o:p>

try{

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        Connection con = DriverManager.getConnection("jdbc:odbc:photo","sa","");

        Statement sql = con.createStatement(); //创建Statement对象

        ResultSet rs = sql.executeQuery("select * from t_photo");

        while (rs.next()) //输出被查询的情况

        {

            String pid = rs.getString("pid");

            byte[] pic = rs.getBytes("picture1");

            FileOutputStream fo = new FileOutputStream("c:\\2.bmp");

            //FileInputStream fi = rs.getCharacterStream("picture1");

            int start = 166;

            for(int i=start; i

                fo.write(pic[i]);

            }

            fo.close();

            System.out.println(pid);

        }

        }catch(Exception e){

            System.out.println(e);

        }

分享到:
评论

相关推荐

    Delphi环境下Access数据库中OLE对象的读写操作(论文)

    分析了Access数据库OLE 对象的特点,并给 出了在 Delphi环境下实际实现OLE对 象的保存\打 开与显示的处理方法(A ccess 数 据库 中 O LE 对象 的读 写操 作 许 俊 论文)

    OLEDB读取Excel、csv出现字符串截断、丢失原因及其解决方案

    汽车产业链平台的开发使用的开发工具为VS.NET,使用的语言是C#,在开发的过程中发现使用Microsoft.Jet.OLEDB.4.0读取数据会出现当某一字段内分别含有文本和数字的混合数据时,某一类型的数据会产生丢失。本文就对此...

    VC++存取图像字段

     在利用VC 进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取出来并显示,图像数据与文本字段不同,它是作为OLE 字段在数据库中存储,通过数据集对象的成员变量自动交换得到的图像数据,...

    应用VB进行OLE对象数据的自动排版 (2001年)

    应用Visual Basic为平台进行数据库的开发,主要针对Microsoft Access中“OLE对象”字段类型的数据进行显示和输出的控制,利用OLE自动化技术实现了在VB环境中直接调用Microsoft Word应用程序对试卷信息的自动化排版。

    vc+odbc+access如何对数据库中的位图读取和存入

    在用Visual C++编写应用程序时,...VC存取这些大对象数据有众多方法,如OLE、ActiveX等,事实上VC的MFC提供了一个很方便的实现方法,即利用MFC提供的CLongBinary类可以方便地实现存取BLOB字段。下面笔者将举例说明。

    C#程序连接数据库及读取数据库中字段的简单方法总结

    Provider=Microsoft.Jet.OleDb.4.0;"; //数据库连接字符串 OleDbConnection conn = new OleDbConnection(connStr); 连接Oracle数据库 //数据库和客户端在同一台机器上 using System.Data.OracleClient; string ...

    Excel读写类(无需office环境)

    一般DotNet实用Oledb读取Excel的时候,经常出现数据类型错误,导致无效结果。比如Excel中编码列,编码:00001225 读取到Datagridview中可能变成 1224数字类型了,此Excel类不会出现,能正常读取全部数据。 本Excel...

    DBHelper(1.0.1.6)

    里面已经打包好Sql数据库操作类,和Oledb的操作类,只需要引用这个dll后,在webconfig(或appconfig)的connectionstrings字段或者appsetting字段里配置一个名为ConnString的节点,dll就会自动读取,或者在global的...

    C#在 ACCESS 表中自动编号复位及获取当前最大值SQL命令

    C#在 ACCESS 表中自动编号复位及获取当前最大值SQL命令,适于C#. 文本源码,其中执行命令的函数用伪语言表示

    DBHelper(C#, SqlHelper + OledbHelper)

    里面已经打包好Sql数据库操作类,和Oledb的操作类,只需要引用这个dll后,在webconfig(或appconfig)的connectionstrings字段或者appsetting字段里配置一个名为ConnString的节点,dll就会自动读取,或者在global的...

    NetAccData.ocx Access数据库网络读写支持控件(C/S模式)

    NetAccData控件系使用VB6开发,主要原理为Winsock...与其他同类型控件相比较,该控件功能更加丰富实用,除具备对MDB数据库的OLE对象字段(如照片等长二进制数据)的读写功能之外,还支持向服务器端直接上传文件等操作。

    使用C#开发的Sqlite数据库创建、操作的源码项目工程

    这是一个使用C#开发的Sqlite数据库创建、操作的源码工程,关于Sqlite的所有...⑦还包含了关于sqlite内存数据库的帮助类和完整数据库、表创建、数据的增、删、查、改、获取数据库所有表和表包含的所有字段的使用示例。

    文件资源管理器/加密资源库/DoSeenPic/防复制

    //使用时通过Link类引用连接lib.dll(如果设置了密码读取时先Link.DataLink.PassWord="密码"),通过封装的方法或直接读字段FileData读出。 //直接当数据库连接,"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + ...

    布扣数据字典生成器 V1.0

    1、SQL Server:针对SQL Server的数据反射,该方式可以读取数据库内表(字段)的描述,如果你用的是SQL Server建议采用该方式 2、OLE DB: 支持OLE DB方式连接大部份数据库 注意:1、请先解压缩后运行,否则可能出错 2...

    C# 文件保存到数据库中或者从数据库中读取文件

    在SQL Server中该字段的数据类型是Image,在Access中该字段的数据类型是OLE对象。 代码如下://保存文件到SQL Server数据库中 FileInfo fi=new FileInfo(fileName); FileStream fs=fi.OpenRead(); byte[] bytes=new ...

    在PowerBuilder中操作BLOB数据的技巧

    OLE 控制对象,通过它可以将指定的文件内容显示成相应的对象(如 BMP 图片),双击它就可以激活相应的 OLE 服务器应用程序,来编辑修改对象的内容,同时也可以读取对象的数据内容(利用 OLE 控件的 ObjectData 属性...

    VB.net2010让Access数据表添加记录时实现自动编号

    这里使用 Microsoft.Jet.OLEDB.4.0 作为 Provider,Data Source 指定了 Access 数据库的路径。 二、执行 SQL 查询 在连接到 Access 数据库后,需要执行 SQL 查询来获取最大编号。例如: ```vbnet Dim querystring ...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    大家可以看到我们首先是连接数据库然后打开,对于select的命令,我们申明一个OleDbCommand来执行之,然后再申明一个OleDbDataReader,来读取数据,用的是ExecuteReader(),objDataReader.Read()就开始读取了,在输出...

    NCoder代码生成器V1.3.0.40135(文件版本1.2007.5.29)

    这是一个用于读取数据库表结构然后生成代码的工具。 &lt;br/&gt;具有以下特点: 1,基于模版生成代码。支持循环模版、条件模版,模版标签丰富而不复杂,使用者可轻易写出自己的模版。 2,理论上支持任意数据库,...

    VC++6.0 通过ADO连接Access

    // 读取数据表 while(!rst-&gt;rsEOF) { ((CListBox*)GetDlgItem(IDC_LIST1))-&gt;AddString((_bstr_t)rst-&gt;GetCollect("姓名")); // 查询"姓名"字段 rst-&gt;MoveNext(); } } catch(_com_error e) { CString ...

Global site tag (gtag.js) - Google Analytics