以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  查询与赋值并存  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=73074)

--  作者:阿福
--  发布时间:2015/8/11 22:43:00
--  查询与赋值并存
For Each a As String In DataTables("母猪基本信息").SQLGetValues("编号")
Dim dr As DataRow = DataTables("母猪分娩断奶信息").SQLFind("[sys_user] = \'" & user.Name & "\' and [编号] = \'" & a & "\'","配种日期 desc")
If dr IsNot Nothing Then
If dr.IsNull("分娩_日期") Then
Dim dt As DataRow = DataTables("母猪转产房").AddNew()
dt("编号") = dr("编号")
Dim v As Date = dr("配种日期").adddays(114)
dt("预计分娩日期") = v
End If
End If
Next

假如Dim dt As DataRow = DataTables("母猪转产房").AddNew(),增加10000行,那么就要花300多秒,可能是因为查询与赋值并存的原因导致效率低,所以恳请老师帮我改一下代码,提高效率!

--  作者:大红袍
--  发布时间:2015/8/11 22:48:00
--  

 你这个不是查询和赋值并存。你两个是不同的表。

 

 慢的原因是你用了 SQLFind,改成find更好(也就是把表的数据都加载出来),这样比直接用sqlfind效率要高。


--  作者:阿福
--  发布时间:2015/8/11 22:53:00
--  
谢谢大红袍老师,还有其他方法?因为全部加载可能要100万条数据,也很费时间!
--  作者:大红袍
--  发布时间:2015/8/11 23:07:00
--  
以下是引用阿福在2015/8/11 22:53:00的发言:
谢谢大红袍老师,还有其他方法?因为全部加载可能要100万条数据,也很费时间!

 

那就只能用sql语句来处理了。

 

这句,把两表连接起来,得到分娩是空值的记录

 

select * fr om {基本信息} as a left join {断奶信息} as b on a.编号 = b.编号 where sys_user = \'张三\' and 分娩_日期 is null

 

然后,你可以根据这个表往 母猪转产房 增加行(用代码的方法或sql语句都可以)

 

insert into {母猪转产房} (编号, 预计分娩日期) select a.编号, b.配种日期 fr om {基本信息} as a left join {断奶信息} as b on a.编号 = b.编号 where sys_user = \'张三\' and 分娩_日期 is null


--  作者:大红袍
--  发布时间:2015/8/11 23:09:00
--  

如果你对sql语句熟悉,处理起来是很快的效率。

 

测试sql语句参考 http://www.foxtable.com/help/topics/1484.htm

 


--  作者:大红袍
--  发布时间:2015/8/11 23:12:00
--  
 最好是能做例子+数据上来测试。
--  作者:阿福
--  发布时间:2015/8/11 23:13:00
--  
谢谢大红袍老师指点,这么晚还没睡,辛苦了!
--  作者:阿福
--  发布时间:2015/8/12 10:04:00
--  
大红袍老师,我在“窗口1_table1”,里需要多表查询可以保存编辑,
如果设置表类型成

sqltable,语句为:
但是SQLTable的Select语句只能取一个表的数据

SQLQuery
但是数据又不能编辑和保存,

select语句为空,窗口中的afterload事件设置:sqlcommand
但是数据还是又不能编辑和保存,

请问老师有什么办法?


--  作者:阿福
--  发布时间:2015/8/12 10:07:00
--  
”Select {母猪分娩断奶信息}.[sys_user], {母猪分娩断奶信息}.[_identify], {母猪分娩断奶信息}.[编号], 胎次, 配种日期, 预计分娩日期, 进产房日期, 栋舍 As 移入栋舍, 执行人, 备注 FR OM {母猪分娩断奶信息} LEFT JOIN  {母猪转产房} ON {母猪分娩断奶信息}.[sys_user] = {母猪转产房}.[sys_user] And {母猪分娩断奶信息}.[编号] = {母猪转产房}.[编号] ORDER BY 配种日期"


--  作者:大红袍
--  发布时间:2015/8/12 10:16:00
--  

多表不能一起编辑保存的。

 

如果编辑保存,就要自己编写代码保存了。

 

比如保存按钮:循环每行数据,如果修改了(rowstate属性),就取出两表的主键,查找到对应的行,把值设置进去(sqlFind方法)保存;如果是新增的情况,就直接新增一行数据保存