自动获取表格数据添加,修改数据库数据的类
发表于:2007-06-30来源:作者:点击数:
标签:
此类个人觉得是很有用的!!!对于以后提交表单数据,不用再一个一个去写了,直接引用该类,再SAVE或EDIT即可,简单多了,但当然,因为它不是智能的,所以对于某些数据格式是不能做核查的!!使用示例代码如下: % Dim action action=Request(action) If acti
此类个人觉得是很有用的!!!对于以后提交表单数据,不用再一个一个去写了,直接引用该类,再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//D
TD 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>
类的说明:
如果是使用A
CCESS
数据库,则首先指定数据库的绝对地址![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=","&NotFields&","
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=","&NotFields&","
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
%>
原文转自:http://www.ltesting.net