机房收费系统错误记录——AdLockOptimistic

 

机房收费系统最近才可以敲,不过刚开始,就遇到一个难题。

 

当我往数据库的表里更新记录时,老是更新不成功,对于更新代码的反复修改,仍旧不能解决问题,这个问题困扰了我接近两天,于是找了几个同学来解决都未果,最终在徐恕的帮助下,找到了原因。罪魁祸首是锁定类型AdLockOptimistic。

 

我的这个错误属于“打开游标”类型的错误。所以就将这块知识点进行下梳理,希望对大家能有所帮助。

 

打开游标的语法是:

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

 

现在我就拿我们的机房收费系统里的打开游标的代码来解释一下。

Set rst = NewADODB.Recordset

rst.Open Trim$(SQL),cnn, adOpenKeyset, adLockOptimistic

 

Source 一般是可选的,包括变量名、SQL语句、表名、存储过程调用或持久Recordset文件名,而我们的代码Trim$(SQL)就是一个SQL语句。

 

 ActiveConnection也是可选的,包括Connection连接对象变量名,比如说我们代码中的Cnn,还包括字符串ConnectionString参数。

 

CursorType可选的,确定提供者打开RecourdSet时应该使用的游标类型。我们代码里的adOpenKeyset就属于打开键集类型游标,游标类型还包括其它三种:AdOpenForwardOnly(这种一般是默认的)打开仅向前类型游标,AdOpenDynamic打开动态类型游标、AdPenStatic打开静态类型游标。

 

LockType也是可选的,确定提供者打开 Recordset 时应该使用的锁定类型,如果不进行设置的话,一般默认AdlockReadOnly ,是只读的不能改变数据的,所以一般称为缺省锁定类型;还包括AdlockPessimistic又叫悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录,只要编辑一开始,则立即锁住记录;还有一个与之相对的称为乐观锁定的AdlockOptimistic,用法是直到用Update方法提交更新记录时才锁定记录;还有最后一个批量乐观锁定AdlockBatchOptimistic,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

 

对LockType的选择,当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。 对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,数据在这段时间被更新。这减少了资源的使用。

 

而最后的这个Options,是用户指示提供者如何计算Source参数的,在我们的的系统里没有涉及到,有兴趣的同学可以去了解下。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是一个VB6题库练习系统示例,其中包含了图像题目: 1. 首先,您需要创建一个数据库表,其中包含以下字段:问题(question_field)、选项1(option1_field)、选项2(option2_field)、选项3(option3_field)、选项4(option4_field)、正确答案(answer_field)和图像(image_field)。 2. 在VB6中,使用ADO连接到数据库,并通过SQL语句从数据库中选择问题、选项和图像。以下是示例代码: ``` Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;" Dim rs As New ADODB.Recordset rs.Open "SELECT question_field, option1_field, option2_field, option3_field, option4_field, image_field FROM mytable", cn, adOpenKeyset, adLockOptimistic Dim question As String Dim option1 As String Dim option2 As String Dim option3 As String Dim option4 As String Dim imgData() As Byte question = rs.Fields("question_field").Value option1 = rs.Fields("option1_field").Value option2 = rs.Fields("option2_field").Value option3 = rs.Fields("option3_field").Value option4 = rs.Fields("option4_field").Value imgData = rs.Fields("image_field").GetChunk(rs.Fields("image_field").ActualSize) Dim img As StdPicture Set img = LoadPictureFromArray(imgData) rs.Close cn.Close ``` 3. 要在VB6窗体上显示问题、选项和图像,您可以使用以下代码: ``` Label1.Caption = question Option1.Caption = option1 Option2.Caption = option2 Option3.Caption = option3 Option4.Caption = option4 Image1.Picture = img ``` 请注意,这里的Label1、Option1、Option2、Option3、Option4和Image1应该替换为您要显示问题、选项和图像的标签、选项框和图像框控件的名称。 4. 当用户选择答案并单击提交按钮时,您可以使用以下代码从数据库中选择正确答案并将其与用户选择的答案进行比较: ``` Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;" Dim rs As New ADODB.Recordset rs.Open "SELECT answer_field FROM mytable WHERE question_field = '" & question & "'", cn, adOpenKeyset, adLockOptimistic Dim correctAnswer As String correctAnswer = rs.Fields("answer_field").Value rs.Close cn.Close Dim userAnswer As String If Option1.Value = True Then userAnswer = "A" ElseIf Option2.Value = True Then userAnswer = "B" ElseIf Option3.Value = True Then userAnswer = "C" ElseIf Option4.Value = True Then userAnswer = "D" End If If userAnswer = correctAnswer Then MsgBox "回答正确!" Else MsgBox "回答错误。正确答案是:" & correctAnswer End If ``` 请注意,这里的Option1、Option2、Option3、Option4应该替换为您的选项框控件的名称。另外,您还应该添加一些错误处理代码,以确保在连接数据库或执行SQL查询时不会出现错误

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值