|
8#
楼主 |
发表于 2014-7-18 13:05:35
|
只看该作者
本帖最后由 wx0000888 于 2014-7-18 16:39 编辑
本人使用t小宝版主的ADO,DAO具备事务处理功能的批量更新的这个例子,在长达2个月测试以来,出现缺点和错误比较多。
错误现象和缺点:
1,对象无效或不再被设置;
2,Access运行时错误'2455':您输入的表达式对属性Form/Report的引用无效
3,只能绑定单一的表,如果绑定复杂的连接语句组成的查询后就无法修改和添加输入。
4,有时在使用DAO方法时,窗体上ID字段不连号的话,操作复制的时候会出现错误,ID号会嵌入到绑定中表中没有出现的ID不连续号码中去,但随着ID增加上去,ID会出现与窗体绑定的表上的ID重合,这样也会出现错误,按理是不会出现的。
比如绑定的表(订单明细)中的ID是 1,2,3,4,5,11,12,13,14,15,36,37,38,39. 当中的缺号是自己可能测试数据时增了又删了吧。 而窗体中的表根据订单ID号筛选出来的 ID是 1,3,4,5. 那么假如使用B代码复制数据,ID号就会是 6,7,8,9,10递增,再增加一条就会出错了,我估计就是ID 变成 11 ,与订单明细中的ID 号相等就出错了,不过本人使用A代码没发现这个问题。
A代码 用这个不会出现错误
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdPasteAppend
B代码 用这个就会出现错误
Set rst = Me.订单明细子窗体.Form.RecordsetClone
rst.FindFirst "ID=" & Me!订单明细子窗体![ID]
fldCount = rst.Fields.Count
arr() = rst.GetRows
rst.AddNew
For i = 0 To fldCount - 1
If rst.Fields(i).Name <> "ID" Then
rst.Fields(i) = arr(i, 0):
End If
Next
rst.Update
优点:
1,事务处理
2,可用于单一的表如,材料信息库表,供应商表,客户表,员工信息表,设备表,Bom表等等 ,绑定即可。
经过分析:用ACCESS2007 (链接表)【前台】 + SQLSERVER 【数据库】开发比较适合,有人建议2010比较稳定,因为好像2010是2007的改进版,但我电脑测试2010也会出差错,实际两个版本测试还是2007比较稳定,速度2010略快。2007版本以上的数据表窗体就具有“汇总”和“隔行变色”,这两个功能确实不错。
自己改进的地方:用SQL语句(SELECT * into [Temp] From (Select 1 as 序号, a.材料Id ,b.材料名称....from [入库] a left join [材料] b on a.材料ID=b.材料ID WHRER.....)的建立的物理临时表,其中用“1 AS 序号”就是在临时表中插入序号字段的意思, 操作窗体再使用自定义序号函数, 这样比在表中的一个字段使用 =GETNUMBER([FROM])函数作为序号要快得多).
本人的软件就是想达成这些功能目的 :
数据表窗体中的数据表具有,汇总,隔行变色,序号;
窗体菜单上有:新增,保存(一次性批量录入带库位的“明细数据表”和“主数据表”,并更新“即时库存表”,“主数据表”单击后“明细数据表”随之相应变动(该窗体上分别有主细两个表),复制,删除,预览报表,打印报表,输出报表,跨月红冲(或跨月修改,跨月修改实际就是把变化数反应在本月)。
估计大家也是这么做的吧 本人原在EXCEL论坛,发现用EXCEL VBA编软件比较不适用 , 包括用VB 编软件也是有所限制 ,都没有ACCESS 功能强大以及样式实用,所以转来 ACCESS 论坛。
本人这么详细说明也是想让大家有所了解,少走弯路,请大家指教。
|
|