自動獲取表格數據添加,修改數據庫數據的類
發表于: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.kjueaiud.com