注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

汇总技巧

你快乐我快乐.... 汇集各类技巧,传播技巧,让我们共同熟练运用技巧..

 
 
 

日志

 
 

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

2011-06-01 22:59:05|  分类: ◆ASP技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

此类个人觉得是很有用的!!!对于以后提交表单数据,不用再一个一个去写了,直接引用该类,再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 I
%
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
target=_blank>http://www.w3.org/TR/html4/loose.dtd"">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
 tdinput name="num2" type="text" id="num2"/td
 /tr
 tr
 td height="20"Num3/td
 tdinput name="num3" type="text" id="num3"/td
 /tr
 tr
 td height="20"Text/td
 tdinput name="Text" type="text" id="Text"/td
 /tr
 tr
 td height="20"nbsp;/td
 tdinput 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].SaveRecordUser,*,id
[Obj].EditRecord(表名,修改字段名列表,修改条件,不修改字段列表)=修改某条数据
表名,修改字段列表和不修改字段列表同SAVERECORD方法一样!
修改条件:SQL查询条件,不带WHERE
示例:[Obj].EditRecordUser,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 I
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 I
 Set C_Conn=sNewValue
End Property
Public Property Get Conn
 If Not IsNothing(C_Conn) Then
 Set Conn=C_Conn
 Else
 Conn=Null
 End I
End Property
'/***************************************************************************
'/* 设置/返回数据库文件
'/*说明:
'/***************************************************************************
Public Property Let MDBFile(sNewValue)
 If Trim(sNewValue)C_MDBFile Then '如果数据库文件改变则重新建立CONN对象
 C_MDBFile=Trim(sNewValue)
 Call ReCreateConn
End I
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 I
 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 I
 End I
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 i
 End I
End I
 End I
 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 I
 Next
 If Err.Number0 Then
 ErrNumber = 1 'ErrNumber = 3 保存数据进数据库时出未知错误
 SaveRecord=False
Err.Clear
Exit Function
 End I
 Rs.Update
 Rs.Close
 Set Rs=Nothing
 Erase dArray '清除数组数据
 If Err.Number0 Then
 ErrNumber = 1 'ErrNumber = 1 保存数据进数据库时出未知错误
 SaveRecord=False
Err.Clear
 Else
 SaveRecord=True
 End I
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 I
 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 I
 End I
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 i
 End I
End I
End I
 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 I
 Next
 If Err.Number0 Then
 ErrNumber = 3 'ErrNumber = 3 保存数据进数据库时出未知错误
 EditRecord=False
Err.Clear
Exit Function
 End I
 Rs.Update
 Rs.Close
 Set Rs=Nothing
 Erase dArray '清除数组数据
 If Err.Number0 Then
 ErrNumber = 3 'ErrNumber = 3 保存数据进数据库时出未知错误
 EditRecord=False
Err.Clear
 Else
 EditRecord=True
 End I
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.Number0 Then
C_ErrNumber = 8 'ErrNumber = 8 (打开数据库出错)
Err.Clear
C_Conn=Null
Exit Sub
End I
End I
End I
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 I
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="  C_MDBFile
C_Conn.Open ConnStr
If Err.Number0 Then
C_ErrNumber = 8 'ErrNumber = 8 (打开数据库出错)
Err.Clear
C_Conn=Null
End I
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 I
End Function
Private Function IsTextFields(ByVal iType)
 If iType=202 Then
 IsTextFields=True
 Else
 IsTextFields=False
 End I
End Function
Private Function IsDateTimeFields(ByVal iType)
 If iType=7 Then
 IsDateTimeFields=True
 Else
 IsDateTimeFields=False
 End I
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 I
 If IsNull(Obj) Then
 IsNothing=True
 Exit Function
 End If
 IsNothing=False
End Function
End Class
%

  评论这张
 
阅读(167)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017