Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共6 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:异步函数AsyncExecute可否应用后台数据的处理SQLFind、SQLAddNew等

1楼
fntfgz 发表于:2024/8/31 14:41:00
1,我在Initialize中生一个全局变量DataTable表“_dt河北省网报日志”,代码如下:

Dim cmd As New SQ LCommand

cmd.C

cmd.CommandText = "SEL ECT * From {河北省_网报日志} where [_Identify] <0"

_dt河北省网报日志 = cmd.ExecuteReader(True)


2,我还有普通的DataTable表“abc”


请问对于这两种DataTable表,我可以在异步函数AsyncExecute中使用SQLUpdate、SQLAddNew等后台处理命令对这两种情况的表进行查询,更新,新增等操作吗?



[此贴子已经被作者于2024/8/31 14:41:29编辑过]
2楼
有点蓝 发表于:2024/8/31 15:23:00
首先,这种代码不应该放到Initialize,而是放到AfterOpenProject事件

其次,上面两种表格,以及SQLUpdate、SQLAddNew等都无法在异步函数里使用。

建议把1楼的代码放到异步函数里,然后使用临时变量,不要使用全局变量。异步函数里建议都使用SQLCommand处理
[此贴子已经被作者于2024/8/31 15:23:34编辑过]
3楼
fntfgz 发表于:2024/8/31 19:15:00
老师,我按您的思路写了一个“专业_打印增删异步”的函数,内容如下:
Dim zyid As String = Args(0) '专业id
Dim ksid As String = Args(1) '考生联系电话
Dim ksxm As String = Args(2) '考生姓名
Dim teacher As String = Args(3) '指导老师
Dim cmd As New SQLCommand
cmd.C
cmd.CommandText = "Sele ct Count(*) From {专业_自选} Where 考生id='" & ksid & "' and id='" & zyid & "'"
Dim count As Integer = cmd.ExecuteScalar
If count = 0 Then
    cmd.CommandText = "Se lect 科类,批次,学校代号,学校名称,专业代号,专业名称,专业简注 from {河北省_志愿填报} Where id='" & zyid & "'"
    Dim Values = cmd.ExecuteValues
    cmd.CommandText = "Inser t Into 专业_自选 (科类,批次,学校代号,学校名称,专业代号,专业名称,专业说明,id,考生id,考生姓名,填加时间,指导老师) Values(?,?,?,?,?,?,?,?,?,?,?,?)"
    cmd.Parameters.Add("@科类", Values("科类"))
    cmd.Parameters.Add("@批次", Values("批次"))
    cmd.Parameters.Add("@学校代号", Values("学校代号"))
    cmd.Parameters.Add("@学校名称", Values("学校名称"))
    cmd.Parameters.Add("@专业代号", Values("专业代号"))
    cmd.Parameters.Add("@专业名称", Values("专业名称"))
    cmd.Parameters.Add("@专业说明", Values("专业简注"))
    cmd.Parameters.Add("@id", zyid)
    cmd.Parameters.Add("@考生id", ksid)
    cmd.Parameters.Add("@考生姓名", ksxm)
    cmd.Parameters.Add("@填加时间", Date.Now)
    cmd.Parameters.Add("@指导老师", teacher)
    cmd.ExecuteNonQuery
    
Else
    cmd.CommandText = "DE LETE FROM {专业_自选} Where 考生id='" & ksid & "' and id='" & zyid & "'"
    cmd.ExecuteNonQuery()
End If

调用异步函数代码如下,此代码我放在了“DataColChanged”事件中:
     Functions.AsyncExecute("专业_打印增删异步", e.DataRow("id"), Vars("联系电话"), vars("姓名"), Vars("指导老师"))

当我对当前表1000行操作时,假如需要往“专业_自选”表中增加1000行数据,我在查询“专业_自选”表中记录的条数状态,发现会显示“100,150、203、486。。。。”也是慢慢增加的过程,并没有瞬间这1000行就增加到“专业_自选”表中,既然是单独的线程,应该和增加一条的时间是相同的呀,为啥感觉还和单线程差不多呢

[此贴子已经被作者于2024/8/31 19:27:56编辑过]
4楼
有点蓝 发表于:2024/9/1 19:53:00
客户端是异步了。但是服务器也是要一条一条的接收数据的呀,数据库也是要一条一条的执行的呀!

如果当前表和上面“专业_自选”表等都是同一个数据库的,全部都使用sql处理即可,没有必要逐行处理
5楼
fntfgz 发表于:2024/9/1 20:52:00
“如果当前表和上面“专业_自选”表等都是同一个数据库的,全部都使用sql处理即可,没有必要逐行处理” 老师,这两个表是在一个数据库,全部使用sql处理,我不太懂,还请老师详细说一下,谢谢??
6楼
有点蓝 发表于:2024/9/1 21:06:00
我不清楚表结构和数据是怎么样的,大概:比如当前表名称为表A

Insert Into 专业_自选 (科类,批次,学校代号,学校名称,专业代号,专业名称,专业说明,id,考生id,考生姓名,填加时间,指导老师) Select 科类,批次,学校代号,学校名称,专业代号,专业名称,专业简注,b.id,b.考生id,b.考生姓名,b.填加时间,b.指导老师 from {河北省_志愿填报} as a inner join 表A as b on a.考生id=b.考生id and a.id=b.id where not exists (select * FROM {专业_自选} as c  Where b.考生id=c.考生id and b.id=c.id)

DELETE FROM {专业_自选} as a inner join 表A as b  Where a.考生id=b.考生id and a.id=b.id


共6 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02734 s, 2 queries.