以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]填充数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=27141) |
-- 作者:Gryvip -- 发布时间: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 -- 发布时间:2012/12/23 21:35:00 -- 各位师兄弟,大家好,帮个忙吧,谢谢啦。 |
-- 作者:狐狸爸爸 -- 发布时间:2012/12/24 8:52:00 -- 1、删除全部行:
http://www.foxtable.com/help/topics/0696.htm
|
-- 作者:Gryvip -- 发布时间: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 -- 发布时间: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 -- 发布时间: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 15:02:30,也就是最新的[库存数量])数据行到“实时库存”表 麻烦你再帮我看看,谢谢啦 [此贴子已经被作者于2012-12-24 15:50:10编辑过]
|
-- 作者:lin_hailun -- 发布时间: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 -- 发布时间: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 -- 发布时间:2012/12/24 17:02:00 -- 你的代码是怎样写的? |
-- 作者:Gryvip -- 发布时间: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编辑过]
|