设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1131|回复: 6
打印 上一主题 下一主题

[其它] [求教]关于类和ADO的两个问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-29 21:03:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题一:自定义集合类中如何设置一个属性为默认?
像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
无论在对话框中选是或选否,操作查询所做的更改都不能提交
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-5-29 22:19:52 | 只看该作者
If MsgBox("确定删除" & lngRecordsAffected & "条记录吗?", vbQuestion + vbOKCancel) = vbOK Then

把上面的代码放到cnn.BeginTrans 前面
3#
发表于 2009-5-29 23:14:03 | 只看该作者
用collection来代替

点击这里给我发消息

4#
发表于 2009-5-30 07:40:48 | 只看该作者
一、如果是指 Collection 对象,本来就可如你说的引用。

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

非常感谢几位的热心帮助
问题一可能是我的表述不清楚,我记得VB当中可以在属性窗体设置默认属性或默认方法,但在ACCESS VBA中这样不行,应该怎么做?
问题二中由于我需要在提交更新前根据影响的记录行数来判断是否进行后续操作,所以需要在Begintran事件后弹出确认对话框,我对ADO没怎么深入研究过,所以不是很熟悉
7#
发表于 2009-6-1 13:06:24 | 只看该作者
问题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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2025-1-9 21:10 , Processed in 0.090811 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表