在vb6中
我有两个类,一个clsCb,一个clsdb,clsdb负责建立与数据库的联系,clscb调用“成本表”通过clsdb获得rscordset请问如果在一个command_click事件中我调用了clscb,后来我关闭了窗口,这时clsdb还存在吗?
如果我又一次打开窗口,又调用了clscb,会不会有问题?
在另外一个程序中我稍微改变了一下clscb,使得它可以操作所有的表格,是的,这样还不如直接调用clsdb方便,但是因为发现了奇怪的问题,所以向大家请教一下。请您看一下如下代码:
==============================
clsdb
==========================================
Public dbConn As New ADODB.Connection
Public dbStatus As Boolean
Public Function openDB() As Boolean
On Error GoTo handle
dbConn.Open ConnectionString
openDB = True
dbStatus = True
Exit Function
handle:
   MsgBox Err.Description & " at clsdb.openDB", vbOKOnly, "出错啦!"
   openDB = False
End Function
Public Function closeDB() As Integer
dbConn.Close
dbStatus = False
End Function
Public Function exeSql(sqlstr As String, queryresult As ADODB.Recordset)
On Error GoTo handleSet queryresult = New ADODB.Recordset
Set queryresult.ActiveConnection = dbConn
queryresult.Source = sqlstr
queryresult.CursorLocation = adUseClient
queryresult.LockType = adLockOptimistic
queryresult.CursorType = adOpenDynamicqueryresult.OpenExit Function
handle:
exeSql = False
MsgBox Err.Description & " at clsdb.exesql"
End Function
===================
clscb
=================
Private db As New clsDb  (在这里我不知道应该用public还是private,我希望clscb结束时clsdb也结束)
Public Function openCB(rs As Recordset, selstr As String)
Dim strsel As String
db.openDBSql = db.exeSql(selstr, rs)
End Function
Public Function closeDB()
db.closeDB
End Function
=========================
在代码中这是审核按钮:
Dim db2 As New clsCb, rs2 As Recordseta = db2.openCB(rs2, "select * from 商场结算明细单")
rs2.Filter = "id=" & Vs.Cell(flexcpData, 1, 1)
rs2.Fields("审核") = User
rs2.Fields("审核日期") = shrqrs2.Update
这是取消审核按钮:Dim db2 As New clsCb, rs2 As Recordset
a = db2.openCB(rs2, "select * from 商场结算明细单")
rs2.Filter = "id=" & Vs.Cell(flexcpData, 1, 1)
rs2.Fields("审核") = " "
rs2.Fields("审核日期") = Null
rs2.Update我所说的奇怪的现象是
有时,一个单据审核完毕,后来又发现了错误,我进行如下操作
1、取消审核(在审核form中,取消审核后关闭这个form)
2、编辑单据,更新内容(在编辑form中,更新信息,保存)
3、重新打开 审核form,点击审核按钮。在第2步时可以看到更新生效了,所以我才会去重新审核,按审核后关闭按钮。
整个过程没有发生任何错误。但是偶尔的,当不知道什么时候会突然发现审核信息没有完全保存,“审核”字段还是“ ”,但是rs2.Fields("审核日期") 却更新了,更奇怪的是之前第2步编辑的数据又回到了编辑前的状态。但是明明已经保存成功了啊?请教各位高手。另外还想请教一下,如何才能比较有条理的在不同的form中传递数据,现在我用公共变量,但是总觉得公共变量用的越多程序就越乱,特别是当程序涉及到mdiform时,一团糟,不知道大家有没有办法?本人水平很低,请高手一定不吝赐教并且不要笑话啊:)

解决方案 »

  1.   

    如果连接的是sql server的话,我一般写存储过程更新数据库如果access我会写update语句,不太用recordset更新
      

  2.   


    个人觉得如果用过程的话是不是要为每一张表格建立一个过程?如果用update语句当字段比较多时没有rs的update方法那样清楚(我是指不容易看花眼),特别是如果用insert语句的话就更乱了,而用rs的话insert和update仅差一个rs.addnew而已。
      

  3.   

    我没怎么跟上你的思路,觉得你类挺乱的。
    你要是封装的话就都封好了,外面只需要传参进去,然后在class做所有的事情也就是说你的rs不要传出来,直接在里面update,然后就关掉db
    存储过程的好处不多说了,到处都是,但是如果小程序的话就没有那么省事了