Foxtable(狐表)用户栏目专家坐堂 → [求助]填充数据


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

主题:[求助]填充数据

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


加好友 发短信
等级:一尾狐 帖子:479 积分:4505 威望:0 精华:0 注册:2008/9/4 14:40:00
[求助]填充数据  发帖心情 Post By:2012/12/23 13:19:00 [只看该作者]

大家好,学弟有个难题请大家帮帮忙,谢谢

要求:从“库存明细”表中找出不重复的[材料名称][品牌][型号]列的最新数据行(最后录入行),且[库存数量]>0的行,填充到“实时库存”表中使用,以下代码不能满足要求,请大家给予赐教,谢谢

DataTables("实时库存").DeleteFor("[出库数量] Is Null") '删除全部行,找不到删除全部行的命令,因为出库数量[出库数量]列全部都是空的

Dim Vals As List(of String())
Vals = DataTables("库存明细").GetUniqueValues("工程简称 = '"& QJDM工程简称 &"'","工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价")
For i As Integer = 0 To Vals.Count - 1
    Dim dr As DataRow = DataTables("实时库存").AddNew()
    Dim r As Row = Tables("库存明细").Current
    dr("工程简称") = Vals(i)(0)
    dr("材料类别") = Vals(i)(1)
    dr("二级类别") = Vals(i)(2)
    dr("材料名称") = Vals(i)(3)
    dr("品牌") = Vals(i)(4)
    dr("型号") = Vals(i)(5)
    dr("规格") = Vals(i)(6)
    dr("色号") = Vals(i)(7)
    dr("单位") = Vals(i)(8)
    dr("单价") = Vals(i)(9)
Next

Tables("实时库存").AllowEdit = False '锁定不允许修改数据
Tables("实时库存").OpenView("材料出库") '打开表视图"材料入库",显示设定列

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree("实时库存","材料类别|二级类别")
trv.Nodes.Insert("全部类别",0)

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


加好友 发短信
等级:一尾狐 帖子:479 积分:4505 威望:0 精华:0 注册:2008/9/4 14:40:00
  发帖心情 Post By:2012/12/23 21:35:00 [只看该作者]

各位师兄弟,大家好,帮个忙吧,谢谢啦。

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


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

1、删除全部行:
 
DataTables("表名").Clear
 
2、GetUniqueValues没有办法帮你找出最新数据行,直接用Select语句从后台调用算了:
 
Select Distinct  列1,列2,列3 From {表名}  Where 条件 Order By 日期 Desc
 
 如何用SQL语句临时提取并使用数据,请参考:

 

http://www.foxtable.com/help/topics/0696.htm


 
 
 
 


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


加好友 发短信
等级:一尾狐 帖子:479 积分:4505 威望:0 精华:0 注册:2008/9/4 14:40:00
  发帖心情 Post By:2012/12/24 14:16:00 [只看该作者]

狐爸,你好,谢谢你的回复,已反复调试以下代码, Order By 录入时间 Desc 得到的是排序方式,导入的是全部数据,我要的是不重复的材料名称其中最后录入的数据行;
其中增加的[录入时间]格式为2012-12-12 15:02:30,是为了得到最新的数据行

目地,打开“实时库存”表的窗口,自动将库存明细中不重复的材料名称等相关列,最后录入数据行(最后库存数量)填充过来,作为材料出库使用,现问题如下,烦请狐爸再次指正:
1.删除全部行的代码提示错误:“clear”不是“datatable”成员
2.以下代码等到的是所有数据行,如何排除重复行

DataTables("实时库存").DeleteFor("[出库数量] Is Null") '删除全部行,找不到删除全部行的命令,因为出库数量[出库数量]列全部都是空的

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT * From {库存明细} Where 工程简称 = '" & QJDM工程简称 & "' Order By 录入时间 Desc"
Dim Cols1() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
Dim Cols2() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
dt = cmd.ExecuteReader()
For Each dr1 As DataRow In dt.DataRows
    Dim dr2 As DataRow = DataTables("实时库存").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        dr2(Cols2(i)) = dr1(Cols1(i))
    Next
Next




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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/24 15:06:00 [只看该作者]

 第一个问题:Datatables("xxx").DataRows.Clear

 第二个问题:排除重复行,修改一下sql语句;或者是用find方法。(下面使用find方法)


Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT * From {库存明细} a Where 工程简称 = '" & QJDM工程简称 & "' And 工程简称 = Order By 录入时间 Desc"
Dim Cols1() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
Dim Cols2() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
dt = cmd.ExecuteReader()
For Each dr1 As DataRow In dt.DataRows
    if DataTables("实时库存").Find("工程简称 = '" & dr1("工程简称") & "' And 材料类别 = '" & dr1("材料类别") & "'") Is nothing  Then
        Dim dr2 As DataRow = DataTables("实时库存").AddNew()
        For i As Integer = 0 To Cols1.Length -1
            dr2(Cols2(i)) = dr1(Cols1(i))
        Next
    End If
