以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  查询超时异常请教  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=186224)

--  作者:ljh29206
--  发布时间:2023/4/14 11:25:00
--  查询超时异常请教
 用foxtable 做数据采集 ,

采集的数量量大  ,目前这个表 "YW_生产参数"  已经超过300万条记录

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

数据保存的时候,现在经常提示异常 , 数据加载失败!

    For  I As Integer  = 0 To values2.length -1
        Dim drf2 As DataRow = DataTables("YW_模具参数明细").SQLFind("参数点位 = \'" & values2(i).Split(":")(0) & "\' and 主表guid = \'" & DataTables("表C").DataRows(8)("数值") & "\' and 是否读取 = \'是\' and 采集频率 = \'一模一回\'")
        
        If drf2 IsNot Nothing Then
            Dim dra As DataRow =  DataTables("YW_生产参数").AddNew()
            last_identify = dra("_identify")
            dra("guid") = Guid.NewGuid.ToString
            dra("创建人guid") = drf2("主表guid")
            dra("创建日期") = Date.Now
            dra("记录时间") = Date.now
            dra("机台号") = drf("机台号")
            dra("机台名称") = drf("机台名称")
            dra("机台guid") = drf("guid")
            dra("模具名称") = dr_now2("模具名称")
            dra("模具编号") = dr_now2("模具编号")
            dra("模具guid") = dr_now2("guid")
            dra("参数名称") = drf2("参数名称")
            dra("参数点位") = drf2("参数点位")
    DataTables("YW_生产参数").save

代码应该是没有问题的.

但不知道怎么处理好
[此贴子已经被作者于2023/4/14 12:13:11编辑过]

--  作者:cd_tdh
--  发布时间:2023/4/14 11:33:00
--  
300万用sqlfind,服务器估计遭不住,可以用sql语句,条件加载的形式,先查询符合条件的行,在更新符合条件的行。
可以看看临时表数据更新的方式
 
[此贴子已经被作者于2023/4/14 11:35:33编辑过]

--  作者:有点蓝
--  发布时间:2023/4/14 11:39:00
--  
1、"YW_生产参数"不要加载数据:http://www.foxtable.com/webhelp/topics/1268.htm,或者改为分页加载

新增的数据保存后,使用下面方法加载空表,保持不加载数据
DataTables("YW_生产参数").loadfilter = "[_identify] is null"
DataTables("YW_生产参数").load

2、"YW_模具参数明细"数据有多少?如果在1W以下建议全部加载,使用find查询,不需要使用sqlfind

3、改为使用SqlServer,参考这种方法批量新增数据
http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=147288
或者:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=159738&replyID=&skin=1

--  作者:ljh29206
--  发布时间:2023/4/14 12:21:00
--  
谢谢,2位回复


另外蓝版问下

通过

Dim cmd As new SQLCommand
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "Insert Into 订单 (客户, 日期, 订单编号) Values(?,?,?)"
cmd
.Parameters.Add("@日期","01")
cmd
.Parameters.Add("@客户",Date.Today)
cmd
.Parameters.Add("@p",100)
cmd
.ExecuteNonQuery

这种方式



for

写在这里

next
里面嵌套进去 这方式 行否?  是否是最原始的方法呢
[此贴子已经被作者于2023/4/14 12:28:00编辑过]

--  作者:有点蓝
--  发布时间:2023/4/14 13:31:00
--  
自己试试不就知道了。这种方式插入数据和使用AddNew()新增保存效率其实没有多少区别