Foxtable(狐表)用户栏目专家坐堂 → 保存外部数据的小问题


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

主题:保存外部数据的小问题

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


加好友 发短信
等级:二尾狐 帖子:551 积分:5001 威望:0 精华:0 注册:2012/2/11 13:27:00
保存外部数据的小问题  发帖心情 Post By:2015/10/3 23:01:00 [只看该作者]

 

有两个表:外部数据表、内部数据表,表结构相同,其中有两列是【姓名】【台帐年月】


其外部数据源为:

Provider=SQLOLEDB.1;Password=******;Persist Security Info=True;User ID=sa;Initial Catalog=***;Data Source=***.***.**.**


在窗体中有三个按钮

 

第一按钮:【加载外部数据】

Dim Filter As String

Filter = " 台帐年月 = 201509 "

DataTables("外部数据表").LoadFilter = Filter '设置加载条件

DataTables("外部数据表").Load()


第二按钮:【内部数据表复制到外部数据表】

 

For Each r1 As DataRow In DataTables("外部数据表").Select(" 台帐年月 = 201509 ")

    r1.delete  '删除【表】中符合减少条件的行

Next

For Each dr1 As DataRow In DataTables("内部数据表").Select(" 台帐年月 = 201509 ")

    Dim dr2 As DataRow = DataTables("外部数据表").AddNew()

    For Each dc As DataCol In DataTables("内部数据表").DataCols

        dr2(dc.Name) = dr1(dc.name)

    Next

Next


第三按钮:【保存外部数据表】

DataTables("外部数据表").save()


请教:第三个按钮保存数据的时候,由于数据量较大,需要比较长的时间才能把数据保存到服务器

1、能否有针对时间较长的解决方法

2、在保存外部数据表的时候,能否出现一个窗口,窗口滚动显示已经保存的当前行的【姓名】、行数以及保存结束时总记录的条数,这样就知道保存的进度了。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/4 10:44:00 [只看该作者]

1、直接用sql语句删除和新增。类似

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=52855&skin=0

 

2、如果用你原来的方法,就在beforeSaveDataRow事件写代码显示即可;如果用1的方法,直接循环每一行时,就显示出来。


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


加好友 发短信
等级:二尾狐 帖子:551 积分:5001 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/10/7 18:33:00 [只看该作者]

我还是想用我自己原来的思路,只是想得到原先提到的效果:

 

      在保存外部数据表的时候,能否出现一个窗口,窗口滚动显示已经保存的当前行的【姓名】、行数以及保存结束时总记录的条数,这样就知道保存的进度了

 

可惜说明书没有相关的例子,恳请 超版主【大红袍】帮我写个大体的代码,好吗?


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/7 19:15:00 [只看该作者]

去编写beforeSaveDataRow事件,在里面弹出当前行的姓名即可。


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


加好友 发短信
等级:二尾狐 帖子:551 积分:5001 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/10/7 20:43:00 [只看该作者]

编写beforeSaveDataRow事件,我是这样写的:

 

Dim RowQty As Integer
RowQty = DataTables("外部数据表").DataRows.Count  '当前表的总行数
Dim i As Integer
For i=0 To RowQty - 1
    msgbox(e.DataRow("姓名"))
    Exit For
Next

 

但这样的结果是,每个姓名就弹出一个对话框,要点击【确定】,我想要的是出现一个窗口然后有姓名的滚动,请教【大红袍】老师,这样的代码从来没有写过,麻烦你指导一下!谢谢了!


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/7 20:45:00 [只看该作者]

不是这样写,就两行代码。保存之前,把提示窗口打开,save之后,把提示窗口关闭。

 

If Forms("提示").Opened Then

    Forms("提示").Controls("Label1").Text = e.DataRow("姓名")

    Application.DoEvents()

End If


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


加好友 发短信
等级:二尾狐 帖子:551 积分:5001 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/10/7 22:23:00 [只看该作者]

谢谢大红袍老师,我又建了一个窗体“提示”,在此窗体中增加了标签Label1,然后就有用了,

感觉就是姓名更换太快了。我原先设想是和电影的片尾滚动字幕一样的(如果又能调节滚动的速度的话),不知道需要如何改进。

恳请【大红袍】老师有空指点一下!
设想效果图示:

开始时 
   __________________________________________
   |    下面开始保存数据到服务器。。。。。             |
   |        姓名01                                                      |
   |        姓名02                                                      |
   |        姓名03                                                      |
   |        姓名04                                                      |
   |                                                                        |
   |_________________________________________|



[此贴子已经被作者于2015/10/7 22:24:55编辑过]

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


加好友 发短信
等级:二尾狐 帖子:551 积分:5001 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/10/7 22:23:00 [只看该作者]

结束时 
   __________________________________________
   |    下面开始保存数据到服务器。。。。。             |
   |        姓名95                                                      |
   |        姓名96                                                      |
   |        姓名97                                                      |
   |        姓名98                                                      |
   |       保存完备,一共有98条记录                          |
   |_______________  _________________________|

[此贴子已经被作者于2015/10/7 22:24:23编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/7 22:48:00 [只看该作者]

你还是用循环每一行,然后每一行单独save才行,不然,foxtable是一起保存,也控制不了提示。如

 

For Each dr As DataRow In DataTables("表A").DataRows
    dr.save
Next

 

------------------------------------------

 

static ls As new List(of String)
If Forms("提示").Opened Then
    Dim txt As Winform.TextBox = Forms("提示").Controls("TextBox1")
   
    ls.add(e.DataRow("_Identify"))
    If ls.count > 5 Then
        ls.RemoveAt(0)
    End If
    Dim str As String = String.Join(vbcrlf, ls.ToArray)
   
    txt.Text = str
    Application.DoEvents()
End If


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


加好友 发短信
等级:二尾狐 帖子:551 积分:5001 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/10/8 14:44:00 [只看该作者]

谢谢大红袍老师的悉心指导!

代码都已经成功运行,我把最后的代码整理如下:

 

1、一楼中提到的:第三按钮:【保存外部数据表】

                       DataTables("外部数据表").save()

修改为:

    For Each dr As DataRow In DataTables("外部数据表").DataRows
        dr.save
   Next

2、【外部数据表】的表属性中beforeSaveDataRow事件:

           注:窗口【提示】中必须插有标签控件【Label1】和文本框控件【TextBox1】

  

Dim RowQty As Integer,i As Integer
RowQty = DataTables("外部数据表").DataRows.Count  '当前表的总行数

static ls As new List(of String)
If Forms("提示").Opened Then
    Forms("提示").Controls("Label1").Text = "共" & RowQty & "条记录,下面开始保存......"
    Dim txt As Winform.TextBox = Forms("提示").Controls("TextBox1")
    ls.add( "完成" & RowQty & "--" & e.DataRow("编号") & ": " & e.DataRow("姓名") & "......保存完毕")
    If ls.count > 22 Then
        ls.RemoveAt(0)     '删除ls的第一个值 
    End If
    Dim str As String = String.Join(vbcrlf, ls.ToArray)
    txt.Text = str
    Application.DoEvents()
End If



 


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