- 记录
- 好友
- 收听
- 听众
- 阅读权限
- 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 传递。
---- 避免重复连接数据库。大家对应上述只需少量改动,就可实现一个页面既有文字又有图象多条查询了! |
|