3自从到了csdn以来,得到很多热心帮助.前些时候用asp开发系统,发现很多东东不好用,于是自己写了一些函数.做为回报现在贴出来,供大家分享.

icerose 2002-09-06 03:47:15
'=========================================================================================================================================================
public function DoubleDataGrid(SqlStr,ConnStr,PageSize,PageNum,beginField,EndField,IDField,HttpStr,SSqlStr,SbeginField,SEndField,RelationFieldStr,ForeignFieldNum,AddWhere,OrderByStr)'主从表格式显示数据
'DoubleDataGrid功能:
' 将数据以表格形式显出来,
' 根据需要可能确定显示的字段,
' 页号,每页显示的记录数
' 复选框绑定的字段
' 修改数据时所连接到的设定的网页,传递的参数名是Idfield

'调用实例 page=DoubleDataGrid("SELECT * FROM mater_bcode","DSN=clkdb;UID=sa;PWD=passed",10,20,2,50,"Null","http://www.clkhome/mater_code1/tools/aaa.asp","SELECT price AS 价格, Num AS 数量, MaterDate AS 日期 FROM mater_price",0,"max","mater_id",0,"y","NUll")



'参数说明
'sqlstr: 将要查询的sql语句
'connstr: 数据库连接字符串
'PageSize: 数据集每页的记录数
'PageNum: 数据集中将要显示的页号
'beginField:在记录集中开始显示的字段位置
'EndField: 在记录集中结束显示的字段位置
'IDField: 用于给复选框的value赋值的字段在记录集中的位置,可以用于提交到其它页,其它页做处理的依据
' 如果IDField<0 or IDField> rs.fields.count或不是数字 则不显示复选框
'HttpStr 修改记录时连接到的网页,传递的是IDField的值,如果 httpstr="0"则不显示修改连接


'SSqlStr: 从表的SQl语句,不能句括Order by 子句,因为要通过类似于 "where 子表.字段=主表.字段"的方式将两个表联系起来,
' 而where必须在ordey by子句这前使用,才能符合sql语法
'SbeginField: 从表中在记录集中开始显示的字段位置
'SEndField: 从表中在记录集中结束显示的字段位置
'RelationFieldStr: 从表中,与主表的关联的字段名,使用方式如 Where RelationFieldStr= 'ABC'
'ForeignFieldNum: 主表中,与从表关联的字段在主表记录是中的位置,
' 之所以用以位置(index)而不直接写确定的值,是因为当主表的记录集movenext后,相应的值要变以
' 生成对应的从表记录集,使用方式如 Where RelationFieldStr= Rs(ForeignFieldNum)
'AddWhere: 确定将SSqlStr与生成的关联字符串("where 子表.字段=主表.字段")连接时是用 "Where "还是"And"
' AddWhere<>"Null"时用"where" AddWhere="Null"时用"and"
'OrderByStr: 从表的SQl语句的OrderByStr子句
'返回值, 返回的是记录集的当前页号


on error resume next
dim conn,rs
set conn=server.CreateObject ("adodb.connection")
set rs=server.CreateObject ("adodb.recordset")
Conn.open Connstr
rs.Open sqlstr,conn,1,3

if err.number <>0 then
Response.Write "<BR>DoubleDataGrid函数出错错误:<BR>" &err.Description
exit function
end if

if rs.RecordCount<1 then
Response.Write "<font size='-1' color='#FF0000'> 没有数据...</font>"
DoubleDataGrid=0
exit function
end if

'------------对参数据进行处理----------------------
'----------确定如何显示字段-----------------
if not Isnumeric(beginField) or beginField<0 then
beginField=0'确保开始显示的位置在合理范围内
else
if beginField>rs.Fields.Count-2 then beginField=rs.Fields.Count-2'保证到少显示一个字段
if beginField<0 then beginField=0
end if
if not Isnumeric(EndField) then EndField=rs.Fields.Count-1
if EndField>rs.Fields.Count-1 then EndField=rs.Fields.Count-1
if EndField<=beginField or EndField<0 then EndField=beginField-1'保证到少显示一个字段
'----------复选框、修改链接的处理在成生表格时同步完成--------------

