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


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

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

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


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

26楼的代码运行时出现提示: Exception has been thrown by the target of an invocation.(被调用的目标发生异常)

把其中的Dim ls = vars("ls")改为 static ls As new List(of String) 后,能正常显示 姓名 ,只是 首次运行没问题,再次运行时没有清除第一次运行时获得的姓名数组

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


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

vars.add("ls", Gettype(List(of String)))
vars("ls") = new List(of String)
forms("提示").open
vars.add("count", Gettype(Integer),0)
For Each dr As DataRow In DataTables("个人基本信息").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        vars("count") += 1
    End If
Next
For Each dr As DataRow In DataTables("个人基本信息").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        dr.save
    End If
Next

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


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

太谢谢大红袍老师了,为了给更多的访问论坛的人做参考,我把代码整理一下
1、向服务器保存数据(保存“个人基本信息”-外部数据表)的代码:
vars.add("ls", Gettype(List(of String)))
vars("ls") = new List(of String)
forms("提示").open
vars.add("count", Gettype(Integer),0)
vars("count") = 0   ‘刚添加的
For Each dr As DataRow In DataTables("个人基本信息").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        vars("count") += 1
    End If
Next
For Each dr As DataRow In DataTables("个人基本信息").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        dr.save
    End If
Next
2、“外部数据表”的表属性的beforeSaveDataRow事件代码
Dim RowQty As Integer = vars("count")
Dim RowQty2 = DataTables("个人基本信息").DataRows.Count 
Dim i As Integer 
Dim ls = vars("ls") 
If Forms("提示").Opened Then    '事先必须建立【提示】窗体
    Forms("提示").Controls("Label1").Text = "共" & RowQty2 & "条记录,有" & RowQty & "条记录已更新,开始保存......"  
    Dim txt As Winform.TextBox = Forms("提示").Controls("TextBox1")   
    'ls.add( "第" & e.DataRow("编号") & "条记录: " & e.DataRow("姓名") & "......." & Format( val(e.DataRow("编号"))/RowQty,"0.0%") & " ......保存完毕")
    ls.add( "编号" & e.DataRow("编号") & ": " & e.DataRow("姓名") & "......." & Format( val(e.DataRow("编号"))/RowQty,"0.0%") & " ......保存完毕")
    i =  ls.count
    If ls.count > 22 Then
        ls.RemoveAt(0)      '删除ls的第一个值
        i = i + 1
    End If
    Dim str As String = String.Join(vbcrlf, ls.ToArray)
    txt.Text = str
    Application.DoEvents()
    Forms("提示").Controls("Label2").Text = "共" & RowQty2 & "条记录,需要更新" & RowQty & "已经更新" & i   ’这里的变量未能显示出正确的值
End If

剩下的小问题是,变量i,只能显示1-24,超过24就仍然显示24了。
[此贴子已经被作者于2015/10/11 23:00:56编辑过]

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


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

vars.add("i", Gettype(Integer),0)

vars("i") = 0

 

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

 

Dim RowQty As Integer = vars("count")
Dim RowQty2 = DataTables("个人基本信息").DataRows.Count
Dim ls = vars("ls")
If Forms("提示").Opened Then    '事先必须建立【提示】窗体
    Forms("提示").Controls("Label1").Text = "共" & RowQty2 & "条记录,有" & RowQty & "条记录已更新,开始保存......"
    Dim txt As Winform.TextBox = Forms("提示").Controls("TextBox1")
    'ls.add( "第" & e.DataRow("编号") & "条记录: " & e.DataRow("姓名") & "......." & Format( val(e.DataRow("编号"))/RowQty,"0.0%") & " ......保存完毕")
    ls.add( "编号" & e.DataRow("编号") & ": " & e.DataRow("姓名") & "......." & Format( val(e.DataRow("编号"))/RowQty,"0.0%") & " ......保存完毕")
    If ls.count > 22 Then
        ls.RemoveAt(0)      '删除ls的第一个值
    End If
    vars("i") = vars("i") + 1
    Dim str As String = String.Join(vbcrlf, ls.ToArray)
    txt.Text = str
    Application.DoEvents()
    Forms("提示").Controls("Label2").Text = "共" & RowQty2 & "条记录,需要更新" & RowQty & "已经更新" & vars("i")   '这里的变量未能显示出正确的值
End If


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


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

问题全部解决,特别感谢【大红袍】老师,为了我一个小小的问题,浪费了自己好多的休息时间,为尊重大红袍老师的劳动成果,全码最后整理:
----按钮【保存】------------
vars.add("i", Gettype(Integer),0)
vars("i") = 0
vars.add("ls", Gettype(List(of String)))
vars("ls") = new List(of String)
forms("提示").open
vars.add("count", Gettype(Integer),0)
vars("count") = 0
For Each dr As DataRow In DataTables("个人基本信息").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        vars("count") += 1
    End If
Next
For Each dr As DataRow In DataTables("个人基本信息").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        dr.save
    End If
Next
If vars("i") = 0 Then
    MessageBox.Show("数据没有变动,不需保存")
    forms("提示").Close
End If

