|
|
#7
ming2062007-10-27 11:48
一个比较完整的操作类,自己看咯.添加\修改\删除\分页什么都有.(原创),这里的分页只实现了简单的分页.我也懒得实现更复杂的数据库左外连接\右外连接\内连接之类的东西了.总之,可以扩展.....代码如下: 觉得还可以就加下QQ,本人自己还开发了一套自动生成代码的软件.下面的代码是自动生成的部分代码.对做ASP开发有极大的提高.
<% '================================================================================================= '该类为模糊概念类,模糊化了所有模块的数据库操作方法。 '可以对任何表执行添加、取单条记录、编辑、取记录集(自动设置分页)、删除等操作 '作者:莫小明,QQ:272038088 '编写时间:2007-2-6 '================================================================================================= CLASS CLASSModel 'List():返回带记录集数据,当返回一条记录时 '其重定义为一维数组,当返回多条记录时 '例如分页返回记录集,重定义为二维数组 'Row_N:字段个数,Col_N:某当前页产生的记录数 public List(), Row_N, Col_N,Counts ''''''''''''''''''''''''''''''''''''''''''''''' '方法名:addNews插入新记录 '参 数:TableName:数据库表名 '参 数:FieldsName:表里的字段,多个则用","隔离,例如“a,b,c” '参 数:FieldsValues:对应字段参数的值:多个则用","隔离,例如“a值,b值,c值” '新增成功:返回true 否则返回false public function addNews(TableName,FieldsName,FieldsValues) dim flag:flag=false DIM SQL SQL="Insert Into ["&TableName&"] ("&FieldsName&") Values("&FieldsValues&")" on error resume next Conn.execute(SQL) if err.number<>0 then 'Response.Write("在操作时出现异常:"+err.description) ELSE flag=TRUE end if addNews=flag end function '方法名:getOneInfos读某个记录 '参 数:TableName:数据库表名 '参 数:FieldsName:表里的字段,多个则用","隔离,例如“a,b,c”,如果是所有则“*” '参 数:KeyID:某个表的主键 '参 数:id:和主键相匹配的值 public sub getOneInfos(TableName,FieldsName,KeyID,id) if(id="") then exit sub '读出某个数据 dim sql sql="Select "&FieldsName&" from ["&TableName&"] Where "&KeyID&"="&id set rs=conn.execute(sql) if(not rs.eof) then '取得字段个数 Row_N = Rs.Fields.Count - 1 '重定义List redim List(Row_N) For IndexKey= 0 To Row_N List(IndexKey) = Rs.Fields(IndexKey)'将数据发输送到List中 Next else exit sub end if end sub public function getOne(TableName,FieldsName,Wheres) dim sql sql="Select "&FieldsName&" from "&TableName&"" if(Wheres<>"") then sql=sql&" where "&Wheres set rs=conn.execute(sql) if(not rs.eof) then getOne=rs.fields(0) else exit function end if end function '============================================== '方法名:getInfos读某个记录 '参 数:TableName:数据库表名 '参 数:FieldsName:表里的字段,多个则用","隔离,例如“a,b,c”,如果是所有则“*” '参 数:Wheres:查询条件 '============================================== public sub getInfos(TableName,FieldsName,Wheres) dim sql sql="Select "&FieldsName&" from "&TableName&"" if(Wheres<>"") then sql=sql&" where "&Wheres set rs=conn.execute(sql) if(not rs.eof) then '取得字段个数 Row_N = Rs.Fields.Count - 1 '重定义List redim List(Row_N) For IndexKey= 0 To Row_N List(IndexKey) = Rs.Fields(IndexKey)'将数据发输送到List中 Next else exit sub end if end sub ''''''''''''''''''''''''''''''''''''''''''''''' '方法名:editOneInfos 将某个更新后的数据放入数据库 '参 数:TableName:数据库表名 '参 数:FieldsName():数组对象 '参 数:FieldsValues():数组对象 '参 数:KeyID:某个表的主键 '参 数:id:和主键相匹配的值 '说 明:FieldsName(),FieldsValues()两个数组长度相等 '编辑成功:返回true 否则返回false public function editOneInfos(TableName,FieldsName(),FieldsValues(),KeyID,ID) dim flag:flag=false DIM SQL,i SQL="Update ["&TableName&"] Set " i=0 '遍历FieldsName For Each IndexKey in FieldsName SQL=SQL& IndexKey &"="&FieldsValues(i)&"," i=i+1 next '将最后一个“,”过滤掉 SQL=lEFT(SQL,LEN(SQL)-1) SQL=SQL&" Where "&KeyID&"="&ID 'Response.Write("SQL="+SQL) 'RESPONSE.End() on error resume next Conn.execute(SQL) if err.number<>0 then Response.Write("在操作时出现异常:"+err.description) ELSE flag=TRUE end if editOneInfos=flag end function ''''''''''''''''''''''''''''''''''''''''''''''' '方法名:delOneInfos 删除,可以进行批量删除 '参 数:TableName:数据库表名 '参 数:KeyID:某个表的主键 '参 数:id:和主键相匹配的值 '删除成功:返回true 否则返回false public function delOneInfos(TableName,KeyID,ID) dim flag:flag=false DIM SQL,i SQL="Delete From ["&TableName&"]" SQL=SQL&" Where "&KeyID&" IN("&ID&")" 'Response.Write("SQL="+SQL) 'RESPONSE.End() on error resume next Conn.execute(SQL) if err.number<>0 then Response.Write("在操作时出现异常:"+err.description) ELSE flag=TRUE end if delOneInfos=flag end function ''''''''''''''''''''''''''''''''''''''''''''''' '方法名:getList '作 用:返回当前页的记录集 '参 数:TableName某个表名 '参 数:Fields_N,字段串 '参 数:Page_N,传递过来的当前页号 '参 数:PageCount_N每页显示的记录个数 '参 数:Where_str,SQL语句的Where条,不需要带Where关键字,如果为空。则不连Where条件 '参 数:SortTy,确定数据库聚集,一般取ID自动编号 '参 数:OrderBy_S,排列顺序,可以自己选择:ASC或DESC ''''''''''''''''''''''''''''''''''''''''''''''' public Sub getList(TableName,Fields_N, Page_N,PageCount_N,SortTy,Where_S,OrderBy_S) '局部变量说明: 'SQL:SQL字符串 'Rs:Recordset对象 'SQL:SQL字符串 'AllCounts:获得数据库中总的记录集 Set Rs = Server.CreateObject("ADODB.Recordset") countsql="select Count(*)AS C from ["&TableName&"]" if(Where_S<>"") then countsql=countsql&" Where "&Where_S set rsCount=Conn.execute(countsql) if(not rsCount.eof ) then AllCounts=rsCount("C") '取得页数 '先用除法取整 if(int(PageCount_N)<=int(AllCounts)) then Counts = Cint(AllCounts/ PageCount_N) else Counts=1 end if 'response.Write("AllCounts="&AllCounts&",PageCount_N="&PageCount_N) '判断是否有余数 If (AllCounts Mod PageCount_N<>0 and AllCounts>PageCount_N)Then '存在余数则页数+1 Counts = Counts + 1 End If 'response.Write(",Counts="&Counts) '当页号大于1时候设置为1 If (CInt(Page_N) < 1) Then Page_N = 1 '当页号大于总页数,设置为最后一页 If (cint(Page_N )> Counts) Then Page_N = Counts If (cint(Page_N) <= 1) Then SQL="SELECT TOP "&PageCount_N&" "&Fields_N&" From ["&TableName&"] " if(Where_S<>"") then SQL=SQL&" Where "&Where_S&" ORDER BY "&OrderBy_S else Counts = cint(Counts) '否则,按以下规则进行过滤抽出记录集 SQL = "SELECT TOP " & PageCount_N&" "& Fields_N SQL=SQL&" FROM ["&TableName&"] " SQL=SQL&" WHERE "&SortTy&" NOT In" SQL=SQL&" (" SQL=SQL&" SELECT TOP "&PageCount_N*(Page_N-1)&" "&SortTy SQL=SQL&" FROM ["&TableName&"] ORDER BY "&OrderBy_S SQL=SQL&" ) " if(Where_S<>"") then SQL=SQL&" And "&Where_S SQL=SQL&" ORDER BY "&OrderBy_S end if 'response.Write("start:=======================>>>>SQL="+SQL) '打开数据库取当前页号的记录集 Rs.Open SQL, Conn, 1, 1 '取得字段个数 Row_N = Rs.Fields.Count - 1 '取得当前记录的条数 Col_N = Rs.RecordCount - 1 '重定义二维数组 ReDim List(Row_N, Col_N) '判断存在,循环输入数组 If Not Rs.EOF Then '循环取出行记录 For i = 0 To Col_N '如果到尾,跳出循环 If Rs.EOF Then Exit For '循环取出字段 For j = 0 To Row_N List(j, i) = Rs.Fields(j) Next '移动到下一条记录 Rs.MoveNext Next End If '关闭 Rs.Close Set Rs = Nothing End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''' '方法名:pageFun '作 用:上下页 '参 数:page 当前的页号 public function pageFun(page) dim s s="&bigName="&RequestData("bigName")&"&smallName="&RequestData("smallName") dim str:str="" str=str&"<table width='100%' border='0' align=center cellpadding=0 cellspacing=0 >" str=str&" <tr>" str=str&" <td><a href='?page=1"&s&"'>最前页</a> | <a href='?page="&(page-1)&""&s&"'>上一页</a> | <a href='?page="&(page+1)&""&s&"'>下一页</a> | <a href='?page="&Counts&""&s&"'>最末页</a> | "&page&"/"&Counts&"页</td> " str=str&" </tr>" str=str&"</table>" pageFun=str end function '============================= '分页方式 '============================= public function getPage(page) dim str dim color 'response.Write("ccc="&Counts&"") for i=1 to Counts if(cstr(i)="1") then str=getUrl(page,i) else str=str&","&getUrl(page,i) end if next getPage=str end function '=========================== '取得URL '=========================== private function getUrl(page,key) if(cint(page)=key) then getUrl="<font color='red'>"&key&"</font>" else getUrl="<a href='?page="&key&"'>"&key&"</a>" end if end function END CLASS %>
|