易截截图软件、单文件、免安装、纯绿色、仅160KB

用VC处理ACCESS中的位图数据

----比较复杂的数据库中一般会有位图数据(比如相片)。虽然这类“OLE对象”的插入、删除以及替换操作在ACCESS里容易实现,在VC中却显得复杂而且颇费周折。以下把作者用VC处理ACCESS数据库中的位图数据的体会简单叙述一下,以请教于大家。
----在CdaoRecordset派生类的对象中,VC自动为ACCESS的“OLE对象”域生成一个CLongBinary对象。该类虽然较简单,在程序里却需要使用全局函数GlobalAlloc()和GlobalFree()处理与它的内存句柄m_hData有关操作,访问数据前后要调用GlobalLock()和GlobalUnlock(),而且还要给它的m_dwDataLength赋值,使用起来相对复杂,所以一般推荐使用CByteArray类。这只需要在CdaoRecordset派生类对象的数据说明里修改一下,并把DoFieldExchange()里的DFX_LongBinary()改成DFX_Binary()即可。
----作者定义了一个以CObject为基类的CDib类(CDaoRecordView的派生类里定义了CDib对象成员m_DIB),其中包括一下成员和方法:
CByteArray m_bufDIB;
BOOL Create(CByteArray& ba);
BOOL Create(CFile& bmpFile);
BOOL Paint(HDC hDC); 
----m_bufDIB是存储位图数据的缓冲区。为简便起见,它不包含包装信息和BITMAPFILEHEADER结构。这样对数据库更新后,原有的“OLE对象”类型将变成“长二进制数据”,不能在ACCESS里查看了。
----第一个Create()重载方法的参数ba是记录集的位图数据(比如m_image),使用CByteArray::Copy()把数据复制给m_bufDIB;第二个Create()方法的参数bmpFile是已打开的位图文件,使用CFile::ReadHuge()把文件里的数据读入m_bufDIB(放弃前面的BITMAPFILEHEADER结构):
DWORDdwBufSize;
dwBufSize=bmpFile.GetLength();//获得文件长度
bmpFile.Seek((long)sizeof(BITMAPFILEHEADER),
CFile::begin);//放弃文件头
dwBufSize-=sizeof(BITMAPFILEHEADER);
m_bufDIB.SetSize(dwBufSize);//设置缓冲区大小
file.ReadHuge((LPSTR)(m_bufDIB.GetData()),dwBufSize);
……
----Paint()方法调用了SetDIBitsToDevice()函数(根据情况也可以使用StretchDIBits()),参数hDC是CDaoRecordview的资源中的一个静态控制的设备句柄,作为SetDIBitsToDevice()的第一个参数。如果不是16或24位的位图,还需要建立和设置调色板。Paint()方法除了在CDaoRecordView派生类的OnMove()里调用外,也被OnPaint()调用(最好不在OnDraw()里调用):
void CDeri


相关文档:

用ASP.NET/C#连接Access和SQL Server数据库

连接Access
首先看一个例子代码片断:
程序代码:
--------------------------------------------------------------------------------
using System.Data;
using System.Data.OleDb;
......
string strConnection="Provider=Microsoft.Jet.OleDb.4.0;";
strConnection+=@"Data Source=C:\BegASPNET\Northwind.mdb" ......

ACCESS SQL语法参考

ACCESS SQL语法参考
=================
一. 基础概念
可以使用的数据类型如下:
1.      TEXT:文本型(指定长度时),备注型(不指定长度时);
2.     
CHAR,NCHAR,VARCHAR,NVARCHAR:文本型,可以指定长度,否则默认值为255!
3.     ......

VB连接ACCESS数据库精简版

Option Explicit
Private Sub Form_Load()
'工程->引用->选中Microsoft ActiveX Data Objects 2.8 Library
Dim shujukulianjie As New ADODB.Connection
Dim jiluji As New ADODB.Recordset
'连接数据库的代码段
shujukulianjie.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Sour ......

C++通过ADO连接ACCESS(或者SQL Server)数据库例子

#include "iostream.h"
#include "stdio.h"
#import "C:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
int main(int argc, char* argv[])
{
   ::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");
tr ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号