----beforeSaveDataRow事件代码-----------------
Dim RowQty As Integer = vars("count")
Dim RowQty2 = DataTables("个人基本信息").DataRows.Count
Dim ls = vars("ls")
If Forms("提示").Opened Then    '事先必须建立【提示】窗体
    Forms("提示").Controls("Label1").Text = "开始保存有变动的数据记录......"
    Dim txt As Winform.TextBox = Forms("提示").Controls("TextBox1")
    'ls.add( "第" & e.DataRow("编号") & "条记录: " & e.DataRow("姓名") & "......." & Format( val(e.DataRow("编号"))/RowQty,"0.0%") & " ......保存完毕")
    ls.add( "编号" & e.DataRow("编号") & ": " & e.DataRow("姓名") & "......." & Format( (vars("i")+1)/RowQty,"0.0%") & " ......保存完毕")
    If ls.count > 22 Then
        ls.RemoveAt(0)      '删除ls的第一个值
    End If
    vars("i") = vars("i") + 1
    Dim str As String = String.Join(vbcrlf, ls.ToArray)
    txt.Text = str
    Application.DoEvents()
    Forms("提示").Controls("Label2").Text = "总记录:" & RowQty2 & "    需更新:" & RowQty & "    已更新:" & vars("i")   '这里的变量未能显示出正确的值
End If
If vars("i") = RowQty Then
    MessageBox.Show("数据保存完毕")
    Forms("提示").close
End If

向大红袍老师致以崇高的敬意!
[此贴子已经被作者于2015/10/12 19:48:20编辑过]

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


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

遇到一个新问题:

原来的问题经过大红袍老师的精心指点已经解决,现在发现的问题是:第一次运行时出现错误,错误提示是
                  未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
    (该提示 是 ls.add 已经出现了第一个数据记录时才出现的 )
同时,外部数据的第1条记录出现下列提示:


此主题相关图片如下:未命名.jpg
按此在新窗口浏览图片
附上各代码:
1、按钮代码:

vars.add("i", Gettype(Integer),0)
vars("i") = 0
vars.add("ls", Gettype(List(of String)))
vars("ls") = new List(of String)
vars.add("count", Gettype(Integer),0)
vars("count") = 0
MessageBox.Show( "i是" & vars("i")  & "count是 " & vars("count")  )
For Each dr As DataRow In DataTables("网络教职工").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        vars("count") += 1
    End If
Next
For Each dr2 As DataRow In DataTables("网络事业基数").DataRows
    If dr2.RowState <> DataRowState.Unchanged Then
        dr2.save
    End If
Next
For Each dr As DataRow In DataTables("网络教职工").Select("", "是否在职 desc,姓名")
'For Each dr As DataRow In DataTables("网络教职工").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        dr.save
    End If
Next
If vars("i") = 0 Then
    MessageBox.Show("数据没有变动,不需保存")
End If

2、表属性代码:
Dim RowQty As Integer = vars("count")
Dim RowQty2 = DataTables("网络教职工").DataRows.Count
Dim ls = vars("ls")
If Forms("数据上报与接受窗体").Opened Then    '事先必须建立【提示】窗体
    Forms("数据上报与接受窗体").Controls("开始保存反馈").Text = "开始保存有变动的数据记录......"
    Application.DoEvents()
    Dim txt As Winform.TextBox = Forms("数据上报与接受窗体").Controls("姓名列组")
    'ls.add( "第" & e.DataRow("编号") & "条记录: " & e.DataRow("姓名") & "......." & Format( val(e.DataRow("编号"))/RowQty,"0.0%") & " ......保存完毕")
   ls.add( "编号" & e.DataRow("排序") & ":  " & e.DataRow("是否在职") & "......." & e.DataRow("渠道") & "......" & e.DataRow("姓名") & " ......保存完毕")
    If ls.count > 22 Then
        ls.RemoveAt(0)      '删除ls的第一个值
    End If
    vars("i") = vars("i") + 1
    Dim str As String = String.Join(vbcrlf, ls.ToArray)
    txt.Text = str
    Application.DoEvents()
    Forms("数据上报与接受窗体").Controls("更新统计").Text = "总记录:" & RowQty2 & "  需更新:" & RowQty & "  已更新:" & vars("i") & "  进度:" & Format( (vars("i"))/RowQty,"0.0%") '这里的变量未能显示出正确的值
End If
If vars("i") = RowQty Then
    Forms("数据上报与接受窗体").Controls("保存结束反馈").Text = "保存结束,开始清空临时数据..."
End If

在窗体不关闭的情况下,再次运行,则不会出现错误提示,原来没有发现这个问题可能是一直在多次运行中修改,没有关闭后重新运行。敬请老师指教!
[此贴子已经被作者于2015/11/12 15:28:10编辑过]

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


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

做个出错的例子发上来。

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


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

做了个例子上传了,在窗体中运行按钮【把内部数据保存到外部数据库】时出错,但只有第一次运行时才出错,第二次运行则没有问题,除非重新启动才能看到错误。

 

登录密码单独发到大红袍老师您的信箱了。好吗?

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据存服务器出错.rar


出错提示为:

未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。

[此贴子已经被作者于2015/11/14 12:22:41编辑过]

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


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

密码发上来,没收到。

 

你看看是不是关联的问题,把所有的关联去掉以后呢?


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


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

密码发到你的QQ信箱了,没有一个关联

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