分享
 
 
 

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

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

%>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有