Foxtable(狐表)用户栏目专家坐堂 → 跨表查询不改变被查表状态


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

主题:跨表查询不改变被查表状态

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
跨表查询不改变被查表状态  发帖心情 Post By:2016/1/4 14:21:00 [显示全部帖子]

现有车辆信息表一张 在表中有车辆状态一列 当前表事件

If e.DataCol.Name = "车辆状态"

    Dim dr As DataRow
    dr = DataTables("配载订单").Find("车牌 = '" & e.DataRow("车牌") & "'" )
    If dr IsNot Nothing '如果找到, 则设置各列内容
        e.DataRow("车辆状态")= "车辆运营中"
Else
        e.DataRow("车辆状态")= "车辆闲置中"
       
    End If
End If

 

这样在目录树中的车辆状态只会按配载订单当前的信息显示

我想这样在车辆信息窗口加入一个按钮 可以动态选择按哪一天的配载订单来 代码事件是这样

Dim sd As WinForm.DateTimePicker
Dim ed As WinForm.DateTimePicker
sd = e.Form.Controls("DateTimePicker1")
ed = e.Form.Controls("DateTimePicker2")
'Dim cpbh As String = e.Form.Controls("项目").Value

Dim filter As String = "1=1"
If sd.Value <> Nothing Then
    filter &= " And 出车日期 >= '" & sd.value & "'"
End If
If ed.Value <> Nothing Then
    filter &= " And 出车日期 <= '" & ed.value & "'"
End If
'If cpbh <> "" Then
    'Dim temp As String = "1=2"
    'For Each s As String In cpbh.split("/")
        'temp &= " or [项目] Like '%" & s & "%' "
    'Next
   ' filter &= " And (" & temp & ")"
' End If
If ed.value = Nothing AndAlso sd.value = Nothing Then
    filter &= " And 出车日期 = '" & Date.today & "'"
End If
DataTables("配载订单").LoadFilter=filter
DataTables("配载订单").load
DataTables("车辆信息").DataCols("车辆状态").RaiseDataColChanged()

 

这样是可以实现动态选择日期筛选 但是在另外一个界面的配载订单也会跟着转到那一天的数据 怎样才能实现既可以跨表查询又不改变被查表状态


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/4 18:04:00 [显示全部帖子]

我以为一定要重置该列才能得到最新数据 这个节点统计代码怎么写 比如 所有订单  比如车辆运营中(有多少台车在运营)

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/5 11:21:00 [显示全部帖子]

dt = b.Build(False) '参数设置为False,生成一个临时表,不在主界面显示
'然后根据统计表生成目录树
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "车辆状态|车型|车牌")
trv.StopRedraw
For Each nd As WinForm.TreeNode In trv.AllNodes
    Dim clzt As String = nd.DataRow("车辆状态")
    Dim cx As String = nd.DataRow("车型")
    Dim cp As String = nd.DataRow("车牌")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "(" & dt.Compute("Count(订单数)","车辆状态") & "条)"

        Case 1
            nd.Text = nd.text &"(" & dt.Compute("Count(订单数)","车型") & "条)"
        Case 2
            nd.Text = nd.text & "(" & dt.Compute("Count(车牌)" ) & "条)"
       ' Case 3
           ' nd.Text = nd.text & "(" & nd.DataRow("订单数") & "条)"
    End Select
Next
trv.Nodes.Insert("所有车辆","所有车辆(" & dt.Compute("Sum(订单数)") & "条)",0)
trv.ResumeRedraw
'Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
'trv.BuildTree("车辆信息", "车辆状态|车型|车牌")
'trv.Nodes.Insert("所有车辆",0)

 

弄来弄去 还是一头雾水 说车辆状态不是布尔值类型

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/5 13:23:00 [显示全部帖子]

Dim b As New GroupTableBuilder("统计表1",DataTables("车辆信息"))
b.Groups.AddDef("车辆状态")
b.Groups.AddDef("车型")
b.Groups.AddDef("车牌")
b.Totals.AddDef("车辆状态",AggregateEnum.Count,"订单数") '根据客户列来统计记录数,也就是订单数
dt = b.Build(False)
 '参数设置为False,生成一个临时表,不在主界面显示
'然后根据统计表生成目录树
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "车辆状态|车型|车牌")
trv.StopRedraw
For Each nd As WinForm.TreeNode In trv.AllNodes
    Dim clzt As String = nd.DataRow("车辆状态")
    Dim cx As String = nd.DataRow("车型")
    Dim cp As String = nd.DataRow("车牌")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "(" & dt.Compute("Count(订单数)","车辆状态 = '" & clzt  & "'") & "条)"

        Case 1
            nd.Text = nd.text &"(" & dt.Compute("Count(订单数)","车辆状态 = '" & clzt  & "'"and "车型 = '" & cx & "'") & "条)" 
        Case 2
            nd.Text = nd.text & "(" & dt.Compute("Count(车牌数)" ) & "条)"
       ' Case 3
           ' nd.Text = nd.text & "(" & nd.DataRow("订单数") & "条)"
    End Select
Next
trv.Nodes.Insert("所有车辆","所有车辆(" & dt.Compute("Sum(订单数)") & "条)",0)
trv.ResumeRedraw

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2015.12.22.1
错误所在事件:窗口,车辆信息,AfterLoad
详细错误信息:
从字符串“车辆状态 = '车辆闲置中'”到类型“Long”的转换无效。
输入字符串的格式不正确。


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/5 15:00:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:2016-01-05_150309.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/5 15:02:00 [显示全部帖子]

