霸气网游公会

 找回密码
 加入霸气
查看: 349|回复: 1

[资源求助] 用ASP处理数据库中图象的总结

[复制链接]
发表于 2009-12-9 19:48:53 | |阅读模式

欢迎加入霸气网游公会社区,马上注册,享用更多功能。

您需要 登录 才可以下载或查看,没有账号?加入霸气

x
---- 一.如何处理ASP中的图象(ORACLE数据库):  

---- 在用ASP编程中,很多时侯要用到图象。对于单纯从数据库中处理一个图象,可以看下面的代码:  

---- 这里假设你有个数据库名字叫:orasql,在数据库中有一个叫:POPULATION_PHOTO的数据表,在表中有一个RESI_PHOTO 的BLOB列。我们查出RESI_ID=370101的人的相片。  

ODBC链接:
1、控制面板中,打开ODBC 数据源,选择系统DSN ,单击“添加”;
2、选择 Microsoft ODBC for Oracle  
[不要选择Oracle ODBC Driver] 命名为"orasql";
3、登陆用户名为 ws (密码为sql,oracle 中定义)
并输入数据库所在服务器名.
4、测试数据库链接,接通即可。
FILE: PHOTO.ASP
***************************************
< %@ LANGUAGE="VBSCRIPT" % >
< %
' Clear out the existing HTTP header information
Response.Expires = 0
Response.Buffer = TRUE
Response.Clear

' Change the HTTP header to reflect that  
an image is being passed.
Response.ContentType = "image/gif"

Set cn = Server.CreateObject("ADODB.Connection")
' The following open line assumes you have
set up a System DataSource