Next

[此贴子已经被作者于2012-12-24 16:04:52编辑过]

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


加好友 发短信
等级:一尾狐 帖子:479 积分:4505 威望:0 精华:0 注册:2008/9/4 14:40:00
  发帖心情 Post By:2012/12/24 15:50:00 [只看该作者]

林版主,你好,谢谢你的回复

第一个问题:Datatables("xxx").DataRows.Clear 正确,谢谢

第二个问题:select * from 这样一张表 a where not exists (select 1 from 这样一张表 where PID=a.PID and ID>a.ID)

这段代码看不懂,好像是多表查询用的,

我现在就要从库存明细表提取不重复的[材料名称][库存数量]等列的(条件:[录入时间]的最后时间,格式为2012-12-12 150230,也就是最新的[库存数量])数据行到实时库存

麻烦你再帮我看看,谢谢啦

[此贴子已经被作者于2012-12-24 15:50:10编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/24 16:04:00 [只看该作者]

刚才那段写错了,注意红色的代码,替换成你的条件就行了
 
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT * From {库存明细} a Where 工程简称 = '" & QJDM工程简称 & "' And 工程简称 = Order By 录入时间 Desc"
Dim Cols1() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
Dim Cols2() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
dt = cmd.ExecuteReader()
For Each dr1 As DataRow In dt.DataRows
    if DataTables("实时库存").Find("工程简称 = '" & dr1("工程简称") & "' And 材料类别 = '" & dr1("材料类别") & "'") is nothing Then '在实时库存没有查找到
        Dim dr2 As DataRow = DataTables("实时库存").AddNew()
        For i As Integer = 0 To Cols1.Length -1
            dr2(Cols2(i)) = dr1(Cols1(i))
        Next
    End If
Next

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


加好友 发短信
等级:一尾狐 帖子:479 积分:4505 威望:0 精华:0 注册:2008/9/4 14:40:00
  发帖心情 Post By:2012/12/24 16:58:00 [只看该作者]

林版主,你好,很感谢你的耐心指导

删除[录入时间]条件  And 录入时间 = Order By 录入时间 Desc

可以填充数据,但[库存数量]是最旧的数据行,加入条件后出现提示如下:
现在确实搞不懂,烦请再次指正,谢谢

.NET Framework 版本:2.0.50727.5466
Foxtable 版本:2012.11.28.1
错误所在事件:
详细错误信息:
System.Data.OleDb.OleDbException: 关键字 'Order' 附近有语法错误。
   在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   在 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   在 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   在 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   在 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
   在 Foxtable.SQLCommand.ExecuteReader()
[此贴子已经被作者于2012-12-24 16:59:21编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/24 17:02:00 [只看该作者]

 你的代码是怎样写的?

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


加好友 发短信
等级:一尾狐 帖子:479 积分:4505 威望:0 精华:0 注册:2008/9/4 14:40:00
  发帖心情 Post By:2012/12/24 17:13:00 [只看该作者]

林版主,你好,真的太感谢你了,你的不厌其烦,我很是感动
现在把录入时间条件改成排序,可以得出正确的[库存数量]了,你看看能否这样写?
cmd.CommandText = "SELECT * From {库存明细} a Where 工程简称 = '" & QJDM工程简称 & "'Order By 录入时间 Desc" 

全部代码如下:

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C '设置数据源名称
cmd.CommandText = "SELECT * From {库存明细} a Where 工程简称 = '" & QJDM工程简称 & "'Order By 录入时间 Desc"
Dim Cols1() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
Dim Cols2() As String = {"工程简称","材料类别","二级类别","材料名称","品牌","型号","规格","色号","单位","单价","库存数量","录入时间"}
dt = cmd.ExecuteReader()
For Each dr1 As DataRow In dt.DataRows
    If DataTables("实时库存").Find("工程简称 = '" & dr1("工程简称") & "' And 材料名称 = '" & dr1("材料名称") & "'") Is Nothing Then '在实时库存没有查找到
        Dim dr2 As DataRow = DataTables("实时库存").AddNew()
        For i As Integer = 0 To Cols1.Length -1
            dr2(Cols2(i)) = dr1(Cols1(i))
        Next
    End If
Next
[此贴子已经被作者于2012-12-24 17:14:34编辑过]

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