Access交流中心

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

如何实现进度条与链接后台库同步

BaoChengReng  发表于:2014-08-14 15:57:20  
复制


打开前台程序时因为与后台(在局域网中)链接表库进行链接,大概有10秒以上,此时操作人员误以为系统出毛病,不知所措而出错。
为此加了一个计时器的进度条进行提示,但我发现计时器与系统链接后台不是同步进行,在完成计时器提示后再链接,达不到初衷。
不知哪位高手推荐实例,谢谢。

 

Top
cspa 发表于:2014-08-14 21:13:22
你是要重新链接n个表还是1个表?如是1个表那是没法用进度条的,只能凭经验,大概判断链接过程所需的时间,然后做出提示,如"正在更新链接,此过程可能需要10秒钟,请稍侯..."以此明示操作人员,避免误判。如果是n个表,可用把进度条嵌入循环内来实现进度显示。甚至可以显示当前正在更新的是哪个表。

BaoChengReng 发表于:2014-08-15 09:44:43

cspa:您好!我的前台库有20-30个表是链接表,为了方便我设计成只有一个后台库。一般情况下如果后台库地址无误,就直接点击进入系统。如果因故要更换地址,这样才要更新链接,更新链接时采用系统的进度条提示,一旦完成就可以进入系统。我的问题是不需要更新链接,后台又在局域网中,进入系统需要10-20秒,有时还要慢,有什么好办法既能链接上,又能提示操作员。所以想搞一个类似进度条的提示,一旦系统链接上,提示消失,菜单就打开啦。我试了试,与后台表的链接与提示不能同步进行,在提示完成后才开始链接。所以求助有什么好的建议或实例。

顺便请教一下,1.有后台库的是否每次打开需要重新链接?2.有后台库的程序,它打开数据库时工作机理是什么,是不是有几个链接表都要去链接?



BaoChengReng 发表于:2014-08-15 13:42:21
cspa:
折腾一上午,最后搞成下面的方案


Private Sub 进入系统_Click()
Dim strCtlNm, strEgNm As String
strCtlNm = Me.Form.Name                        '这是启动窗口名称
strEgNm = CurrentDb.Properties("Apptitle")     '这是工程库的名称,也就是工具栏-启动-应用程序标题
Me.LabStart.Visible = True                     '这是警示标签,告知正在链接需要耐心等待
DoCmd.OpenForm strEgNm
If IsLoaded(strEgNm) Then DoCmd.Close acForm, strCtlNm
End Sub
结果是,如果后台在局域网,那么按[进入系统]钮后,需要几十秒时间不等,此时系统自动出现沙漏,一直到菜单打开时,
这个沙漏消失,启动窗口也关闭。
但是我总感觉不太理想,因为这个警示比较死板,您说把进度条嵌入内循环什么的,能给个例子吗?请指教。




cspa 发表于:2014-08-16 13:51:25
上传你的实例吧,这样说都不知你在干啥?

BaoChengReng 发表于:2014-08-17 19:06:59
4楼:请您帮我看看我的实例,谢谢!点击下载此附件

cspa 发表于:2014-08-17 20:50:24

1、给你改了下,你试试吧,未经调试,不知是否有错误。�������ش˸���

2、按你原来的思路也可以,就是每次更新完进度条的值后,窗体都应重画。



BaoChengReng 发表于:2014-08-18 12:30:01
capa网友:谢谢您的修改,我还没有试验,因为我没有吃透,尤其如
   Me.ocxPrgBar0.ControlTipText = "正在删除旧链接表,请稍候...",我不知道这个ControlTipText在什么地方,怎么设置,
初步拜读你得修改,我感觉我没有把问题说清楚,我把我的思路再归纳如下:


我对后台库链接的思路:


1、我不知道可以允许有多少个后台库,但为了简单我规定只用一个;
2、后台库有许多表可供前台链接,但由于工程不同,每个前台所需要链接的表数量不同;
3、我不知道每次打开前是否必须进行重新链接?我理解的是因为环境变化,如因为局域网问题需要重新链接;
4、重新链接目的(只是我的理解)是保证使用数据来自正确的(即来自正式的后台库),另外删除无效的链接表;
5、前台所需链接表名称存在于电脑中,即最后一次关机前保存于MSysObjects中Type=6 And Flags=2097152的表;
6、后台库可供资源(即可供链接表的清单)通过从后台将表导入一个"LsTem"临时表中,(实在很业余)
   目的是各种操作均在前台(本地库)进行,速度较快,导入命令
   DoCmd.TransferDatabase acImport, "Microsoft Access", 后台路径, acTable, "MSysObjects", "LsTem", False
   然后将Type=1 And Flags=0的保留,作为后台表清单,其余删除。
7、重新链接方法:对MSysObjects系统表中Type=6 And Flags=2097152进行循环,获得表名 sNew, 并将其删除
   For Each tdf In dbs.TableDefs
       If tdf.Name = sNew Then DoCmd.RunSQL "DROP TABLE " & sNew & ";"
   Next tdf
   再从临时表中查找这个sNew是否还存在,如存在则链接,否则就等于清除了无效的链接表
   If Not IsNull(DLookup("Name", "LsTem", "Name='" & sNew & "'")) Then
      DoCmd.TransferDatabase acLink, "Microsoft Access", 后台路径, acTable, sNew, sNew
   End If
   详细请看上面实例。


目前需要解决的几个问题:
1、除非更换路径每次打开前台不一定需要重新链接可以吗?
2、每次打开前台,按检查后台(即检查后台路径是否存在)需要很多时间,而且与电脑的性能以及使用连接方法(无线、有线)有关,
   因此很想在检查链接等待时间中搞个动态的警示,类似于进度条,可惜我不会。希望大家帮忙,赐教。
3、我想不用上面这个临时表办法,实在太业余了,想搞一个在本地库检查外部库的表是否存在这么一个简单的函数,请指教。
4、把每次链接的一些信息,如路径、库名、链接表清单保存在地址表与链接表中,是否有必要?听听高见。
谢谢指教!


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