Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]修改窗体,修改后保存返回数据表窗体是数据加载慢 约有30秒

杨健  发表于:2013-04-20 23:29:56  
复制

这是我的修改窗体保存按钮的代码

Private Sub CmdOK_Click()                 'Click OK button
    DoCmd.SetWarnings False
    DoCmd.RunSQL "Delete * from Pesticide_Target Where PIDS = '" & selectstr & "'"
    DoCmd.RunSQL "Delete * from Pesticide_Vendor Where PIDS = '" & selectstr & "'"
    DoCmd.RunSQL "Insert Into Pesticide_Target (PIDS,PTAG_E,PTAG_C,TAG_Risk,Inputer,Up_Date)" _
               & " Select PIDS,PTAG_E,PTAG_C,TAG_Risk,Inputer,Up_Date from Pesticide_Target_Temp "
    DoCmd.RunSQL "Insert Into Pesticide_Vendor (PIDS,PNE,PNC,Dosage,Active_Principle,PHol,PA_AP,PVendor,PRN,Comments)" _
               & " Select PIDS,PNE,PNC,Dosage,Active_Principle,PHol,PA_AP,PVendor,PRN,Comments from Pesticide_Vendor_Temp"
    DoCmd.SetWarnings True
    
    Me.Refresh
    DoCmd.Echo False                                               'To prevent screen flash
    Forms!usysfrmMain!frmChild.SourceObject = "frmPesticide_child"  'Refresh child form after edit
    DoCmd.Echo True                                                'Turn on Screen Echo to prevent black display
    Forms!usysfrmMain!frmChild.Form.TimerInterval = 300           'To trigger Child Form's Timer procedure 0.3 seconds.
    DoCmd.Close acForm, Me.Name                                    'Close Currenct Form
End Sub


我自己测试单步执行时一直到End Sub 没有问题速度很快,但是从End Sub 后要加载数据表窗体并将记录定位到刚才修改的记录时速度相当慢,约30秒。我程序的其他修改窗体不存在这个问题。如果我将这一句

 Forms!usysfrmMain!frmChild.Form.TimerInterval = 300           'To trigger Child Form's Timer procedure 0.3 seconds.

隐藏掉,跳过不执行,则速度奇快,我百思不得其解。只有这个窗体存在这个问题。请高手指点,谢谢

 

Top
殷小宝 发表于:2013-04-21 09:48:19

300ms再启动下面的定位代码,当然将它去掉,立即启动定位,当然速度要快得多了。

Private Sub Form_Timer()

    Acchelp_FindStrRecord (strSelectID_old)
    '计时器执行一次后不再执行
    Me.TimerInterval = 0
End Sub

杜超-2号 发表于:2013-04-25 10:45:16
access开发平台--修改返回原始定位记录/删除返回下一条记录/支持数值型[Access软件网]
http://www.accessoft.com/article-show.asp?id=6907

Fish 发表于:2013-04-25 11:04:54

首先谢谢殷小宝的热心答复。

问题已解决,再次感谢2号杜老师。上面所说的方法http://www.accessoft.com/article-show.asp?id=6907,需要有变化,不能直接用。原文介绍

“把 ChildFormRequery函数模块代码复制到随便一个模块里,然后窗体里找到下面这段代码

DoCmd.Echo False
Forms!usysfrmmain!frmChild.SourceObject = "frm收入_child"
DoCmd.Echo True

替换成         Call ChildFormRequery 就行了"
直接替换不是很准确,应该替换成Call ChildFormRequery(FindWhereCondidtions As String)将里面的条件要补充完整,他就能准确定位了,否则有时候行有时候不行。我将条件添加后如下

Call ChildFormRequery("PID=‘” & selectstr & "'") 就可以了。 其中PID 是主键,Selectstr 是条件字符型



总记录:3篇  页次:1/1 9 1 :