'---------分页处理------------------
if Ucase(Trim(PageSize))="MAX" then
PageSize=rs.RecordCount
rs.pageSize=rs.RecordCount
PageNum=1
else
if not Isnumeric(PageSize) or PageSize<1 then PageSize=10
if PageSize>rs.recordcount then pageSize=rs.recordcount
rs.pageSize=pageSize
'---------页号处理----------------
if Trim(Ucase(pageNum))="MAX" then PageNum=rs.PageCount
if not Isnumeric(PageNum) then PageNum=1
if PageNum<1 then PageNum=1
if cint(PageNum-rs.PageCount)>0 then PageNum=rs.PageCount
end if
Rs.AbsolutePage=PageNum
if err.number<>0 then
dbinfo="数据库连接错误"
DoubleDataGrid=0
exit function
else
if rs.RecordCount<1 then
Response.Write "没有找到记录"
DoubleDataGrid=0
exit function
else
Response.Write "<font size='-1' color='#666666'>第<font color='#FF0000'>" & PageNum & "</font>页,共<font color='#FF0000'>" & rs.PageCount & "</font>页"
'写入表头
Response.Write "<table width='100%' border='0' cellspacing='1' cellpadding='0' bgcolor='#999999'>"
Response.Write "<tr bgcolor='#CCCCCC'>"
Response.Write "<td width='1%' align='center'><b><font color='#666666' size='-1'>序</font></b></td>"
dim i
for i=beginField to EndField
Response.Write "<td align='center'><b><font color='#666666' size='-1'>" & rs.Fields(i).Name & "</font></b></td>"
next
if Isnumeric(IDfield) then '复选框及修改链接处理
if IDField>=0 and (IDField - rs.fields.count<=0) then
Response.Write "<td width='1%'align='center'><b><font color='#666666' size='-1'>删</font></b></td>"
if trim(httpstr)<>"0" then Response.Write "<td width='1%'><b><font color='#666666' size='-1'>修</font></b></td>"
end if
end if
Response.Write "</tr>"
'写入字段信息
dim RecordNum,FieldNum,SWhere,SSSql
for RecordNum=0 to PageSize-1 '?????????????????
Response.Write "<tr bgcolor='#FFFFFF'>"
Response.Write "<td><font size='-1'>" & RecordNum +1+(PageNum-1)*PageSize & "</font></td>"
for FieldNum=beginField to EndField '写入字段值
if Trim(rs.Fields(FieldNum).Value)="" or Isnull(rs.Fields(FieldNum).Value) then
Response.Write "<td> </td>"
else
Response.Write "<td><font size='-1'> " & trim(rs.Fields(FieldNum).Value) & "</font></td>"
end if
next
if Isnumeric(IDfield) then '复选框处理
if IDField>=0 or (IDField - rs.fields.count<=0) then
Response.Write "<td><input type='checkbox' name='IDfield' value='"& rs.Fields(IDfield).Value &"'></td>"
if trim(httpstr)<>"0" then Response.Write "<td><font size='-1'><a href='" & httpstr & "?IDField="& rs.Fields(IDfield).Value &"'>改</a></font></td>"
end if
end if
Response.Write "</tr>"
'----写入从表
Response.Write "<tr bgcolor='#FFFFFF'>"
Response.Write "<tD colspan='2'> "
Response.Write "</tD>"
'保证从表的长度比主表少一格
Response.Write "<tD colspan='" & rs.fields.count-beginField-1 & "'>"
SWhere=""'每次生成新的从表的sql语句新清空临时变量
'确定主表的记录集中与从表相关的字段位置,生成开相应的关联字符串
if not IsNumeric(ForeignFieldNum) then ForeignFieldNum=0
if ForeignFieldNum<0 or ForeignFieldNum>rs.fields.count-1 then ForeignFieldNum=0

'SWhere=" " & RelationFieldStr & "='" & rs(ForeignFieldNum).value &"'" 对于sql_server最好用这句进行连接,这一句更灵活,可对用于字符型和数值型,(日期型没试过)
SWhere=" " & RelationFieldStr & "=" & rs(ForeignFieldNum).value'专门应用于access,因为是对于access来说数值型字段不能加"'",这句只对数值型的字段才有效

if Ucase(Trim(AddWhere)) <> "NULL" then
SWhere=" Where " & SWhere
else
SWhere=" and " & SWhere
end if
SSSql=SSqlStr & SWhere
if Ucase(Trim(OrderByStr))<>"NULL" then SSSqlStr=SSqlStr & OrderByStr
Call DataGrid(SSSql,ConnStr,"Max",1,SbeginField,SEndField,"NUll","NULL","NULL")
Response.Write "</tD>"
Response.Write "</tr>"

rs.MoveNext
if rs.eof then exit for '最后不到一整页时,也跳出
next
Response.Write "</table>"
end if
end if

rs.Close
conn.Close
set rs=nothing
set conn=nothing
Err.Clear
DoubleDataGrid=PageNum
end function
...全文
3 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hjbwt 2002-09-07
谢谢
回复
icerose 2002-09-07
能用就好
回复
moqijun 2002-09-06
收到,多谢
回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2002-09-06 03:47
社区公告
暂无公告