当前位置:编程学习 > VB >>

网页打开要好长时间,可能查询过多 时间过长 怎么解决 代码本身好像没逻辑错误,高手给个解决的办法

网页打开要好长时间,可能查询过多 时间过长 怎么解决 代码本身好像没逻辑错误,高手给个解决的办法,rs2那个查询执行了大概500来次网页就显示超时了,有什么办法能优化一下那句查询吗



if Lostmaxmin>0 then '有去掉头尾
set rs1=rsuser("SELECT DISTINCT nianji,banji,nianji & banji AS bj FROM data order by nianji,banji")
if not(rs1.bof and rs1.eof) then
kemu=split("yuwen|shuxue|yingyu|kexue|shehui|sizheng|tiyu|meishu|yinyue|diannao|zhsj|lj|yjxxx|yyky","|")
call rsuser("delete from datatemp") 
set rs3=rsuser("SELECT * from datatemp")
do until rs1.eof
rs3.addnew
rs3("nianji")=rs1("nianji")
rs3("banji")=rs1("banji")
for i=1 to 14
rs2=rsuser("select avg(" & kemu(i-1) &") from (select * from data where id not in(select top " & Lostmaxmin &" percent id from data where nianji & banji='" & rs1("bj") & "' order BY " & kemu(i-1) & ",id) and id not in(select top " & Lostmaxmin & " percent id from data where nianji & banji='" & rs1("bj") & "' order BY " & kemu(i-1) & ",id)) where nianji & banji='" & rs1("bj") & "'")
set rs2=rsuser("select avg(" & kemu(i-1) &") from (select * from data where id not in(select top " & Lostmaxmin &" percent id from data where nianji & banji='" & rs1("bj") & "' order BY " & kemu(i-1) & ",id) and id not in(select top " & Lostmaxmin & " percent id from data where nianji & banji='" & rs1("bj") & "' order BY " & kemu(i-1) & " desc,id)) where nianji & banji='" & rs1("bj") & "'")

if isnull(rs2(0)) then '百分比过高,数据为空
rs3(2+i)=0
else
rs3(2+i)=rs2(0)
end if
rs2.close
set rs2=nothing
next

'rs3.update
rs1.movenext
loop
rs3.close
end if
rs1.close
response.End
set rs1=("select * from datatemp order by nianji,banji")
else
set rs1=rsuser("SELECT nianji,banji,avg(yuwen) ,avg(shuxue),avg(yingyu),avg(kexue) ,avg(shehui) ,avg(sizheng) ,avg(tiyu) ,avg(meishu) ,avg(yinyue) ,avg(diannao),avg(zhsj) ,avg(lj) ,avg(yjxxx) ,avg(yyky) from data group by nianji,banji") 
end if --------------------编程问答-------------------- 不用记录集,用cn.Excute 和SQL语句中的Insert语句 --------------------编程问答-------------------- --------------------编程问答-------------------- 能说的具体点吗,兄弟
引用 1 楼 dbcontrols 的回复:
不用记录集,用cn.Excute 和SQL语句中的Insert语句
--------------------编程问答-------------------- Execute 方法 (ADO Command)
      

执行在 CommandText 属性中指定的查询、SQL 语句或存储过程。

语法

对于按行返回的 Command:

Set recordset = command.Execute( RecordsAffected, Parameters, Options )

对于非按行返回的 Command:

command.Execute RecordsAffected, Parameters, Options

返回值

返回 Recordset 对象引用。

参数

RecordsAffected   可选,长整型变量,提供者向其返回操作所影响的记录数目。RecordsAffected 参数仅应用于操作查询或存储过程。RecordsAffected 不返回由返回结果的查询或存储过程所返回的记录数目。详细信息,请使用 RecordCount 属性。

Parameters   可选,变体型数组,使用 SQL 语句传送的参数值。(用该参数传送时输出参数将不返回正确值。)

Options   可选,长整型值,指示提供者如何计算 Command 对象的 CommandText 属性。该值可为下列常量之一:

常量 说明 
AdCmdText 指示提供者应按命令的文本定义(如 SQL 语句)来计算 CommandText。 
AdCmdTable 指示 ADO 应生成 SQL 查询以便从 CommandText 命名的表中返回所有行。 
AdCmdTableDirect 指示提供者应从 CommandText 命名的表中返回所有行。 
AdCmdStoredProc 指示提供者应按存储过程计算 CommandText。 
AdCmdUnknown 指示 CommandText 中的命令类型未知。 
adAsyncExecute 指示命令应异步执行。 
adAsyncFetch 指示对由 CacheSize 属性指定的初始数量之后的剩余行应使用异步提取。 


