如何从ACCESS数据库中读取图形(续)

access|数据|数据库|图形

注意的是你也可以从一个文件中新建一个位图对象,但使用这样
的方式保存在数据库中的图形格式是浏览器不能够识别的。
当你往数据库中保存图象时,你应该知道你需要使用什么格式来保存
你可以把文件中的每一个字节保存下来,或则通过ACCESS/Foxpro的把图形保存
为一个OLE格式。
你使用什么格式保存图象决定了你在ASP中用什么格式来读出图形来。
具体来说,如果你在ACCESS/FoxPro中将图形保存为bmp,gif,jpeg(
这个必须要使用到ACCESS/FoxPro的OLE对象,即使用ACCESS的插入对象
对话框来完成),这是当你使用
image/bmp时浏览器是不能够解释的。

现在假设在数据库中保存的是你所想要的图形格式
(GIF, JPEG, BMP, TIFF, 等等等等)现在来看看要怎么把它们从
数据库中读出来。

在ACCESS中使用了两个关键的技术来保存图形
1。使用了bmp格式
2。78个字节的文件头

<%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = "image/bmp"
%>
接着你要干的就是去掉那78个字节的OLE对象的文件头。
<%
Const OLEHEADERSIZE = 78
nFieldSize = rs("photo").ActualSize
oleHeader = rs("photo").GetChunk(OLEHEADERSIZE)
imageBytes = rs("photo").GetChunk(nFieldSize - OLEHEADERSIZE)
Response.BinaryWrite imageBytes
%>

现在举一个例子:
如果你要得到一个职工的信息,这段信息包括一个介绍和他的图象。
并且要同时显示文字和图形。
代码如下:(其中的theImg是一个代理页面)
theImg.asp
<%
response.Expires = 0
response.Buffer = True
response.Clear
response.contentType = Session("ImageType")
response.BinaryWrite Session("ImageBytes")
Session("ImageType") = ""
Session("ImageBytes") = ""
response.End
%>

Function SetImageForDisplay(field, contentType)
OLEHEADERSIZE = 78
contentType = LCase(contentType)
select case contentType
case "gif", "jpeg", "bmp"
contentType = "image/" & contentType
bytes = field.value
case "ole"
contentType = "image/bmp"
nFieldSize = field.ActualSize
oleHeader = field.GetChunk(OLEHEADERSIZE)
bytes = field.GetChunk(nFieldSize - OLEHEADERSIZE)
end select
Session("imageBytes") = bytes
Session("imageType") = contentType
End Function
'注意的是,程序中只使用了4中格式:gif, jpeg, bmp , ole .

<%
sql = "select * from Employees"
Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.CursorLocation = 3
oRS.Open sql, "DSN=NW"
SetImageForDisplay oRS("photo"), "ole"
Set oRS.ActiveConnection = Nothing
%>

要显示图象的话,只需要在另外一个asp中,假设为getEmpInfo.asp中
<img src="theImg.asp"</img>
但这还有一个问题,因为对每个职工的图形都使用了同一个"theImg.asp"
文件,应该再小小修改一下:
<img src="theImg.asp?temp=<%= Request.Form("empLastName")%>"</img>

最后再说一点,如何显示多幅图象呢?
也就是说如果数据库中有多个字段都保存了图形,怎么办?
其实解决办法很简单,只要给SetImageForDisplay多加一个参数
就是用来保存图形的一个session变量。
例如:
SetImageForDisplay oRS1("photo"), "ole", "empPhoto"
SetImageForDisplay oRS2("logo"), "gif", "compLogo"

<img src="theImg2.asp?varName=empPhoto&temp=<%= Request.Form("empLastName")%>">
<img src="theImg2.asp?varName=compLogo&temp=<%= Request.Form("imgCode")%>">

使用这个方法能够完成下面的功能:
1。能够从数据库中取出图形字段。(你唯一需要知道的是数据库中的图形是什么格式
bmp?gif?jpeg?ole?)
2.采用session变量 来保存图形的字节数和content type
asp需要这些信息来联结到<IMG>中的属性
3。只要把theImg放到你想显示图形的地方,就能够显示图象了。

时间: 2024-10-31 01:34:54

如何从ACCESS数据库中读取图形(续)的相关文章

php连接access并从access数据库中读取数据

