以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  保存外部数据的小问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=75295)

--  作者:zhangchi96
--  发布时间: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、在保存外部数据表的时候,能否出现一个窗口,窗口滚动显示已经保存的当前行的【姓名】、行数以及保存结束时总记录的条数,这样就知道保存的进度了。


--  作者:大红袍
--  发布时间: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
--  发布时间:2015/10/7 18:33:00
--  

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

 

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

 

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


--  作者:大红袍
--  发布时间:2015/10/7 19:15:00
--  

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


--  作者:zhangchi96
--  发布时间: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

 

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


--  作者:大红袍
--  发布时间:2015/10/7 20:45:00
--  

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

 

If Forms("提示").Opened Then

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

    Application.DoEvents()

End If


--  作者:zhangchi96
--  发布时间:2015/10/7 22:23:00
--  
谢谢大红袍老师,我又建了一个窗体“提示”,在此窗体中增加了标签Label1,然后就有用了,

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

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

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



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

--  作者:zhangchi96
--  发布时间:2015/10/7 22:23:00
--  
结束时 
   __________________________________________
   |    下面开始保存数据到服务器。。。。。             |
   |        姓名95                                                      |
   |        姓名96                                                      |
   |        姓名97                                                      |
   |        姓名98                                                      |
   |       保存完备,一共有98条记录                          |
   |_______________  _________________________|

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

--  作者:大红袍
--  发布时间: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
--  发布时间: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