本列表中前 4 个常量的详细说明请参见 CommandType 属性。

说明

使用 Command 对象的 Execute 方法可执行在对象的 CommandText 属性中指定的查询。如果 CommandText 属性指定按行返回查询,执行所产生的任何结果都将存储在新的 Recordset 对象中。如果该命令不是按行返回查询,则提供者返回关闭的 Recordset 对象。某些应用程序语言允许忽略该返回值(如果不需要任何 Recordset)。

如果查询带有参数,将使用 Command 对象中参数的当前值,除非通过 Execute 调用传送的参数覆盖它们。可以在调用 Execute 方法时通过省略某些参数的新值来覆盖参数子集。指定参数的次序与其在方法中被传送的次序相同。例如,如果有 4 个(或更多)参数并且希望只为第一个和第四个参数传送新值,则可以将 Array(var1,,,var4) 作为 Parameters 参数传送。

注意    在 Parameters 参数中传送时输出参数将不返回正确的值。

该操作结束后将发出 ExecuteComplete 事件。
--------------------编程问答-------------------- INSERT INTO 语句 
添加一个或多个记录至一个表。这叫作追加查询.

语法
多重记录追加查询:

INSERT INTO target [(field1[, field2[, ...]])][IN外部数据库]
    SELECT field1[, field2[, ...]]
    FROM tableexpression

单一记录追加查询:

INSERT INTO target [(field1[, field2[, ...]])]
    VALUES (value1[, value2[, ...])

INSERT INTO 语句可分为以下几个部分:

部分 说明 
target 欲追加记录的表或查询的名称。 
field1, field2 如果后面跟的是 target 参数,则为要追加数据的字段名;如果后面跟的是 source 参数,则为从其中获得数据的字段名。 
Externaldatabase 进入外部数据库的路径。有关路径的描述,请参阅 IN 子句。 
source 复制记录的来源表或查询的名称。 
tableexpression 从其中得到要插入的记录的表名。这个变元可能是一个单一的表名,也可能是一个由 INNER JOIN, LEFT JOIN或 RIGHT JOIN 运算组成的复合体,或是一个储存的查询。 
value1,value2 欲插入新记录的特定字段的值。每一个值将依照它在列表中的位置,顺序插入相关字段:value1 将被插入至追加记录的 field1 之中,value2 插入至 field2,依此类推。必须使用逗点将这些值分隔,并且将文本字段用引号 (' ') 括起来。 


说明
可以使用 INSERT INTO 语句来添加一个单一记录至一个表中,如以上所示使用单一记录追加查询语法。在这个例子中,代码指定了该记录每一字段的名称和值。必须指定追加数值的记录的每一个字段和那个字段的值。如果您没有指定每一个字段时,缺省值或 Null 值将被插入至没有数据的字段之中。这些记录将被添加至表的尾部。

通过使用 SELECT ...FROM 子句如以上所示的多重记录追加查询语法,也可以从另一表或查询使用 INSERT INTO追加一组记录。在这个示例中,SELECT 子句将指定追加字段至指定的 target 表。

source 或 target 表可以指定一个表或查询。如果查询被指定,Microsoft Jet数据库引擎会把记录追加到由该查询指定的所有表中。

INSERT INTO 是可选的,但当使用时,请置於 SELECT 语句之前。

如果你的目标表包含一个 主键,,你一定要把唯一的非 Null 值追加到主键字段中,否则 Microsoft Jet 数据库引擎不会追加记录。

如果你要把把记录追加到带有 AutoNumber字段的表中,还想重编追加的记录,请不要在你的查询中包含 AutoNumber字段。如果您要保持字段中的原始值,请将自动编号加在您的查询之中。

使用 IN 子句,可追加记录至另一个数据库中的表。

要创建新表请用 SELECT...INTO 语句代替制表查询的创建。

若要在运行追加查询之前找出哪些记录是被追加的,首先执行和查阅一个使用相同的选择条件之选定查询所获得的结果。

追加查询为从一个或多个表中复制记录至另一个表。您追加的表包含记录将不会被追加查询所影响。

除了从另一表中来追加现存的记录,可以指定在单一追加记录之中使用 VALUES 子句来指定对每一字段的值。如果您省略字段列表,VALUES 子句在表之中必须包含每一字段的值;否则, INSERT运算将会失败。使用额外的 INSERT INTO 语句与一个 VALUES 子句来创建您要的每一个额外的记录。

--------------------编程问答-------------------- 以上资料琢磨琢磨,参考下面的代码
cn.Execute " INSERT INTO Employees " _
        & "(FirstName,LastName, Title) VALUES " _
        & "('Harry', 'Washington', 'Trainee');"
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,