此类个人觉得是很有用的!!!对于以后提交表单数据,不用再一个一个去写了,直接引用该类,再save或edit即可,简单多了,但当然,因为它不是智能的,所以对于某些数据格式是不能做核查的!!使用示例代码如下:
<%
dim action
action=request("action")
if action="save" then
dim objclass
set objclass=new saveformdata
objclass.mdbfile=server.mappath("data/data.mdb")
objclass.saverecord "number","*","id"
objclass.saverecord "number","num1,text",""
objclass.editrecord "number","*","id=15","id"
set objclass=nothing
end if
%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en"
"http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<body>
<form name="form1" method="post" action="index.asp?action=save">
<table width="100%" border="0" cellspacing="2" cellpadding="0">
<tr>
<td width="19%" height="20">num1</td>
<td width="81%"><input name="num1" type="text" id="num1"></td>
</tr>
<tr>
<td height="20">num2</td>
<td><input name="num2" type="text" id="num2"></td>
</tr>
<tr>
<td height="20">num3</td>
<td><input name="num3" type="text" id="num3"></td>
</tr>
<tr>
<td height="20">text</td>
<td><input name="text" type="text" id="text"></td>
</tr>
<tr>
<td height="20"> </td>
<td><input type="submit" name="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
类的说明:
如果是使用access数据库,则首先指定数据库的绝对地址![obj].mdbfile=“数据库文件地址“
如果不是access数据库,则指定类对象的conn属性,示例:set [obj].conn=[connection对象]
然后就可以使用
[obj].saverecord(“表名“,“填加字段名列表“,“不填加字段名列表”) = 新增加数据
说明: 此方法返回true或false,true则新填加新数据成功,否则失败!
“表名”:要填表加新记录数据的数据表名
“填加字段名列表”:新添数据时的字段名,用“逗号”隔开,如:“name,word,sex“
“不填加字段名列表”:添加数据时对此字段列表里包括的字段不进行添加操作。
[obj].saverecord “user“,“*“,“id“
[obj].editrecord(“表名“,“修改字段名列表“,“修改条件”,“不修改字段列表“)=修改某条数据
“表名”,“修改字段列表”和“不修改字段列表”同saverecord方法一样!
“修改条件”:sql查询条件,不带“where”
示例:[obj].editrecord “user“,“pass,sex“,“id=22“,““
注意:“填加字段列表”和“修改字段列表”可以使用“”值或“*”值,表明修改所有字段,但建议此时“不填加字段名列表”和“不修改字段名列表”里写上“自动增加”型的字段名,要不然填加或修改数据时将会失败!
类代码:
<%
/*****************************************************************************************
class saveformdata
private c_errnumber 错误返回代码
private c_numericallownull 数字型字段时是否允许接收非数字值,true = 可以(非数字值时用0代替) false = 不可以(非数字值时将会出错,errnumber = 9)
private c_datetimeallownull 日期时间型字段时是否允许接收非日期时间,true = 可以(非日期时间值时用(now)代替) false = 不可以(非日期时间值时将会出错,errnumber = 10)
private c_conn 数据库conn连接对象
private c_mdbfile access数据库文件地址,如果不是设置conn属性,则该属性一定不能为空!
private sub class_initialize
c_conn=null
c_numericallownull=true
c_datetimeallownull=true
end sub
private sub class_terminate
if not isnothing(c_conn) then
c_conn.close
set c_conn=nothing
end if
end sub
/***************************************************************************
/* 设置/返回conn对象
/*说明:添加这个是为了其它数据库(如:mssql)
/***************************************************************************
public property set conn(snewvalue)
on error resume next
if not isnothing(snewvalue) then
c_conn.close
set c_conn=nothing
end if
set c_conn=snewvalue
end property
public property get conn
if not isnothing(c_conn) then
set conn=c_conn
else
conn=null
end if
end property
/***************************************************************************
/* 设置/返回数据库文件
/*说明:
/***************************************************************************
public property let mdbfile(snewvalue)
if trim(snewvalue)<>c_mdbfile then 如果数据库文件改变则重新建立conn对象
c_mdbfile=trim(snewvalue)
call recreateconn
end if
end property
public property get mdbfile
mdbfile=c_mdbfile
end property
/***************************************************************************
/* 设置/返回错误代码
/*说明:
/***************************************************************************
public property get errnumber
errnumber=c_errnumber
end property
public sub clearerr
c_errnumber=0
end sub
/***************************************************************************
/* 设置/返回numericallownull(数值型字段是否允许空值)
/*说明:
/***************************************************************************
public property let numericallownull(snewvalue)
c_numericallownull=cbool(snewvalue)
end property
public property get numericallownull
numericallownull=c_numericallownull
end property
/***************************************************************************
/* 设置/返回datetimeallownull(数值型字段是否允许空值)
/*说明:
/***************************************************************************
public property let datetimeallownull(snewvalue)
c_datetimeallownull=cbool(snewvalue)
end property
public property get datetimeallownull
datetimeallownull=c_datetimeallownull
end property
/***************************************************************************
/* 通过数据库的所有字段表进行获取数据并保存
/*说明:stable = 表名 sfields = 要保存的字段名 notfields = 不保存的字段名
/***************************************************************************
public function saverecord(byval stable,byval sfields,byval notfields)
on error resume next
dim rs,i,stext,sitem
dim darray()
call initconn
if isnull(c_conn) then
errnumber = 1 errnumber = 1 保存数据进数据库时出未知错误
saverecord=false
exit function
end if
set rs = server.createobject("adodb.recordset")
if trim(sfields)="" then sfields="*"
notfields=","¬fields&","
rs.open "select "&sfields&" from ["&stable&"]",c_conn,1,3
redim darray(rs.fields.count-1) 临时存放数据数组
for i=0 to rs.fields.count-1
set sitem=rs.fields.item(i)
if instr(notfields,","&sitem.name&",")<1 then 排除字段
darray(i)=tspace(request(sitem.name)) 取得表格数据
if istextfields(sitem.type) then 如果是字符字段则取得字段大小的数据
darray(i)=left(darray(i),sitem.definedsize)
elseif isnumericfields(sitem.type) then 如果是数值型字段,则判断是否是数值否则不给予添加
if not isnumeric(darray(i)) then
if c_numericallownull then
darray(i)=0
else
errnumber = 9 errnumber = 9 (获取的是非数字值)
saverecord=false
exit function
end if
end if
elseif isdatetimefields(sitem.type) then 日期时间型字段
if not isdate(darray(i)) then
if c_datetimeallownull then
darray(i)=date
else
errnumber = 10 errnumber = 10 (获取的是非日期时间型)
saverecord=false
exit function
end if
end if
end if
end if
next
添加进数据库
rs.addnew
for i=0 to rs.fields.count-1
set sitem=rs.fields.item(i)
if instr(notfields,","&sitem.name&",")<1 then
rs(sitem.name)=darray(i)
end if
next
if err.number<>0 then
errnumber = 1 errnumber = 3 保存数据进数据库时出未知错误
saverecord=false
err.clear
exit function
end if
rs.update
rs.close
set rs=nothing
erase darray 清除数组数据
if err.number<>0 then
errnumber = 1 errnumber = 1 保存数据进数据库时出未知错误
saverecord=false
err.clear
else
saverecord=true
end if
end function
/***************************************************************************
/* 通过数据库的所有字段表进行获取数据并保存
/*说明:stable = 表名 swhere =查询的条件 sfields = 要修改数据的列表名
/***************************************************************************
public function editrecord(byval stable,byval sfields,byval swhere,byval notfields)
on error resume next
dim rs,i,stext,sitem
dim darray()
call initconn
if isnull(c_conn) then
errnumber = 3 errnumber = 1 保存数据进数据库时出未知错误
editrecord=false
exit function
end if
set rs = server.createobject("adodb.recordset")
if trim(sfields)="" then sfields="*"
if trim(swhere)="" then swhere="1=1"
notfields=","¬fields&","
rs.open "select "&sfields&" from ["&stable&"] where "&swhere,c_conn,1,3
redim darray(rs.fields.count-1) 临时存放数据数组
for i=0 to rs.fields.count-1
set sitem=rs.fields.item(i)
if instr(notfields,","&sitem.name&",")<1 then
darray(i)=tspace(request(sitem.name)) 取得表格数据
if istextfields(sitem.type) then 如果是字符字段则取得字段大小的数据
darray(i)=left(darray(i),sitem.definedsize)
elseif isnumericfields(sitem.type) then 如果是数值型字段,则判断是否是数值否则不给予添加
if not isnumeric(darray(i)) then
if c_numericallownull then
darray(i)=0
else
errnumber = 9 errnumber = 9 (获取的是非数字值)
editrecord=false
exit function
end if
end if
elseif isdatetimefields(sitem.type) then 日期时间型字段
if not isdate(darray(i)) then
if c_datetimeallownull then
darray(i)=date
else
errnumber = 10 errnumber = 10 (获取的是非日期时间型)
editrecord=false
exit function
end if
end if
end if
end if
next
修改数据库
for i=0 to rs.fields.count-1
set sitem=rs.fields.item(i)
if instr(notfields,","&sitem.name&",")<1 then
rs(sitem.name)=darray(i)
end if
next
if err.number<>0 then
errnumber = 3 errnumber = 3 保存数据进数据库时出未知错误
editrecord=false
err.clear
exit function
end if
rs.update
rs.close
set rs=nothing
erase darray 清除数组数据
if err.number<>0 then
errnumber = 3 errnumber = 3 保存数据进数据库时出未知错误
editrecord=false
err.clear
else
editrecord=true
end if
end function
/***************************************************************************
/* 初始化adodb.connection组件对象
/*
/***************************************************************************
private sub initconn()
on error resume next
dim connstr
if isnothing(c_conn) then
if c_mdbfile="" then
c_conn=null
c_errnumber = 8 errnumber = 8 (打开数据库出错)
exit sub
else
set c_conn=server.createobject("adodb.connection")
connstr="provider=microsoft.jet.oledb.4.0;data source=" & c_mdbfile
c_conn.open connstr
if err.number<>0 then
c_errnumber = 8 errnumber = 8 (打开数据库出错)
err.clear
c_conn=null
exit sub
end if
end if
end if
end sub
private sub recreateconn()
on error resume next
dim connstr
if not isnothing(c_conn) then
c_conn.close
else
set c_conn=server.createobject("adodb.connection")
end if
connstr="provider=microsoft.jet.oledb.4.0;data source=" & c_mdbfile
c_conn.open connstr
if err.number<>0 then
c_errnumber = 8 errnumber = 8 (打开数据库出错)
err.clear
c_conn=null
end if
end sub
private function tspace(byval sval)
sval=trim(sval)
sval=replace(sval,"","")
tspace=sval
end function
/**字段的type属性集*******
/*type = 2 整形
/*type = 3 长整形
/*type = 4 单精度形
/*type = 5 双精度形
/*type = 6 货币形
/*type = 7 日期时间
/*type = 17 字节形
/*type = 11 逻辑形
/*type = 202 文本型
/*type = 203 备注型
/*type = 205 ole对象
private function isnumericfields(byval itype)
if itype=2 or itype=3 or itype=4 or itype=5 or itype=6 then
isnumberfields=true
else
isnumberfields=false
end if
end function
private function istextfields(byval itype)
if itype=202 then
istextfields=true
else
istextfields=false
end if
end function
private function isdatetimefields(byval itype)
if itype=7 then
isdatetimefields=true
else
isdatetimefields=false
end if
end function
/**********************************************************************************
/* 函数名:判断obj对象是否是空值
/**********************************************************************************
private function isnothing(obj)
if not isobject(obj) then
isnothing=true
exit function
end if
if obj is nothing then
isnothing=true
exit function
end if
if isnull(obj) then
isnothing=true
exit function
end if
isnothing=false
end function
end class
%>