是临时表没统计到车型吗? 但是false之下可以找到对应的车牌

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/5 17:54:00 [显示全部帖子]

Dim Cols1() As String = {"甲方客户","项目","下单日期","MK号","DO号","城市","客户","送货地址","物料代码","数量","体积","重量","承运商","司机","车牌","车数","车型","出车日期","车辆属性","备注","特殊要求","司机搬运费","跟车搬运","人数","订单编号","异常描述","处理结果","责任方"}
Dim Cols2() As String = {"甲方客户","项目","下单日期","MK号","DO号","城市","客户","送货地址","物料代码","数量","体积","重量","承运商","司机","车牌","车数","车型","出车日期","车辆属性","备注","特殊要求","司机搬运费","跟车搬运","人数","订单编号","异常描述","处理结果","责任方"}
Dim count As Integer = 0
Dim ls As new List(of Row)
Dim dic As new Dictionary (Of DataRow, Row)
systemready = False
For Each r As Row In Tables("客服跟单").GetCheckedRows
    If r("订单状态") = "配送妥投 " Then
        Dim Filter = "[订单编号] = '" & r("订单编号") & "'"
        Dim dr As DataRow = DataTables("回单异常").sqlFind(filter)
        If dr Is Nothing Then
            ls.Add(r)
            count += 1
        Else
            dic.add(dr, r)
        End If
    Else
        e.Cancel = True
    End If
Next

Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
If ls.count > 0 Then
    p.Visible = True
    p.Maximum =  ls.Count - 1 '设置最大值
    p.Minimum = 0 '设置最小值
    p.Value = 0 '设置当前值
End If
Dim idx As Integer = 0
DataTables("客服跟单").StopRedraw
For Each r As Row In ls
    Dim dr As DataRow = DataTables("回单异常").AddNew
    For i As Integer = 0 To Cols1.Length -1
        If r.IsNull(Cols1(i)) Then
            dr(Cols2(i)) = Nothing
        Else
            dr(Cols2(i)) = r(Cols1(i))
           
        End If
       
    Next
    idx += 1
    p.Value = idx
r("订单状态") = "已提交"
   ' r.Remove()
Next
For Each key As DataRow In dic.Keys
    Dim r As Row = dic(key)
    Dim dr As DataRow = key
    For i As Integer = 0 To Cols1.Length -1
        If r.IsNull(Cols1(i)) Then
            dr(Cols2(i)) = Nothing
        Else
            dr(Cols2(i)) = r(Cols1(i))
        End If
    Next
Next

DataTables("客服跟单").ResumeRedraw
p.Visible = False

systemready = True
msgbox("共有 "& count &" 条数据提交" )
Tables("客服跟单").save
Tables("客服跟单").ClearCheckedRows

 

已发布的项目 数据死活提交不过去 没报错 回单异常没有任何一条数据 不存在相同订单编号  订单状态已是配送妥投 一直都是0条数据提交


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/6 8:57:00 [显示全部帖子]

回单异常已经初始化过 仍然传不过去

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/6 9:52:00 [显示全部帖子]

真是这个疏忽 导致了这样的异常

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2016/1/6 11:32:00 [显示全部帖子]

Dim dt As DataTable = DataTables("应付款项")
Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
Dim filter As String = Tables("应付款项").Filter
filter = iif(filter>"", filter, "1=1")
Dim arys As List(of String()) = dt.GetValues( "司机|车牌|出车日期", "出车日期 is not null and 运费 is null and 点费 is null and " & filter)
If arys.count > 0 Then
    p.Visible = True
    p.Maximum =  arys.Count - 1 '设置最大值
    p.Minimum = 0 '设置最小值
    p.Value = 0 '设置当前值
End If

Dim idx As Integer = 0
DataTables("应付款项").StopRedraw

For Each ary() As String In  arys
    idx += 1
    p.Value = idx '加在这里
    Dim fil As String = "司机 = '" & ary(0) & "' and 车牌 = '" & ary(1) & "' and 出车日期 = #" & ary(2) & "#"
    Dim drs As List(of DataRow) = dt.Select(fil)
    For Each dr As DataRow In drs
        If DataTables("价目表").DataCols.Contains("车型_" & dr("车型")) Then
            Dim jdrs As List(of DataRow) = DataTables("价目表").Select("项目 like '%" & dr("项目") & "%' and 城市 like '%" & dr("城市") & "%'")
            For Each jdr As DataRow In jdrs
                If dr("地点") Like "*" & jdr("地点") & "*" Then
                    dr("运费") = jdr("车型_" & dr("车型"))
                    Exit For
                End If
再请教一下

一.这个城市 like '%" & dr("城市") & "%'") 现在是 价目表中是:广州  应付款项是:广州市  我必须把广州改为广州市才能计算 

二.出车日期 is not null and 运费 is null and 点费 is null and  " & filter  计算之后不一定 运费与点费都有值 任何一行只要这两个满足条件就能重算 我想只计算未锁定与车辆属性不是翔越的行 要怎么加代码 我这样改计算时报错

Dim arys As List(of String()) = dt.GetValues( "司机|车牌|出车日期", "出车日期 is not null and 运费 is null and 点费 is null and 车辆属性 <> '翔越' and e.DataRow.Locked = false " & filter)
司机后缺少操作数

 


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