读书人

关于VB6.0+SQL server2000的有关问题

发布时间: 2012-02-01 16:58:19 作者: rapoo

关于VB6.0+SQL server2000的问题
用VB编写了一个小管理软件,每天都会向数据库中存储大量的数据,时间久了,存储每条记录需要的时间越来越长了,该怎么解决啊请高手指点一下,另外还有一个不是经常出现的问题,同一个自定义函数里面有两部分连接SQL server2000的代码,往数据库中存储相同的记录,但是偶尔出现第一部分存储记录成功,第二部分存储记录不成功,而且也没有提示任何的错误,我把代码粘贴过来,请高手指点一下什么原因。

代码如下所示:
Public Sub SaveRizhi(ByVal Icno As String, SName As String, OldMoney As String, NewMoney As String, CaoZuoStyle As String, CaoZuoTime As String, CaoZuoYuanDaiHao As String, CaoZuoYuanName As String, sn As String, SID_R As String, CID_R As String, TID_R As String)
Dim mrc As ADODB.Recordset
Dim MsgText As String
Dim txtSQL As String
Dim Datestr, Timestr As String
Call Sqlser_time
FuWuQiDate = Format(Sqlser_time, "yyyy-mm-dd hh:mm:ss")
Datestr = Format(Left(FuWuQiDate, 10), "yyyy年mm月dd日")
Timestr = Format(Right(FuWuQiDate, 8), "hh:mm:ss")
txtSQL = "select * from rizhiinfo"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If Left(MsgText, 4) = "查询错误" And Len(MsgText) > 4 Then
MsgBox "连接服务器失败,请咨询管理员!", vbQuestion + vbOKOnly, "操作提示"
Exit Sub
End If
mrc.AddNew
mrc.Fields(0) = Icno '学生卡号
mrc.Fields(1) = SName '学生姓名
mrc.Fields(2) = OldMoney '操作前剩余金额
mrc.Fields(3) = NewMoney '操作后剩余金额
mrc.Fields(4) = CaoZuoStyle
mrc.Fields(5) = Datestr & " " & Timestr
mrc.Fields(6) = CaoZuoYuanDaiHao '操作员代号


If Len(CaoZuoYuanName) > 500 Then
CaoZuoYuanName = Left(CaoZuoYuanName, 500)
End If
mrc.Fields(7) = CaoZuoYuanName '操作员姓名
mrc.Fields(8) = sn '票据号
mrc.Fields(9) = SID_R
mrc.Fields(10) = CID_R
mrc.Fields(11) = TID_R
mrc.Update
'--------------------经常出现上部分代码存储数据表rizhiinfo成功,下部分代码数据表backuprizhiinfo中没有存储这个记录,也不报任何的错误

txtSQL = "select * from backuprizhiinfo"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If Left(MsgText, 4) = "查询错误" And Len(MsgText) > 4 Then
MsgBox "连接服务器失败,请咨询管理员!", vbQuestion + vbOKOnly, "操作提示"
Exit Sub
End If
mrc.AddNew
mrc.Fields(0) = Icno '学生卡号
mrc.Fields(1) = SName '学生姓名
mrc.Fields(2) = OldMoney '操作前剩余金额
mrc.Fields(3) = NewMoney '操作后剩余金额
mrc.Fields(4) = CaoZuoStyle
mrc.Fields(5) = Datestr & " " & Timestr
mrc.Fields(6) = CaoZuoYuanDaiHao '操作员代号
mrc.Fields(7) = CaoZuoYuanName '操作员姓名
mrc.Fields(8) = sn '票据号
mrc.Fields(9) = SID_R
mrc.Fields(10) = CID_R
mrc.Fields(11) = TID_R
mrc.Update


End Sub


[解决办法]
最好不要对记录集进行 AddNew, Update 之类的操作,直接用 insert 语句是肯定不会出问题的.
[解决办法]

VB code
'问题1:对表做索引'问题2:保存时用事务来处理,保证记录的一致性,可参考如下Public Sub SaveRizhi()'错误跳转on error goto ErrHandle     '开始事务    conn.begintrans   '新增记录    conn.execute "insert into tablename(...) values(...)"   '个性记录    conn.execute "update tablename set ... where ..."   '删除记录    conn.execute "delete from tablename where ..."   '提交事务    conn.committrans    msgbox "保存成功!",vbokonly,"提示"    exit sub'错误处理ErrHandle:    '出错,回滚事务    conn.rollbacktrans    msgbox "保存失败,错误原因为:" & err.descripiton,48,"提示"    exit subend sub
[解决办法]
数据多了,时间自然就会变长
[解决办法]
补充,只是2个插入记录的动作,不需要先select出来,再add,太影响速度,
结合2楼的事务处理,直接用insert语句即可,主表和从表插入分别用一条insert即可,
保证要插入都插入,否则都不插入.
[解决办法]
楼主能够发现速度变慢,说明你突破了,呵呵。
你用insert语句也行,但一不小心返回一个所有的记录集也是够你受的。


针对你的问题,伟大的微软发明了另外一个技术,就是当前最流行的东西,云。
你可以建立另外的一个数据库,结构一样,但存储的数据不一样,这样,你再建立一个数据库用于标识某个记录究竟是放在哪个数据库里,这个存储标识信息的数据库假设为A,那么,你的程序首先访问A,然后通过A来组织你需要的记录,然后再返回给你。这样,恭喜你,你拥有了一个云服务器。

读书人网 >VB

热点推荐