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


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

主题:请教实现方案

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/4 22:00:00 [显示全部帖子]

本系列问题就后最后一个问题了,在判断数据源能连通后,需要继续判断目标表 dd 是否存在了,但看了 http://www.foxtable.com/help/index.html?n=1943.htm

 

列出外部数据源nwnd中的所有表名:

Dim lst As List(Of String)
lst = Connections("nwnd").GetTableNames
For Each
nm As String In lst
Output.Show(nm)

Next

 

 

但不知代码如何定才正确.

 

以下代码 已测试通过

 

 

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

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

'合并外部数据源中的数据到临时数据表中
For Each cn As Connection In Connections   
    Dim s As String = cn.ConnectionString
    If Connections.TryConnect(s) = True Then
        'MessageBox.Show("数据源无法连通!")
        If left(cn.Name,1) = "M" Then

 

           在此需判断 目标表 dd 是否存在,但不知如何写代码


            Dim mg As New Merger
            mg.ConnectionName = cn.Name '指定数据源名称  
   
            mg.SourceTableName = dd '指定要合并的表  
            mg.DataTableName = "试验临时数据" '指定接收数据的表
            mg.Merge() '开始合并
        End If
       
        For Each dr1 As DataRow In DataTables("试验临时数据").Select("来源 is null or 来源 = ''")
            dr1("来源") = cn.Name
            dr1("日期") = st
        Next
    End If
Next

 

经测试 建立三个数据源,其中M179数据源无 t140504数据表,运行程序时,系统提示 有一个数据源 t140504数据表不存在错误窗口.确定后数据源M197,M198数据源里的数据均已提取.

 

这说明 是不是有两种方式处理错误.

 

方法一:取数据表数据前判断,数据表是否存在.

方法二:设置程序运行过程中如果有错误直接忽略,跳过,不给任何提示窗口.

 

可是两种方法都不会.

[此贴子已经被作者于2014-5-4 22:26:37编辑过]

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/4 22:45:00 [显示全部帖子]

非常感谢 有点甜 问题解决,代码相当简练.

 

按帮助直接写的代码也能正常执行.  但显然不够简练.

         Dim lst As List(Of String)
               lst =cn.GetTableNames
            For Each nm As String In lst
                If nm = dd Then
                    Dim mg As New Merger
                    mg.ConnectionName = cn.Name '指定数据源名称
                    mg.SourceTableName = dd '指定要合并的表
                    mg.DataTableName = "试验临时数据" '指定接收数据的表
                    mg.Merge() '开始合并
                   
                End If
            Next

 

问题是从已以上代码到

If cn.GetTableNames.Contains(dd) Then

'在此需判断 目标表 dd 是否存在,但不知如何写代码
End If

的境界的修炼要如何才能最快的完成呢?

 

不管怎么说,可以进行下一个流程的设计了,真心感谢官方的帮助, 尤其是周末,尤其是晚上快11点了还在回复解决问题.......


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/4 23:06:00 [显示全部帖子]

接下来的问题是对提取的数据进行处理.

首先先删除无效数据,无效数据判断为,按编号进行数据记录统计,凡统计数不是3的倍数的,最后一条或两条数据是无效的

如果要精确处理,编号统计数量不是3的倍数如果余1就删除最后一条,如果余2就删除最后两条记录, 粗放点处理是凡不为3的倍数的数据全部删除,这样少数有效数据为被删除,但不影响统计结果,在允许误差范围之类.

 

初步思想是 先统计写入每编号的记录数,再根据记录数进行删除,

  另可以直接进行删除不?


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/7 16:06:00 [显示全部帖子]

谢谢

对"试验临时数据"表里的所有记录进行遍历处理,按"来源"字段内容进行序号写入,如何编程:

 

1    M197

2    M197

3    M197

4    M197

 

1    M198

2    M198

3    M198

4    M198

 


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/8 8:09:00 [显示全部帖子]

_Identify

 

显示 _Sortkey 列不存在, 将其 改成存在的列 _Identify 效果实现

For Each ly As String In DataTables("试验临时数据").GetValues("来源")
Dim i As Integer = 1
For Each dr As DataRow In DataTables("试验临时数据").Select("来源 = '" & ly & "'", "_Identify")
dr("序号") = i
i += 1
Next
Next


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/8 8:26:00 [显示全部帖子]

'对最大值进行判断
For Each ly2 As String In DataTables("试验临时数据").GetValues("来源")
    Dim i2 , i3 As Integer
    i2 = e.DataTable.Compute("Max(数据序)","来源 = '" & ly2 &'"  )
    e.DataRow("有效序") = i2 '测试取数正确与否

    i3 = i2 mod 3 '判断最后三行是否为一个有效数据,(余数为0表示数据有效)

   if i3=1 then

    .删除 来源为 ly2 的第 i2 行  代码不会写

   end if

 

   if i3=2 then

     .删除 来源为 ly2 的第 i2及i2-1 行  代码不会写

   end if
Next

想取每数据源的最大值,这代码怎么不正确了,提示 Data Table 非 Formeventargs 的有效成员

[此贴子已经被作者于2014-5-8 8:33:34编辑过]

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/8 8:52:00 [显示全部帖子]

本示例数据中,M197要删除最后的两条数据,M198要删除最后的一条数据

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


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/8 22:49:00 [显示全部帖子]

请教:

 

Dim aa As Integer
aa = 5.1
Output.Show (Math.Ceiling(aa))

 

这个输出为5

Output.Show (Math.Ceiling(5.1))

输出则为6

 

 

我需要的是输出为6的效果 ,即向上取整

 

直接使用常量,与引用变量输出结果为什么不一样了

 

 

 

Dim aa As Integer
aa = 5.6
aa = round2(aa+0.5,0)

Output.Show (Math.Ceiling(aa))

 

Dim aa As Integer
aa = 5.9
aa = round2(aa+0.5,0)

Output.Show (Math.Ceiling(aa))


 

这个都输出为 7

 

晕了..........

 

 

[此贴子已经被作者于2014-5-8 22:54:40编辑过]

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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/8 23:06:00 [显示全部帖子]

谢谢 这错误 犯得太低级了

 

 


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


加好友 发短信
等级:三尾狐 帖子:688 积分:4903 威望:0 精华:0 注册:2013/10/27 17:14:00
  发帖心情 Post By:2014/5/8 23:12:00 [显示全部帖子]

 

数据源   结果     序    有效序   合格数量

M197   合格      1         1        3
M197   合格      2         1        3
M197   合格      3         1        3
M197   不合格   4         2        2
M197    合格     5         2        2
M197    合格     6         2        2

现在数据变成上面这个样子 黑色部份

现在按 数据源 及有效序两列数据对 结果列的合格数量进行统计,统计结果写入 合格数量列

 

数据源 + 有效序组合 每组合均为3 条数据

[此贴子已经被作者于2014-5-8 23:12:47编辑过]

 回到顶部
总数 28 上一页 1 2 3 下一页