php连接access,用的是odbc相关函数.连接的代码如下: <?php $connstr="DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath("mydb.mdb"); $connid=odbc_connect($connstr,"","",SQL_CUR_USE_ODBC ); ?> 如上就建立了一个连接,mydb.mdb就是你要连接的access数据

jdbc在读取access数据库中中文数据时出现的字符长度错误问题

问题描述 在进行java连接access数据库进行读取数据的时候原有数据限制了长度为varchar(12)在officeaccess界面直接输入了12个中文汉字但是在读取进入java后变成了原来的一半java工程字符集配置是utf-8在读取的时候设置了连接的参数字符集为GBK将java项目字符集改成GBK同样会出现这个问题请问一下有没有人知道为什么会出现这种情况并且如何解决注:同样条件下mysql就没有问题是不是access记录在写的时候按中文的字符长度算的在读取到java后按照字节的长度算的所

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

在编程中我们常常会遇到"将文件保存到数据库中"这样一个问题,虽然这已不是什么高难度的问题,但对于一些刚刚开始编程的朋友来说可能是有一点困难.其实,方法非常的简单,只是可能由于这些朋友刚刚开始编程不久,一时没有找到方法而已. 下面介绍一下使用C#来完成此项任务. 首先,介绍一下保存文件到数据库中. 将文件保存到数据库中,实际上是将文件转换成二进制流后,将二进制流保存到数据库相应的字段中.在SQL Server中该字段的数据类型是Image,在Access中该字段的数据类型是OLE对象.

access数据库-C#中连接ACCESS数据库中某一列,在combobox列表中表示所有行,代码该如何写

问题描述 C#中连接ACCESS数据库中某一列,在combobox列表中表示所有行,代码该如何写 求助:C#中连接ACCESS数据库中某一列,在combobox列表中表示所有行,代码该如何写 解决方案 从列转到数组,再用数组绑定控件. .DataSource = 读取条件设定.Tables["五行农历显示"].AsEnumerable().Select(d => d.Field("日期")).ToArray();/*表中某列转数组*/ 解决方案二: 初学者,意

将Excel中数据导入到Access数据库中的方法_实用技巧

Default.aspx 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/

通过ASP,想ACCESS数据库中建立相应表

access|数据|数据库 在某些时候,我们需要想Access数据库中建立表格,不一定必须更改该数据库重新上传,下面我简单介绍个方法. <%'首先建立一个数据库文件set conn=server.createobject("adox.catalog")conn.create "provider=microsoft.jet.oledb.4.0;" & "data source=" & server.mappath("

删除Access数据库中的空记录

  用零长度字符指示不存在数据 若要在 Microsoft Access 数据库中指示不存在数据,可以在"文本"或"备注"字段输入零长度字符串 (零长度字符串:不含字符的字符串.可以使用零长度字符串来表明您知道该字段没有值.输入零长度字符串的方法是键入两个彼此之间没有空格的双引号 (" ").).在连接到 Microsoft SQL Server 数据库的 Microsoft Access 项目 (Microsoft Access 项目:与 Mi

Excel中的数据如何导入到Access数据库中?

  现在大多数人记录数据都是用excel,但是一些程序员需要将Excel中的数据导入Access数据库中,编写一个另外的程序,但是对于初学者来说这还是挺艰难的,那么现在我就为大家讲解如何将Excel中的数据导入到Access数据库中. 找到自己需要做改变的Excel和Access 为了避免自己以后的,所以第一个步骤看似无关重要,但是却缺一不可.确保Excel中的数据导入数据库不要出错,不然一切白费. 新建数据库,开始执行操作 在数据库上方有一个外部数据,点击外部数据存在一个"导入Excel表格功

求助,数据库中读取数据生成张表

问题描述 小弟刚刚实习一个月,最近遇到个问题一直没有进展问题描述,从Mysql数据库中读取一个表,生成一个Excel表格,但是表格和表的结构不一样我怎么样写一个Servlet,来实现这个功能呢?我想知道的是生成这个表格,并把数据传入进去的步骤如果能有一种上传一个干净没有数据的Excel表格做模版向其中添加数据也是再好不过啦.拜托各位大神指点迷津了,您的一句指点将使我少走许多弯路,谢谢啦 解决方案 解决方案二:poi或者jxl都可以实现读数据库获取数据想必应该难不倒你最主要的是使用poi或者jxl