cn.Open "orasql","ws","SQL"
Set rs = cn.Execute("SELECT PHOTO FROM  
POPULATION_PHOTO WHERE RESI_ID='370101'")
Response.BinaryWrite rs("logo")
Response.End
% >
*****************************************

---- 执行这个ASP文件,在IE 或 NetScape 中就可以看到你存在数据库中的照片了。但如果是同时处理文字和图象,或在一个页面中显示多个人员照片就会有些困难了。  
---- 比如:一个网域的人员管理,后台数据库可以用SYBASE、ORACLE或SQL SERVER等。(我在这用ORACLE)当你在企业内部需要用到BROWSE/SERVER方式,即用浏览器查看员工的个人信息时,就即要处理文字信息同时还要用到关于图象的技巧,极有可能查询到同名或同姓人员的信息,这就需要在一个页面中显示多个图片。假如查询出的同姓人员太多,就需要作分页功能。  

---- 问题在于你显示文字信息时HTML的HEAD中的CONTENT=“TEXT/HTML”,而显示图象则必须是 CONTENT=“IMAGE/GIF”或者是CONTENT=”IMAGE/JPEG“。因此你是无法只用一个ASP文件就把文字信息和图象都处理完的,解决的办法是:用一个单独的ASP文件处理一个图象,然后在处理文字信息的ASP文件中调用这个ASP文件。  

---- 二.在这给大家介绍一个我的解决方法,希望大家一起讨论:  

---- 环境:WINNT4.0ORACLE FOR NT(unix)IIS3.0  

---- 数据库名:ORASQL  

---- 表名:POPULATION 经主键RESI_ID 链接 POPULATION_PHOTO  

---- 目的:从POPULATION中查出未定姓名的人员的信息(自由查询),包括姓名(resi_name),性别(resi_sex),  

---- 身份证号(resi_identity) ;从POPULATION_PHOTO中查出相应人员照片(RESI_PHOTO)。链接键(RESI_ID )  

---- 功能:在此我们可查询出所有某姓(例如”李“姓)的人员信息带照片(可以是符合某查询条件的多条信息),每页限显示 5人信息,自动分页;亦可按身份证号码精确查询。  

---- 第一步:创建一个查询表单QUERY.HTM:  

**********************************
< html >
< head >
< /head >
< body >
< form method="POST" action="ORAQUERY.ASP" >
< p >请输入姓名:< input type="text" name="name" size="20" >
< /p >
< p > 身份证号:< inputtype="text" name="id" size="23" >< /p >
< p >< inputtype="submit" value="查 询" name="B1" >
< input type="reset" value="清 除" name="B2" >< /p >
< /form >
< /body >
< /html >
***********************************
第二步:建立ORAQUERY.ASP
***********************************
< !-- #INCLUDE VIRTUAL="/adovbs.inc" -- >
< html >

< head >
< meta http-equiv="Content-Type"
content="text/html; charset=gb2312" >
< title >查询显示< /title >

< /head >
< body bgColor="Azure" >
< %
DIMls_sql

NAME=Request.Form("name")
ID=Request.Form("id")

if(name<>"")then
ls_sql="SELECT * FROM population  
WHERE resi_name LIKE '" & name &"%'"
IF (id<>"") THEN
ls_sql=ls_sql &" and resi_identity='"
ls_sql=ls_sql & id &"'"
END IF
else
IF (id<>"") THEN
ls_sql="SELECT * FROM population
WHERE resi_identity='" & id &"'"
END IF
end if

DIM CurrentPage,rowcount,li_i

function CHECKNULL(data)
IF ISNULL(DATA) THEN  
  RESPONSE.WRITE ("--")
ELSE
RESPONSE.WRITE DATA
END IF
end function

CurrentPage=TRIM(Request("CurrentPage"))
if CurrentPage="" then CurrentPage = 1

set conn=server.CreateObject("ADODB.Connection")
conn.open "orasql","ws","sql"
Set rs=Server.CreateObject("ADODB.Recordset")

rs.cursorType=adOpenStatic
rs.PageSize=5

rs.Open ls_sql,conn
% >
’just for aesthetic feeling ,
may link some picture bar.gif
< p align="left" >< img src="image/bar.gif" alt=
"bar.gif (7089 bytes)" WIDTH="409"
HEIGHT="63" >< /p >

< p align="center" >< font color="#0000FF"  
face="楷体_GB2312" >< big >< big >查询< /big >
< /big >< /font >< /p >
< %  
nobody="对不起!数据库里没有您要找的人员资料!"% >
< %IF rs.eof THEN % >
< p >< br >< /p >

< p align="center" >< font size="5" color="OrangeRed" >
< %Response.Write(nobody)% >< % response.write ls_sql% >  
< /font >< /p >
< %else  
DIM li,IDNO
DIM ls_file,ls_filetrue

li=0
rs.AbsolutePage=Cint(CurrentPage)
rowcount=0

while NOT rs.eof AND rowCount< rs.PageSize
li = li+1

ls_file="showing"
ls_filetrue=""
IDNO=rs.Fields("resi_id").value
% >
< div align="center" >< div align="center" >< center >

< table border="1" width="528" height="134" >
< tr >
< td width="110" height="40" align="center" >姓名< /td >
< td width="288" height="40" >< %
CHECKNULL(rs("resi_name"))
Set RsPHOTO = conn.Execute("SELECT RESI_PHOTO  
FROM population_photo WHERE resi_id='"&IDNO&"'")  
% >< /td >
< td width="112" height="135" rowspan="3" >< %
if NOT RsPHOTO.eof then
Session(LI)=rsPHOTO("resi_photo")
ls_filetrue=ls_file+Cstr(li)+".asp"
% >< img src="< %=ls_filetrue% >" alt="照片" >
< %
else
RESPONSE.WRITE "无照片"
end if% > < /td >
< /tr >
< tr >
< td width="110" height="40" align="center" >性别< /td >
< td width="288" height="40" >< %
CHECKNULL(rs("resi_sex"))% >< /td >
< /tr >
< tr >
< td width="110" height="40" align="center" >身份证号< /td >
< td width="288" height="40" >< %
CHECKNULL(rs("resi_identity"))
% >< /td >
< /tr >
< /table >
< /center >< /div >< %response.write "< br >第
( "&li&" ) 条纪录< br >" % >

< br >
< %  
rowCount=rowCount+1
rs.MoveNext
WEND
% >
< %
response.write "< p align=""left"" >第  
[ "&CurrentPage&" ] 页< /p >"  
response.write"< hr >< br >"
for li_i=1 to rs.PageCount% >
< a href="xbmquery1.asp?CurrentPage=< %=li_i% >" >
< font face="Impact" >( < %=li_i% > )< /font >< /a >
< % next% >
< /div >
< %rs.close
set rs=nothing
rsphoto.close
set rsphoto=nothing
conn.close
set conn=nothing
END IF
% >
< p > < /p >

< p align="center" >
< applet code="fphover.class" codebase="_fpclass"
width="120" height="24" >
< param name="text" value="重置查询" >
< param name="color" value="#008000" >
< param name="hovercolor" value="#0000FF" >
< param name="textcolor" value="#FFFFFF" >
< param name="bgcolor" value="#FFFFFF" >
< param name="effect" value="glow" >
< param name="url" value="query.asp" valuetype="ref" >
< param name="font" value="Dialog" >
< param name="fontstyle" value="regular" >
< param name="fontsize" value="14" >
< /applet >
< /p >
< /body >
< /html >
***********************************
第三步:建立处理图象的ASP文件(SHOWING1.ASP)。
第一页中每幅照片需要一个文件。
以后各页会自动循环使用第一页照片文件。
(SHOWING1.ASP)用来显示每页中第一幅照片。
***********************************
< %@ LANGUAGE="VBSCRIPT" % >
< %

Response.Expires = 0
Response.Buffer = TRUE
Response.Clear

resi_photo=session.Contents(1)
' Get picture
Response.ContentType = "image/gif"

Response.BinaryWrite resi_photo
Response.End
% >

**********************************
注:1、附若要在一页中显示人员信息条数较少,
(如少于5 幅)可复制(SHOWING1.ASP) 5 遍,分别
定义为 (SHOWING2.ASP)(SHOWING3.ASP)
(SHOWING4.ASP)(SHOWING5.ASP)。每个文件中
resi_photo=session.Contents(li)
语句,相应 li 修改为第 li 幅照片。亦可把  
(ORAQUERY.ASP)中li_flag = li+1 变量定义为Session(li_flag)
则 (SHOWING< 1--5 >.ASP)文件内容完全相同,
均接收Session(li_flag)变量.
2、若一页中显示人员信息条数太多,可把下面语句加入  
(ORAQUERY.ASP) 循环显示语句中(调照片前),
动态创建showing.asp 文件,
每次显示照片前便产生相应文件,然后在退出时,
删除这些文件(fso.DeleteFile "C:\path\showing*.asp")。

动态创建showing.asp 文件语句:

‘ set showing.asp path
xmlPath = "C:\web\showing"&li&".asp"
set fso = server.createobject
("scripting.filesystemobject")

set f = fso.createTextFile(xmlPath,true)
f.writeline "< % Response.Expires = 0"
f.writeline " Response.Buffer = TRUE "
f.writeline " Response.Clear"
f.writeline "resi_photo=session.
Contents("&li_flag&")"
f.writeline "Response.ContentType = ""image/gif"""
f.writeline "Response.BinaryWrite resi_photo"
f.writeline "Response.End"
f.writeline "%"&" >"
f.writeline "< head >< title >< /title >"
f.writeline "< /head >< body >< /body >"
f.writeline "< /html >"
set f = nothing
set fso = nothing

---- 这里主要就是用到了一个小技巧就是利用了一个SESSION变量来实现查询出的photo 传递。  
---- 避免重复连接数据库。大家对应上述只需少量改动,就可实现一个页面既有文字又有图象多条查询了!
发表于 2010-5-4 10:26:12 |
嗯。。。     看看

Archiver|手机版|小黑屋|霸气网游公会 ( 蜀ICP备18016790号-3 )

GMT+8, 2024-9-19 10:02 , Processed in 0.076173 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表