Foxtable(狐表)用户栏目专家坐堂 → 请教实现方案


  共有5576人关注过本帖树形打印复制链接

主题:请教实现方案

帅哥哟,离线,有人找我吗?
supwork
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
请教实现方案  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/3 17:23:00 [只看该作者]


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:试验数据管理系统.rar

[此贴子已经被作者于2014-5-4 9:29:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
新福星
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1959 积分:15508 威望:0 精华:0 注册:2011/7/16 20:59:00
  发帖心情 Post By:2014/5/3 17:46:00 [只看该作者]

每试验主机每日试验时自动产生数据表,... 数据是如何录进去的?有传感器么? 你们的网络是什么情况?

 回到顶部
帅哥哟,离线,有人找我吗?
Supwork
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/3 20:19:00 [只看该作者]

试验数据有试验软件产生并自动记录,记录在access数据库中,局域网连接,直接读数据库记录就行,

 回到顶部
帅哥哟,离线,有人找我吗?
supwork
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/3 23:32:00 [只看该作者]

试验原始数据就是例孑程序中的外部数据源中的数据,这个数据分布在多台电脑上,不用管他怎么来的有就读取没有就跳过,

 回到顶部
帅哥哟,离线,有人找我吗?
新福星
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1959 积分:15508 威望:0 精华:0 注册:2011/7/16 20:59:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/4 9:15:00 [只看该作者]

具体方案就在一楼,在服务器上集中采集,也许问得太笼统了,好吧现在一个一个问题的问.

 

'删除临时数据表所有行
For i As Integer = Tables("试验临时数据").Rows.count-1 To 0 Step -1
        Tables("试验临时数据").Rows(i).Delete
Next

 

'生成表名
Dim d As Date = Date.Today
Dim dd As String
dd = Format(d, "yyMMdd")
dd = CStr(dd)
dd = "t" & dd

 

'合并外部数据源中的数据到临时数据表中
Dim mg As New Merger

mg.C ="M197"    '指定数据源名称   (数据源名称指定语句发不上来,改了N次还这个样了  ) 

问题1,是示例只直接引用数据源名称,如何遍历数据源,总不能30个数据源,本段代码重复30次的吧 问题2,如何判断数据源开机,有效存在才进行读数,否则跳过.
mg.SourceTableName = "t140425" '指定要合并的表  

    问题3问题是示例直接引用表名,如何引用变量 dd  问题4如何判断表名存在,存在就读数,否则跳过
mg.DataTableName = "试验临时数据" '指定接收数据的表
mg.Merge() '开始合并   

 

   '问题5 如何将当前数据源的名称写入到临时表的来源列中.

[此贴子已经被作者于2014-5-4 9:27:29编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
supwork
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/4 9:24:00 [只看该作者]

mg.C  '指定数据源名称 这一句发不上来,改了N多次 还显示 mg.c

[此贴子已经被作者于2014-5-4 9:25:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/4 10:54:00 [只看该作者]

关于数量定义的问题

按官方的示例可简单完成

Dim Names(3) As String
Names
(0) = "M197"
Names
(1) = "M196"
Names
(2) = "M195"
Names
(3) = "M194"

 

 

但这样写显然比较机械.

 

但再智能点不

 

因为这类数据源全部以M开头

 

能用一个简单通知点代码 直接生成 数据源的数组不.

 

那样当有数据源增加时.这类数据源直接用M打头增加即可.程序运行时即可自动加入数组中.

 

可以这样写的吧

 

For Each cn As Connection In Connections
     if left(cn.Name,1) = "M" then
      代码........

    end

Next

 


[此贴子已经被作者于2014-5-4 11:09:44编辑过]

 回到顶部
总数 44 1 2 3 4 5 下一页