CSDN博客

img bpfish

(原创)自动获取表格数据添加,修改数据库数据的类

发表于2004/9/17 16:39:00  1356人阅读

此类个人觉得是很有用的!!!对于以后提交表单数据,不用再一个一个去写了,直接引用该类,再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">&nbsp;</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=","&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
%>

0 0

相关博文

我的热门文章

img
取 消
img