以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 异步函数AsyncExecute可否应用后台数据的处理SQLFind、SQLAddNew等 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=193279) |
-- 作者:fntfgz -- 发布时间:2024/8/31 14:41:00 -- 异步函数AsyncExecute可否应用后台数据的处理SQLFind、SQLAddNew等 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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/8/31 15:23:00 -- 首先,这种代码不应该放到Initialize,而是放到AfterOpenProject事件 其次,上面两种表格,以及SQLUpdate、SQLAddNew等都无法在异步函数里使用。 建议把1楼的代码放到异步函数里,然后使用临时变量,不要使用全局变量。异步函数里建议都使用SQLCommand处理
[此贴子已经被作者于2024/8/31 15:23:34编辑过]
|
-- 作者: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/9/1 19:53:00 -- 客户端是异步了。但是服务器也是要一条一条的接收数据的呀,数据库也是要一条一条的执行的呀! 如果当前表和上面“专业_自选”表等都是同一个数据库的,全部都使用sql处理即可,没有必要逐行处理
|
-- 作者:fntfgz -- 发布时间:2024/9/1 20:52:00 -- “如果当前表和上面“专业_自选”表等都是同一个数据库的,全部都使用sql处理即可,没有必要逐行处理” 老师,这两个表是在一个数据库,全部使用sql处理,我不太懂,还请老师详细说一下,谢谢?? |
-- 作者:有点蓝 -- 发布时间: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 |