以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]sqlfind查询赋值慢  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=177889)

--  作者:洮沙
--  发布时间:2022/6/8 16:07:00
--  [求助]sqlfind查询赋值慢

老师,用以下代码查询“进价(500行)”和“报表(400行)”表最近一次关联行赋值到“产品表(200)”,代码执行慢的很,

For Each dr As DataRow In DataTables("产品").DataRows
    If dr IsNot Nothing Then
        Dim dr1 As DataRow
        dr1 = DataTables("进价").SQLFind("合成名称 = \'" & dr("合成名称") & "\'", "进货日期 Desc")
        If dr1 IsNot Nothing Then
            dr("最新进价_进货日期") = dr1("进货日期")
            dr("最新进价_进价") = dr1("进价")
        End If
        Dim dr2 As DataRow
        dr2 = DataTables("报价").SQLFind("合成名称 = \'" & dr("合成名称") & "\'", "报价日期 Desc")
        If dr1 IsNot Nothing Then
            dr("最新报价_报价日期") = dr2("报价日期")
            dr("最新报价_报价") = dr2("报价")
        End If
    End If
Next

麻烦问一下,可否有替代思路或者优化代码?


--  作者:有点蓝
--  发布时间:2022/6/8 16:13:00
--  
方法1、把数据都加载进来,然后使用Find,再看看:http://www.foxtable.com/webhelp/topics/2225.htm
2、使用sql,类似
update 产品 set 最新进价_进货日期 = (select max(进货日期) from 进价 where 合成名称=产品.合成名称
update 产品 set 最新进价_进价 = (select top 1 进价 from 进价 where 合成名称=产品.合成名称 order by 进货日期 Desc

--  作者:洮沙
--  发布时间:2022/6/8 16:49:00
--  

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.txt

老师用以上代码,出现如下错误提示,麻烦看一下,

S ELECT语句 确实是我的短处,实在看不明白了。

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.6.7.1
错误所在事件:
详细错误信息:
操作必须使用一个可更新的查询。



--  作者:有点蓝
--  发布时间:2022/6/8 16:51:00
--  
sql需要提供实例测试
--  作者:洮沙
--  发布时间:2022/6/8 16:52:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:源码_产品进(报)价查询系统.zip

就是这个项目,麻烦您把SELECT语句改一下,做个样就行了,我实在搞不明白了。

 

[此贴子已经被作者于2022/6/8 16:53:17编辑过]

--  作者:有点蓝
--  发布时间:2022/6/8 17:16:00
--  
access不支持这种更新的SQL用法,只能加载后处理了
--  作者:洮沙
--  发布时间:2022/6/8 17:21:00
--  

知道了。谢谢!