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


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

主题:请教实现方案

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/4 10:57:00 [只看该作者]

 回复10楼,可以,很基础的。

 

比如

 

For i As Integer = 194 To 197

      MsgBox("M" & i)

Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/4 10:58:00 [只看该作者]

 如果不是连续的,就这样

 

Dim Names() As String = {"M194", "M200", "M199"}


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


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

问题3:你不是已经写正确了么?直接写dd便可

 

mg.SourceTableName = "t140425"  这是引用常量的写法

mg.SourceTableName =  dd              这是引用变量的写法

 

两种写法完全不一样

 

希望以后官方在相关示例时:均给出常用写法,及变量写法.

 

如数据源连接测试

 

Dim s As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data\Northwind.mdb;Persist Security Info=False"
If
Connections.TryConnect(s) = False Then
MessageBox.Show("数据源无法连通!"
)
End If

 

这又是一个常量写法

事实上数据源已定义一般多有名称 如M197

那么要测试 M197这个名称的数据能否连通,又如何写代码?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/4 11:21:00 [只看该作者]

 回复13楼,直接这样写便可

 

If Connections.TryConnect(Connections("M197").ConnectionString) = False Then
    MessageBox.Show("数据源无法连通!")
End If


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


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

'删除临时数据表报有行
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
    If left(cn.Name,1) = "M" Then
        Dim mg As New Merger
        mg.ConnectionName = cn.Name '指定数据源名称       问题是示例只直接引用数据源名称,如何遍历数据源
        mg.SourceTableName = dd '指定要合并的表   问题是示例直接引用表名,如何引用变更 dd
        mg.DataTableName = "试验临时数据" '指定接收数据的表        
        mg.Merge() '开始合并       
    End If
       For Each dr1 As DataRow In DataTables("试验临时数据").DataRows
            Dim Filter As String
            Filter = "来源" Is Nothing
            dr1("来源") = cn.Name
            dr1("日期") = st
         Next

Next

 

 

请教以上红色代码部份执行不正确,原想法是,每从一个数据源取得数据之后,就对 来源 为空的列自动写入当前数据源名称,事实经测试 写入的都是一个值.测试的数据源为两个,M197,M198 写入的来源全部是 M198.

 

请问如何能实现多数据源数据读到临时表中,能实现 来源列自动记录 所来源的数据源.


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/4 20:41:00 [只看该作者]

 这样写

 

For Each dr1 As DataRow In DataTables("试验临时数据").Select("来源 is null or 来源 = ''")
    dr1("来源") = cn.Name
    dr1("日期") = st
Next


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


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

问题解决,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
supwork
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/4 22:27:00 [只看该作者]

很简单

 


If cn.GetTableNames.Contains(dd) Then

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


 回到顶部
帅哥哟,离线,有人找我吗?
supwork
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | 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点了还在回复解决问题.......


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