Office中国论坛/Access中国论坛

标题: [求教]关于类和ADO的两个问题 [打印本页]

作者: 红尘如烟    时间: 2009-5-29 21:03
标题: [求教]关于类和ADO的两个问题
问题一:自定义集合类中如何设置一个属性为默认?
像Application.Forms.Item("Form1")
由于Item为默认,则可以像这样引用:Application.Forms("Form1")
在自定义类中,如clsCustom.Item("Item1")
怎么样才能这样引用:clsCustom("Item1")?

问题2:
ADO事务机制中不能提交更新的问题:
如下面的代码:
Dim cnn As New ADODB.Connection
Set cnn = CurrentProject.Connection
Dim lngRecordsAffected As Long

cnn.BeginTrans
cnn.Execute "DELETE * FROM tblCumtomers WHERE Id=1", lngRecordsAffected
If MsgBox("确定删除" & lngRecordsAffected & "条记录吗?", vbQuestion + vbOKCancel) = vbOK Then
    cnn.CommitTrans
Else
    cnn.RollbackTrans
End If
无论在对话框中选是或选否,操作查询所做的更改都不能提交
作者: andymark    时间: 2009-5-29 22:19
If MsgBox("确定删除" & lngRecordsAffected & "条记录吗?", vbQuestion + vbOKCancel) = vbOK Then

把上面的代码放到cnn.BeginTrans 前面
作者: djt    时间: 2009-5-29 23:14
用collection来代替
作者: t小宝    时间: 2009-5-30 07:40
一、如果是指 Collection 对象,本来就可如你说的引用。

二、cnn.BeginTrans... 是在操作ADO记录记录集时使用的方法,操作查询中应该:
  用 cnn.Execute "BEGIN TRANSACTION" 代替 cnn.BeginTrans
    用 cnn.Execute "COMMIT TRANSACTION" 代替 cnn.CommitTrans
    用 cnn.Execute "ROLLBACK TRANSACTION" 代替 cnn.RollbackTrans
作者: djt    时间: 2009-5-30 10:00
问题2从代码上说没有问题。我的也是这样做的,没有问题。
可能是,你在执行这段代码之前,执行了begintran,但是没有commit,这样造成以后的commit没有提交
作者: 红尘如烟    时间: 2009-5-31 15:26
本帖最后由 红尘如烟 于 2009-5-31 15:28 编辑

非常感谢几位的热心帮助
问题一可能是我的表述不清楚,我记得VB当中可以在属性窗体设置默认属性或默认方法,但在ACCESS VBA中这样不行,应该怎么做?
问题二中由于我需要在提交更新前根据影响的记录行数来判断是否进行后续操作,所以需要在Begintran事件后弹出确认对话框,我对ADO没怎么深入研究过,所以不是很熟悉
作者: djt    时间: 2009-6-1 13:06
问题2 测试过,还是没有任何问题!
问题1 我是用COLLECTION来处理的。我的报表是自己编写代码来填写内容。比如自定义属性如下:
Header;True;
RsMove;0;
RowPerPage;50;
NumberAllign;0;
MoveRs;<*\02\01\1rs\2Move\0\50\1\0\;
RowStart;0;
RowHeight;0;
FieldSetting;0;
PageFooter;<*\04\02\1x\2y\3Print\4Size\5\27\Page\20\6\27\共\20\7\27\Pages\20\;

dim collRpt as collection
'把上面的属性循环放入数组里arrtemp
        For n = 0 To UBound(arrTemp, 1)
            collRpt.Add arrTemp(n, 2), arrTemp(n, 1)
            'MsgBox collRpt(n + 1)
        Next

'下面调用collection的movers属性 来根据页号来移动记录集
    For lngRs = 0 To lngRsCount - 1
        'If rsdata(lngrs).EOF Then Exit Sub
        rsData(lngRs).Move collRpt("MoveRs")(lngRs, 2) * (adoRpt.Page - 1), 1         
    Next




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3