Foxtable(狐表)用户栏目专家坐堂 → 查询表直接操作


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

主题:查询表直接操作

美女呀,离线,留言给我吧!
bm
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:437 积分:3463 威望:0 精华:0 注册:2011/9/13 23:27:00
查询表直接操作  发帖心情 Post By:2013/11/6 19:42:00 [只看该作者]

哪位高手帮忙优化下代码。Tables("窗口1_Table3")是查询表。(二个表查询的)

Tables("窗口1_Table3").Fill("Select {车辆费用}.[_Identify],业务编号,客户,{车辆费用}.作业日期,关单号,{车辆费用}.箱型箱量,[流向_提箱点],[流向_门点],[流向_还箱点],支出项目,金额,收款人,{车辆费用}.审核号,{车辆费用}.审核日期,审核 From {业务大表} Inner JOIN {车辆费用} ON {车辆费用}.[业务编号] = {业务大表}.[编号] WHERE {车辆费用}.[_Identify] Is Null","ZHANG",True)
总感觉这么做属于非主流。

 

If e.form.controls("收款人").value = "" Then
     messagebox.show("请输入或选择收款人.")
    Return
End If
If Tables("窗口1_Table3").Current Is Nothing Then
MessageBox.Show("无数据!")
Return
End If
Dim sum As Double = Tables("窗口1_Table3").Compute("Sum(金额)")
  Dim Result As DialogResult
  Result = MessageBox.Show("确认审核.金额为" & sum, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
   If Result = DialogResult.Yes Then
    Dim drs As List(Of DataRow) = DataTables("窗口1_Table3").Select("")
         For Each dr As DataRow In drs
           Dim zn As String = dr("审核")
           If  zn =True Then
             MessageBox.Show("包含已审核,审核失败.")
            Return
            Exit For
           End If
         Next
      
       Tables("已审核费用").Filter = ""
       Tables("已审核费用").Sort = ""
       With Tables("已审核费用")
         .Position = .Rows.Count - 1
       End With

         Dim d As Date = Date.Today
         Dim y As Integer = d.Year
         Dim m As Integer = d.Month
         Dim Days As Integer = Date.DaysInMonth(y,m)
         Dim fd As Date = New Date(y,m,1)
         Dim ld As Date = New Date(y,m,Days)
         Dim bh As String = "CL" & Format(d,"yyMM")
         Dim idx As Integer
         Dim max As String
         Dim dr8 As DataRow = DataTables("编号").DataRows(0)
         max = dr8("车辆审核号")
         If  max > "" Then
             If max.StartsWith(bh) Then
             idx = CInt(max.Substring(6,3)) + 1
             Else
             idx = 1
             End If
          Else
             idx = 1
          End If
            dr8("车辆审核号")=bh & Format(idx,"000")
            dr8.save()
            Dim r As Row = Tables("已审核费用").AddNew
            r("审核号") = dr8("车辆审核号")
            r("类别")= "支出"
            r("审核金额")= sum
            r("摘要")= "出车费运费及代付费用"
            r("科目")= "业务支出"
            r("收付款人")= e.form.controls("收款人").value
            r.Save()
    Dim ids As String
    For Each dr1 As DataRow In DataTables("窗口1_Table3").DataRows
        ids = ids & "," & dr1("_Identify")
            dr1("审核") = True
            dr1("审核号")= r("审核号")
            dr1("审核日期") = Date.Today
    Next
    ids= ids.Trim(",")
    Dim dt1 As DataTable
    Dim cmd1 As New SQLCommand
    cmd1.C
    cmd1.CommandText = "Select [_Identify],审核,审核号,审核日期 From {车辆费用} Where [_Identify] In (" & ids & ")"
    dt1 = cmd1.ExecuteReader(True)
    For Each d2 As DataRow In dt1.DataRows
    d2("审核") = True
    d2("审核号")= r("审核号")
    d2("审核日期") = Date.Today
    Next
    dt1.Save()
   End If


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


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

 无从下手图片点击可在新窗口打开查看

 回到顶部
美女呀,离线,留言给我吧!
bm
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:437 积分:3463 威望:0 精华:0 注册:2011/9/13 23:27:00
希望再看看  发帖心情 Post By:2013/11/6 20:35:00 [只看该作者]

就是 表a 是要进行批量操作的。表b不需要。

但是只看表a不完整。

SQLTable只能是一个表生成(但是如果用一个表内容不完整),所以只能用SQLQuery

但是SQLQuery是不能保存的。

所以

第一步,只能通过代码生成SQLQuery(这样看的就比较清楚)

第二部,批量操作代码生成的SQLQuery。(但是只是表面操作成功了。)

第三部,通过批量操作SQLCommand,改变数据库。(根据表a的[_Identify]列)

这样做是不是太繁琐。有没有更好的办法


 回到顶部
美女呀,离线,留言给我吧!
bm
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:437 积分:3463 威望:0 精华:0 注册:2011/9/13 23:27:00
用了一段时间没有出现错误  发帖心情 Post By:2013/11/6 20:39:00 [只看该作者]

但是感觉相当非主流。能不能有其他办法
[此贴子已经被作者于2013-11-6 20:39:37编辑过]

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


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

为什么一定要连接两个表?一个表A,一个关联表表A.表B,这样也基本满足需求的。

如果要用查询表,保存只能是自己取值和保存值了。

 回到顶部
美女呀,离线,留言给我吧!
bm
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:437 积分:3463 威望:0 精华:0 注册:2011/9/13 23:27:00
  发帖心情 Post By:2013/11/6 20:54:00 [只看该作者]

用关联表也可以生成SQLTable的吗?

批量操作有很多条的。一个一个太麻烦了

 

[此贴子已经被作者于2013-11-6 20:56:10编辑过]

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


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

 表A和表B,数据才完整。表A表B关联以后,数据不也就完整了么。虽然这样显示不太直观,但操作方便。

 回到顶部
美女呀,离线,留言给我吧!
bm
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:437 积分:3463 威望:0 精华:0 注册:2011/9/13 23:27:00
  发帖心情 Post By:2013/11/6 21:04:00 [只看该作者]

如果表b有100多条,表a只有10几条。表a不要操作。表b全部要操作。那不是相当麻烦而且是要批量的奥。

而且还要

Tables("已审核费用").Filter = ""
       Tables("已审核费用").Sort = ""
       With Tables("已审核费用")
         .Position = .Rows.Count - 1
       End With

         Dim d As Date = Date.Today
         Dim y As Integer = d.Year
         Dim m As Integer = d.Month
         Dim Days As Integer = Date.DaysInMonth(y,m)
         Dim fd As Date = New Date(y,m,1)
         Dim ld As Date = New Date(y,m,Days)
         Dim bh As String = "CL" & Format(d,"yyMM")
         Dim idx As Integer
         Dim max As String
         Dim dr8 As DataRow = DataTables("编号").DataRows(0)
         max = dr8("车辆审核号")
         If  max > "" Then
             If max.StartsWith(bh) Then
             idx = CInt(max.Substring(6,3)) + 1
             Else
             idx = 1
             End If
          Else
             idx = 1
          End If
            dr8("车辆审核号")=bh & Format(idx,"000")
            dr8.save()
            Dim r As Row = Tables("已审核费用").AddNew
            r("审核号") = dr8("车辆审核号")
            r("类别")= "支出"
            r("审核金额")= sum
            r("摘要")= "出车费运费及代付费用"
            r("科目")= "业务支出"
            r("收付款人")= e.form.controls("收款人").value
            r.Save()
    Dim ids As String
 

[此贴子已经被作者于2013-11-6 21:07:09编辑过]

 回到顶部
美女呀,离线,留言给我吧!
bm
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:437 积分:3463 威望:0 精华:0 注册:2011/9/13 23:27:00
  发帖心情 Post By:2013/11/7 0:18:00 [只看该作者]

简单点讲。就是直接在查询表编辑数据(只是为了看到)。然后通过SQLCommand。直接改变后天数据。可行伐。会不会容易造成错误。有没有其他方法

 回到顶部
帅哥,在线噢!
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/7 8:35:00 [只看该作者]

如果不想写SQL语句来保存修改,那么表A、表B和查询表都加载,将查询表的AllowEdit属性设置为True,设置查询表的DataColchanged事件,捕获用户所做的修改,然后在表A、表B中找出对应的行写入用户做出的修改,最后保存表A和表B即可。

 

 


 回到顶部
总数 11 1 2 下一页