精华内容
下载资源
问答
  • 分析了Access数据库OLE 对象的特点,并给 出了在 Delphi环境下实际实现OLE对 象的保存\打 开与显示的处理方法(A ccess 数 据库 中 O LE 对象 的读 写操 作 许 俊 论文)
  • Access数据库中心OLE对象的巧妙插入
  • 在网上看了很多教程,VBA怎么把图片通过ACCESS数据库OLE对象传到数据库。结果全是其他语言写的。我今天用VBA 实现一下以下功能:代码前需引用 Microsoft Activex Data Objects x.x 库 1,把图片保存到ACCESS...

    在网上看了很多教程,VBA怎么把图片通过ACCESS数据库的OLE对象传到数据库。结果全是其他语言写的。我今天用VBA 实现一下以下功能:代码前需引用  Microsoft Activex Data Objects x.x 库

    1,把图片保存到ACCESS(通过OLE对象)

    Sub 保存图片到ACCESS数据库()
    '头像那列数据库类型为OLE对象
    Dim con As New ADODB.Connection '
    Dim command As New ADODB.command

    With con
    .Provider = "microsoft.ace.oledb.12.0"
    .ConnectionString = "d:\cs.accdb"
    .Open
    End With
    Dim b() As Byte
    Open "d:\b.jpg" For Binary As #1
     x = LOF(1)
     ReDim i(1 To x)
    Get #1, , b
    Close #1
    command.ActiveConnection = con
    command.CommandType = adCmdText
    command.CommandText = "insert into 表1(头像) values(@头像)"
    command.Parameters.Append command.CreateParameter("@头像", adBinary, , x, b)
    command.Execute
    con.Close
    Set con = Nothing
    End Sub
     

    2,把ACCESS数据库中的图片保存到本地硬盘。

    Sub 保存图片到本地()

    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim b() As Byte
    With con
    .Provider = "microsoft.ace.oledb.12.0"
    .ConnectionString = "d:\cs.accdb"
    .Open
    End With
    Set rs = con.Execute("select * from 表1 where id=7")
    b = rs.Fields("头像")
    Open "d:\头像.jpg" For Binary As #1
    Put #1, , b
    Close #1
    con.Close
    Set con = Nothing
    End Sub

    展开全文
  • ODBC方式操作ACCESS数据库OLE类型字段 在实际项目的过程中,往往需要在数据库中存储图片等文件。这篇博客主要介绍下怎么用c++语言和ACCESS数据库完成这项任务。包括两个部分:文件的存储、文件的读取。 此外,连接...

    ODBC方式操作ACCESS数据库OLE类型字段

    在实际项目的过程中,往往需要在数据库中存储图片等二进制数据。这篇博客主要介绍下怎么用c++语言和ACCESS数据库完成这项任务。包括两个部分:文件的存储、文件的读取。
    此外,连接数据库的方式有多种,包括:ADO、ODBC、OLE等。这篇博客只介绍ODBC方式。

    存储数据

    CFile file(filepath,CFile::modeRead);   //打开文件
    int len = file.GetLength();   //获取文件字节数
    HGLOBAL hm = ::GlobalAlloc(GMEM_MOVEABLE,len);  //分配len大小的全局空间,作为缓冲区
    LPVOID lp = ::GlobalLock(hm) ;  //这一步是必须的
    int n = file.Read(lp,len) ; // 将文件内容读取到缓冲区,返回的n表示读取的长度,n=len 那么就对了
    
    CDatabase dbase;  
    //  这里假设dbase已经正确连接数据库
    CRecordset cr(&dbase);
    SQLHSTMT hstmt = cr.m_hstmt;  //statement句柄
    SQLWCHAR * cmd = _T("insert into tbName (colName) values(?)")  //注1
    SQLRETURN  ret = SQLPrepare(htsmt, cmd, SQL_NTS); 
    SQLLEN sqllen = len;
    SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_BINARY,SQL_VARBINARY,len,0,lp,len,&sqllen);  //注2
    ret = SQLExecute(hstmt);   //执行SQL语句,完成存储操作,ret = 0,表示成功
    cr.close();
    dbase.close();
    ::GlobalUnLock(lp);
    ::GlobalFree(hm);
    

    注1:这个语句是具体的SQL语句,在这里是往colName字段插入我们的OLE类型数据(插入后在ACCESS中显示的是“长二进制数据”)。values中的“?”很重要,其实就是占位符的意思,告诉数据库引擎,这里是需要绑定参数的。
    注2:SQLBindParameter函数将缓冲区中的数据与SQL语句中需要的数据绑定,其实就是告诉数据库去哪读取需要的数据。该函数的原型是:

    SQLRETURN SQLBindParameter(
          SQLHSTMT        StatementHandle,     // statement句柄
          SQLUSMALLINT    ParameterNumber,    // 参数位于语句中的序号,最小为1
          SQLSMALLINT     InputOutputType,    // 入参/出参类型标识
          SQLSMALLINT     ValueType,          // 对应的C数据类型标识
          SQLSMALLINT     ParameterType,     // 对应的SQL数据类型标识
          SQLULEN         ColumnSize,          // 字段长度,其实就是ACCESS数据库中对应插入字段的长度
          SQLSMALLINT     DecimalDigits,       // 如果是浮点数,则对应字段精度,否则为0
          SQLPOINTER      ParameterValuePtr,   // 参数缓存区指针
          SQLLEN          BufferLength,        // 缓存区长度
          SQLLEN *        StrLen_or_IndPtr);   //对于非字符串,用于表示参数字节长度;对于字符串,可用SQL_NTS值。
    

    需要注意的是参数ValueType和ParameterType,需要对应起来,不然读取的时候会出现错读的现象。对于二进制数据,就可以使用SQL_C_BINARY和SQL_VARBINARY。
    还有就是ColumnSize参数。这个参数是表示数据库字段宽度:如果数据库中对应字段的整数型,那ColumnSize = 4;如果是浮点型,那么就是8;如果是字符,那么就是设置的字符长度(最大是255);在这里是OLE对象类型,这个类型在ACCESS数据库中没有长度设置(好像最大是一个G),所以我就用的存储所需的实际大小值。
    BufferLength和StrLen_or_IndPtr不要混淆,对于存储二进制数据,BufferLength表示参数缓冲区的大小,StrLen_or_IndPtr表示的是实际需要的参数大小;这两个是可以不一样的,因为缓冲区完全可以设置的比需要的大。这是在本例中,设置的大小是一样的。

    读取二进制数据

    CDatabase dbase;  
    //  这里假设dbase已经正确连接数据库
    CRecordset rs(&dbase);
    CString cmd = _T("select colNmae,lenb(colName) as len from table ");
    if (rs.open(CRecordeset::forwardOnly,cmd))
    {
    	while (!rs.IsEOF())
    	{
    		CDBVariant variant;
    		rs.GetFieldValue(_T("colName"),variant);
    		LPVOID pdata = ::GlobalLock(variant.m_pbinary->m_hdata);
    		rs.GetFieldValue(_T("len"),variant);
    		int len = variant.m_iVal;
    		//从pdata指针开始读取len长度字节,即为所需的内容
    		::GlobalUnLock(pdata);
    	}
    }
    

    第一次写博客,希望大家能够不吝指正!

    展开全文
  • C#读写Access数据库OLE对象字段

    千次阅读 2010-01-08 14:14:00
    (一)把文件内容写入Access数据库OLE对象字段中:if (File.Exists(txtBrow.Text) != false) // 文本框txtBrow中内容为文件路径及文件名{ //获取文件后缀 FileInfo p = new FileInfo(txtBrow.Text.Trim()); F_...

    (一)把文件内容写入Access数据库的OLE对象字段中:

    if (File.Exists(txtBrow.Text) != false)   // 文本框txtBrow中内容为文件路径及文件名

    {

         //获取文件后缀

         FileInfo p = new FileInfo(txtBrow.Text.Trim());

         F_str_Type = p.Extension.ToLower();

         if (F_str_Type.Length > 5)

         {

             MessageBox.Show("不可识别的文件格式,请重新确认!","警告");

             return;

         }

         //判断文件大小

         if (p.Length == 0)

         {

             MessageBox.Show("文件的大小为“0”,不能保存!", "警告");

             return;

         }

          //创建文件对象以打开的形式读取文件

          FileStream sFileStream = new FileStream(txtBrow.Text, FileMode.Open);

          //分配数组大小

          byte[] bFile = new byte[sFileStream.Length];

          //将文件内容读进数组

          sFileStream.Read(bFile, 0, (int)sFileStream.Length);

          //关闭文件对象

           sFileStream.Close();

           //查找文档类别号

           OleDbDataReader topicread = SaveConn.GetReader("select File_ID from FileTopic where File_Topic='" + cbbTopic.Text.Trim() + "'");

             //Read()方法用来读取OleDbDataReader对象中的记录

             topicread.Read();

             T_int_Topic=(int)topicread["File_ID"];

             OleDbConnection conn = SaveConn.GetConn();

             conn.Open();

             OleDbCommand com = conn.CreateCommand();

             com.CommandText = "insert into FileTitle(File_CodeID,File_TopicID,File_Title,File_Time,File_Save,File_Name,File_Type) values(@File_CodeID,@File_TopicID,@File_Title,@File_Time,@File_Save,@File_Name,@File_Type)";

            com.Parameters.AddWithValue("@File_CodeID", txtCode.Text.Trim());   //文档编号

            com.Parameters.AddWithValue("@File_TopicID", T_int_Topic);        //文档类别号

            com.Parameters.AddWithValue("@File_Title", txtTitle.Text.Trim());  //文档标题

            com.Parameters.AddWithValue("@File_Time", txtTime.Text.Trim());    //存储时间

            com.Parameters.AddWithValue("@File_Save", bFile);                  //文档内容

            com.Parameters.AddWithValue("@File_Name", txtName.Text.Trim());    //经手人

            com.Parameters.AddWithValue("@File_Type", F_str_Type);             //文档类型

            com.CommandType = CommandType.Text;

            com.ExecuteNonQuery();

            conn.Close();

    MessageBox.Show("文档资料添加成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

    (二)双击DataGridView控件某一行,显示文档内容 

    private void dataGridView1_DoubleClick(object sender, EventArgs e)

          {

                string F_str_Open;

    //如果不存在就创建Temp文件夹

                if (Directory.Exists(Application.StartupPath + @"/Temp") == false)

                {

                    Directory.CreateDirectory(Application.StartupPath + @"/Temp");

                }

                try

                {

                    OleDbDataReader sqlread = SaveConn.GetReader("select File_Save,File_Type from FileTitle where File_CodeID='" + Convert.ToString(dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value).Trim() + "'");

                    sqlread.Read();

                    //判断文件是否已存在.

                    if (File.Exists(Application.StartupPath + @"/Temp/Temp" + sqlread["File_Type"]))

                    {

                        //如存在则删除

                        File.Delete(Application.StartupPath + @"/Temp/Temp" + sqlread["File_Type"]);

                    }

                    byte[] bFile=(byte[])sqlread[0];

                    //创建文件对象

                    System.IO.FileStream sFileStream = new System.IO.FileStream(Application.StartupPath + @"/Temp/Temp" + sqlread["File_Type"], System.IO.FileMode.Create);

                    //将数组的内容写进文件

                    sFileStream.Write(bFile, 0, bFile.Length);

                    //关闭文件

                    sFileStream.Close();

                    Process p = new Process();

                    p.StartInfo.FileName = Convert.ToString(Application.StartupPath + @"/Temp/Temp" + sqlread["File_Type"]);

                    p.Start();

                    p.Close();

                    sqlread.Close();

                }

                catch (Exception ee)

                {

                    MessageBox.Show(ee.Message);

                }

            }

     

     

     

    展开全文
  • 往往在access数据库中我们手动存的bmp图片在字段中显示的是“位图图像”,有时候并不能为我们的C#代码所...这里介绍一下有关对access数据库ole对象的操作。 //读取ole对象(bmp图片)放入picturebox byte[] bu...

    往往在access数据库中我们手动存的bmp图片在字段中显示的是“位图图像”,有时候并不能为我们的C#代码所识别,这个时候就不要手写数据库了,

    尽量保证数据库的完整性——通过代码操作数据库而不是通过手动写入数据库。

    这里介绍一下有关对access数据库的ole对象的操作。

    //读取ole对象(bmp图片)放入picturebox    

                byte[] buffer = (byte[])modelrecord.ObjectSign;

                MemoryStream ms = new MemoryStream(buffer);
                this.pictureBox1.Image = Image.FromStream(ms, true);

    //向数据库中写入ole对象(bmp图片)

                           string flname = Application.StartupPath + "\\签字.bmp";//文件的地址
                            modelrecord.ObjectSign = ImgToByt(new Bitmap(flname));//写入model的字段,以二进制流的形式

    转载于:https://www.cnblogs.com/dingshuichen/archive/2011/09/10/2172956.html

    展开全文
  • C# 操作AccessOle对象

    千次阅读 2016-01-28 14:52:45
    C# 操作AccessOle对象 OLE对象数据类型 (1)OLE 对象用于使用 OLE 协议在其他程序中创建的 OLE 对象,如 Microsoft Word 文档、  Microsoft Excel 电子表格、图片、声音或其他二进制数据。 (2)Access中的...
  • 有时候需要大数据的存取时,如图片,需要用到ole对象的操作。 首先,在默认文件中,添加两个名空间 using System.Data.OleDb; using System.IO; 一个用于数据库操作,一个用于二进制文件操作 在Access中新建...
  • Embedding OLE Objects Into an Access Database在Access数据库嵌入OLE对象
  • Ole对象Access中存储为二进制文件,读取的时候需要注意转换出的文件的编码格式  1OleDbConnection OleConn = new OleDbConnection(); 2OleConn.ConnectionString = @"Provider=Microsoft.Jet.OleDb....
  • 我用hibernate进行access数据库的映射来实现数据库的操作,但是数据库中有一个ole对象,是用来存储图片的。 我是用blob来进行映射的,问题是我进行数据库操作的时候就只能查询而不能进行插入操作 错误是这样的: ...
  • OLE 对象 来自 Office 和基于 ...OLE 对象字段创建原始文档或其他对象的位图图像,然后在数据库的表字段以及窗体或报表控件中显示该位图。 为了让 Access 呈现这些图像,必须在运行数据库的计算机上注册 OLE ...
  • delphi image控件显示图片,想将图片保存到access数据库中,本人access数据库中的数据类型是‘OLE 对象’ 1、如何将image控件图片保存到access的OLE 对象中 2、如果不用OLE 对象对象,用什么数据类型保存(不要...
  • C#中使用OleDb操作access数据库

    千次阅读 2018-01-09 13:42:50
    引入oledb类库 using System.Data.OleDb; //声明连接对象  private OleDbConnection _oleDbConn; //Adapter对象  private OleDbDataAdapter _oleDbAda; //连接串 包括oledb版本和mdb路径 private ...
  • MFC操作ACCESS数据库

    2020-12-29 14:18:01
    MFC + Access数据库操作,读取Access数据库存储图片bitmap案例,需要的朋友可以下载学习参考.oledb对象存储读取.显示在picture控件案例.
  •  错误提示内容如下:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[Microsoft][ODBC Microsoft Access Driver] 不能更新。数据库对象为只读。 解决方案:1.因ASP程序放在NTFS磁盘
  • MSDN中只有AppendChunk方法... 没有判断数据长度的方法,也没有删除数据的方法,难不成每次存入数据库的文件内容需要更新时都要新增一条记录再删掉原记录么……
  • VB.NET 使用 OleDb 操作 Access 数据库(来自 MSDN)

    万次阅读 热门讨论 2014-04-03 13:52:31
    VB.NET 使用 OleDb 操作 Access 数据库 这里采用 OleDb 方式对 Access 数据库进行访问,主要内容都来自 MSDN 帮助文档。建议新手注意 MSDN 的用途。 首先导入命名空间 : Imports System.Data.OleDb 然后我们要...
  • 最近帮别人处理下数据,发现添加数据时,就提示"ASP 不能更新。...   "不能更新,数据库或对象为只读"的解决方案 初接触dreamweaver,在做一简单页面实现向access数据库写数据
  • 错误提示内容如下:Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[Microsoft][ODBC Microsoft Access Driver] 不能更新。数据库对象为只读。解决方案:1.因ASP程序放在NTFS磁盘上,故更
  • C#通过OleDb查询获取Access数据库表名

    千次阅读 2009-03-20 19:25:00
    以前觉得C#获取Access数据库表名是件挺麻烦的事,要通过ADOX和ADODB技术,最近才发现原来OleDb本身就有这个功能,真是学业不精令人汗颜啊。下面是MSDN上面介绍的该方法:------------------------------------------...
  • 性能对比: sql access oledb dsn oledb dsn ...
  • .net中使用OleDb连接Access数据库

    千次阅读 2008-04-04 16:47:00
    1. 在 Web.config 文件中加入以下配置:   ...Provider=Microsoft.Jet.OLEDB.4.0;...数据库存在于项目的Database文件夹下,在创建了Utility类后,通过本类的GetOleDbConnection()即可得到OleDb的Collection对象
  • 获取ACCESS数据库中所有表及对象信息 分类: ACCESS VB.NET 2011-08-27 18:45 177人阅读 评论(0) 收藏 举报   1.利用OleDbConnection 对象的 GetOleDbSchemaTable 方法 OLE DB .NET 数据提供程序...
  • C#操作Access数据库

    2016-10-18 00:17:08
    C#对Access数据库的一些操作方法 |2014/3/11小易| 课程:侠客营销软件开发特训 |浏览2368次 C#对Access数据库的操作  下面以Access数据库为例说明,用C#的DataSet类访问数据库的一些操作方法...
  • Access存储图片(OLE对象)

    千次阅读 2009-04-10 19:44:00
    Image2Access.aspx; Page language="c#" Debug="true" Codebehind="Image2Access.aspx.cs"AutoEventWireup="false" Inherits="eMeng.Exam.Image2Access" %> 上传文件到 Access 数据库
  • 本来想着打开一个access数据库连接后,不关闭,下次操作数据了,直接拿来用,谁知道连着测试64次后(大概这么多次),就会出现System.Data.OleDb.OleDbException的错误,错误原因是指向con.open()的 即使写了 连接状态的...
  • C++、Qt操作Access数据库

    千次阅读 热门讨论 2018-02-10 16:15:56
    C++、Qt操作Access数据库 工作需要,使用C++、Qt封装了几个操作Access数据库的接口,分享给大家, 代码是经过反复测试,可以直接使用的: 1、获取指定数据库的表: /** * @brief 获取Access数据库中所有的表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,266
精华内容 6,506
关键字:

access数据库ole对象