- 记录
  
- 好友
  
- 收听
  
- 听众
  
- 阅读权限
 - 8
 
- 在线时间
 -  小时
 
- 注册时间
 - 2009-9-18
 
- 最后登录
 - 1970-1-1
 
 
  
 
 
 | 
 
 
发表于 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 传递。   
---- 避免重复连接数据库。大家对应上述只需少量改动,就可实现一个页面既有文字又有图象多条查询了! |   
 
 
 
 |