以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 请教实现方案 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=50267) |
||||
-- 作者:supwork -- 发布时间:2014/5/3 17:23:00 -- 请教实现方案 需求描述: 上传示例说明:建立有两数据源M197,M198数据库文件在项目文件夹中. 建立有内部数据表三个,"试验临时数据" 为临时表,记录每次自动 执行时的取入数据结果. 内部表"试验数据"记录原始试验数据,"试验结果"记录每次检验结果,数据条数为"试验数据"的1/3.
本需求为自0点起每两小时集中收集车间各试验台当日试验数据. 数据源情况为: 每台电脑均采用ACCESS2003数据库格式,总共大概有30台主机 每试验主机每日试验时自动产生数据表,数据表命名规则为"t140424"共七位,即t 加年月日各两位. 即目标表每天是自动变化的. 每数据源下表名称命名规则,表结构均一样. 这类型外部数据源均定义为M197,M198.......即名称以M开头 总共大概有30来个
表结构为: 编号,型号,转速,压力,流量,扭距,时间,温度,结果 编号,型号,结果为字符数据,其余均为小数. 该表没有主键. 编号为201404250001形式,即自0001开始流水编码. 编号+型号为测试数据,正常情况下,一次测试产生三条记录,如果三个结果均合格,则试验结果为合格.开始产生下一编码.如果三条其中有一个不合格,则该编号再进行一次测试又产生三条数据,如果合格,则进行下一编码测试,如果不合格则继续进行本编码测试.(结果为:如果某编号一次性试验三条合格,则数据表中仅记录3条记录,如果某编号有不合格则产生不合格数*3条不合格数据,其中每三条中的某一条有不合格出现. 该编号最后三条记录必全为合格数据(除非是最后三条记录)
现要求设计完成: 1,自0点起每2 小时,所有以M开头的数据源下的t******当日表中读取数据到示例程序中的"试验临时数据"表中, 在日期列写入当前日期,在来源列写入当前数据源名称 并对"试验临时数据"中的数据进行分析,在标记1中按编号+型号进行1,2,3,1,2,3......标记 在标记2中进行合格与不合格标记,(编号+型号每1,2,3条数据进行合格与否标记,三条全部合格标记为合格,有一条不合格标记为不合格. 在标记3中对编号+型号+标记2,连续三条的第一条中标记为1.该标记数据为不重复数据.
2,按编号+型号进行判断 将新数据写入到"试验数据表"中. "试验数据"表为所有检验记录数据库,临时表每次读入的数据是当日全部的,所经写入到"试验数据"表中的数据为新增加数据,在录入时间里记录当前系统时间(格式为2014-05-03 12:30).
3,将"试验临时数据"中 标记3中标记为1的数据写入"试验结果"数据表中,写入时只写入新增加数据,并在表 记录时间写入当前系统时间(格式为2014-05-03 12:30)
需注意事项: 1\\所有操作均设置为程序自动运行.自0点起每2小时执行一次. 2\\自动执行时,可能有的主机(数据源)未开机不能连接. 3\\自动执行时,可能有的主机就算开了,但并未开始检验,即当前数据表t140503表可能不存在. 4\\M197,M198示例数据源中有两天数据,2014-4-24日和2014-04-25日两天的测试数据数据表为 t20140424,t140425.但实际运行时,数据表为t+当日年月日格式.
这应该是一个很有代表性的实例,希望高人给解答一下.
[此贴子已经被作者于2014-5-3 17:31:54编辑过]
|
||||
-- 作者:supwork -- 发布时间:2014/5/3 17:23:00 --
[此贴子已经被作者于2014-5-4 9:29:13编辑过]
|
||||
-- 作者:新福星 -- 发布时间:2014/5/3 17:46:00 -- 每试验主机每日试验时自动产生数据表,... 数据是如何录进去的?有传感器么? 你们的网络是什么情况? |
||||
-- 作者:Supwork -- 发布时间:2014/5/3 20:19:00 -- 试验数据有试验软件产生并自动记录,记录在access数据库中,局域网连接,直接读数据库记录就行, |
||||
-- 作者:supwork -- 发布时间:2014/5/3 23:32:00 -- 试验原始数据就是例孑程序中的外部数据源中的数据,这个数据分布在多台电脑上,不用管他怎么来的有就读取没有就跳过, |
||||
-- 作者:新福星 -- 发布时间:2014/5/4 6:37:00 -- 大体思路可以有两个.一个是将每台数据定时采集后汇总到一个数据库中;另一个方法是在一台机器上主动去采集数据汇总到一个数据库中。 第一种方法具体就是建立一个共享Access数据库D。然后利用foxtables编制数据采集程序A,安装到每一台设备上。程序需要联接共享数据库D和和本地数据库联接M。定时判断数据M是否齐备后采集,写入到共享数据库D中; 第二种也许就是你现在的方法。这个同样需要建立一个共享数据库D,用FoxTable编的程序P可以不分布到每台机器上。但是P程序需要和每台设备的数据库M联接,按您描述需要建立30多个联接,然后定时逐一分析哪些数据可以读下来! 上两种方案只解决了数据采集汇集问题。还需要再编制数据处理程序C,集中处理数据D的数据。若有问题可以Q我 31358568 |
||||
-- 作者:supwork -- 发布时间:2014/5/4 9:15:00 -- 具体方案就在一楼,在服务器上集中采集,也许问得太笼统了,好吧现在一个一个问题的问.
\'删除临时数据表所有行
\'生成表名
\'合并外部数据源中的数据到临时数据表中 mg.C ="M197" \'指定数据源名称 (数据源名称指定语句发不上来,改了N次还这个样了 ) 问题1,是示例只直接引用数据源名称,如何遍历数据源,总不能30个数据源,本段代码重复30次的吧 问题2,如何判断数据源开机,有效存在才进行读数,否则跳过. 问题3问题是示例直接引用表名,如何引用变量 dd 问题4如何判断表名存在,存在就读数,否则跳过
\'问题5 如何将当前数据源的名称写入到临时表的来源列中. [此贴子已经被作者于2014-5-4 9:27:29编辑过]
|
||||
-- 作者:supwork -- 发布时间:2014/5/4 9:24:00 -- mg.C \'指定数据源名称 这一句发不上来,改了N多次 还显示 mg.c [此贴子已经被作者于2014-5-4 9:25:13编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2014/5/4 9:41:00 -- 问题1:定义一个数组,然后循环引用,参考 http://www.foxtable.com/help/topics/0216.htm
问题2:可以先ping一下机子是否开启,再连接一下数据源测试
http://www.foxtable.com/help/topics/1401.htm http://www.foxtable.com/help/topics/1944.htm
问题3:你不是已经写正确了么?直接写dd便可
问题4:判断表名,可以这样,用getTableNames, 参考 http://www.foxtable.com/help/topics/1943.htm
问题5:这个,就有点麻烦了。这样你就不能直接合并数据了。你需要多加一个临时表,把一个表的内容合并进临时表以后,修改来源列的内容,然后再合并到试验临时数据表
-----------------最后加一句,这些都是很简单的问题,楼主的基础没有打牢,先看看帮助,扩展下思路。 |
||||
-- 作者:supwork -- 发布时间:2014/5/4 10:54:00 -- 关于数量定义的问题 按官方的示例可简单完成 Dim Names(3) As String
但这样写显然比较机械.
但再智能点不
因为这类数据源全部以M开头
能用一个简单通知点代码 直接生成 数据源的数组不.
那样当有数据源增加时.这类数据源直接用M打头增加即可.程序运行时即可自动加入数组中.
可以这样写的吧
For Each cn As Connection In Connections end Next
[此贴子已经被作者于2014-5-4 11:09:44编辑过]
|