以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 函数执行,程序就假死,直到处理完 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=64275) |
-- 作者:ycli368 -- 发布时间:2015/2/9 16:34:00 -- 函数执行,程序就假死,直到处理完 写了个把csv文件导入数据库的功能,单击按钮处理,程序就假死,直到处理完,这个有没有什么解决方案,实现在数据处理的同时, 还能够做其他操作!
|
-- 作者:有点甜 -- 发布时间:2015/2/9 16:36:00 -- 呃,用多线程可能可以。
具体请上传测试例子。 |
-- 作者:Bin -- 发布时间:2015/2/9 16:40:00 -- 只能用多线程来实现,上个例子吧 |
-- 作者:ycli368 -- 发布时间:2015/2/9 16:44:00 -- Dim filenamestr As String = args(0).controls("bookName").Text Dim str As String = FileSys.ReadAllText(filenamestr, Encoding.Default) \'str = str.replace(chr(13),"") Dim ary() As String = str.Split(chr(10)) Dim Total, addlist, uplist,nochange As Integer Dim lentemp As Integer Dim temp2 As String Dim dr As DataRow Dim drs As List(of DataRow) Dim updateflag As Integer \'Tables("订单表").StopRedraw() Dim nms() As String = { "订单编号","买家会员名","买家支付宝账号","买家应付货款","买家应付邮费","买家支付积分","总金额","返点积分","买家实际支付金额","买家实际支付积分","订单状态","买家留言","收货人姓名","收货地址","运送方式","联系电话","联系手机","订单创建时间","订单付款时间","宝贝标题","宝贝种类","物流单号","物流公司","订单备注","宝贝总数量","店铺Id","店铺名称","订单关闭原因","卖家服务费","买家服务费","发票抬头","是否手机订单","分阶段订单信息","定金排名","修改后的sku","修改后的收货地址","异常信息","天猫卡券抵扣","集分宝抵扣","是否是O2O交易","O2O交易类型","O2O店铺id","O2O店铺名称","O2O导购员id","O2O导购员姓名","O2O提货类型","O2O外部订单id" } Total = ary.Length - 2 addlist = 0 uplist = 0 nochange = 0 lentemp = nms.Length - 1-7 For i As Integer = 1 To ary.Length - 2 Dim s() As String = ary(i).Split(",") \'Dim nr As DataRow = DataTables("订单表").AddNew \' nr(1) = s(0).replace("""", "").trim() Dim bh As String = s(0).trim(""""," ") \'Dim dr As DataRow = DataTables("订单表").SQLFind("订单编号 = \'" & bh & "\'") drs = DataTables("订单表").SQLSelect("订单编号 = \'" & bh & "\'") \'dr = drs(0) \'messagebox.show(dr(nms(0))) If drs.count = 0 Then \'如果不存在同编号的订单 \'messagebox.show(333) Dim cmd As New SQLCommand cmd.C \'cmd.CommandText="Insert Into {订单表} ( 订单编号,买家会员名,买家支付宝账号,买家应付货款,买家应付邮费,买家支付积分,总金额,返点积分,买家实际支付金额,买家实际支付积分,订单状态,买家留言,收货人姓名,收货地址,运送方式,联系电话,联系手机,订单创建时间,订单付款时间,宝贝标题,宝贝种类,物流单号,物流公司,订单备注,宝贝总数量,店铺Id,店铺名称,订单关闭原因,卖家服务费,买家服务费,发票抬头,是否手机订单,分阶段订单信息,定金排名,修改后的sku,修改后的收货地址,异常信息,天猫卡券抵扣,集分宝抵扣,是否是O2O交易,O2O交易类型,O2O店铺id,O2O店铺名称,O2O导购员id,O2O导购员姓名,O2O提货类型,O2O外部订单id ) Values( " cmd.CommandText="Insert Into {订单表} ( 订单编号,买家会员名,买家支付宝账号,买家应付货款,买家应付邮费,买家支付积分,总金额,返点积分,买家实际支付金额,买家实际支付积分,订单状态,买家留言,收货人姓名,收货地址,运送方式,联系电话,联系手机,订单创建时间,订单付款时间,宝贝标题,宝贝种类,物流单号,物流公司,订单备注,宝贝总数量,店铺Id,店铺名称,订单关闭原因,卖家服务费,买家服务费,发票抬头,是否手机订单,分阶段订单信息,定金排名,修改后的sku,修改后的收货地址,异常信息,天猫卡券抵扣,集分宝抵扣,是否是O2O交易 ) Values( " \'messagebox.show(s(0).trim(""""," ","\'")) For m As Integer = 0 To lentemp Dim temp As String temp = s(m).trim(""""," ","\'") temp = temp.Replace("\'","") \'messagebox.show(nms(m)) \'temp = s(m).replace(" ", "") If temp = "" Then If ((m = 17) Or (m = 18)) Then temp = "\'" & Nothing & "\'" Else temp = "\'" & " " & "\'" End If Else temp = "\'" & temp & "\'" End If If m = lentemp Then cmd.CommandText = cmd.CommandText & temp & " )" Else cmd.commandtext = cmd.commandtext & temp & "," End If \'dr(nms(m)) =s(m).trim(""""," ") Next \'messagebox.show(cmd.commandtext) cmd.ExecuteNonQuery() addlist = addlist + 1 Else dr = drs(0) \'Dim drs As List(of DataRow) = DataTables("订单表").SQLSelect("订单编号 = \'" & bh & "\'") Dim Colnum As Integer \'messagebox.show(s(0).trim(""""," ","\'")) updateflag = 0 For Colnum = 1 To lentemp temp2 = s(Colnum).trim(""""," ","\'") temp2 = temp2.Replace("\'","") If temp2 = "" And Colnum = 18 Then temp2 = Nothing End If \'messagebox.show(nms(Colnum)) If temp2 <> dr(nms(Colnum)) Then \' If ((nms(Colnum) = "订单创建时间") Or (nms(Colnum) = "订单付款时间")) Then \' If temp2 = "" Then \' dr(nms(Colnum)) = Nothing \' Else \' dr(nms(Colnum)) = temp2 \' End If \' Else \'messagebox.show(222) \'messagebox.show(nms(Colnum)) dr(nms(Colnum)) = temp2 \' End If updateflag = 1 \'DataTables("订单表").SQLReplaceFor(nms(Colnum),temp2, "订单编号 = \'" & bh & "\'") End If temp2 = "" Next \'DataTables("订单表").SQLReplaceFor(nms(Colnum),temp2, "订单编号 = \'" & bh & "\'") \'messagebox.show(3) If updateflag = 1 Then DataTables("订单表").SQLUpdate(drs) uplist = uplist + 1 Else nochange = nochange + 1 End If End If Next \'Tables("订单表").ResumeRedraw() \'DataTables("订单表").LoadFilter = "[订单付款时间] = #" & Date.Today & "#" DataTables("订单表").LoadFilter = "[_Identify] Is Null" \'DataTables("订单表").LoadTop = "20" \'DataTables("订单表").LoadOrder = "订单付款时间 Desc" DataTables("订单表").Load messagebox.show("成功导入:" & Total & "条记录" & Chr(13) & Chr(10) & "更新:" & uplist & Chr(13) & Chr(10) & "增加:" & addlist & Chr(13) & Chr(10) & "未变化:" & nochange)
|
-- 作者:Bin -- 发布时间:2015/2/9 16:44:00 -- 做个可以运行的项目例子文件发上来 |
-- 作者:ycli368 -- 发布时间:2015/2/9 16:45:00 -- 我的例子里有项目的所有密码,所以只贴了导入的密码 多线程具体如何实现,如何传参数 |
-- 作者:Bin -- 发布时间:2015/2/9 16:46:00 -- 或者参考 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=30251&skin=0 |
-- 作者:ycli368 -- 发布时间:2015/2/9 16:51:00 -- 谢谢,例子确实不错我试下,它里面的函数都没有入参的,如果有参数的话是不是只能通过全局来实现 |
-- 作者:Bin -- 发布时间:2015/2/9 16:51:00 -- 可以这么做 |