bgzxclh请大家看一个SQL语句! 找仓库管理软件下载
with dataM.cj_ADOQuery2 do
begin
close;
sql.Clear;
sql.Add(''select avg(''+dataM.cj_adoquery1[''fdname'']+'') as hj from ''+cj+'''' );
sql.Add(''where 级校=''''''+s1+'''''' and 班=''''''+s2+'''''' and ''+dataM.cj_adoquery1[''fdname'']+''>0'');
open;
prepared;
end;
dataM.tj_adotable1.edit;
dataM.tj_adotable1.FieldValues[dataM.cj_adoquery1[''fdname'']]:=hj;
dataM.tj_adotable1.post;
为什么变量hj不能赋值呢?
后来只好用了一个过程解决这个问题,可是太慢,600人的数据统计用10多秒时间!
2楼: 在fdname修改為:fdname 如网吧管理软件
3楼: to bbscom:
不会吧!
能说说你的见解吗?
4楼: 有友告诉说:将变量hj换为dataM.cj_ADOQuery2.FieldByName(''hj'').AsString,但我试了,也不行!
我试了,却提示“字段大小无效!”,而且dataM.tj_adotable1.FieldValues[dataM.cj_adoquery1[''fdname'']]中的字段是数值型的,我将你的asstring改为asfloat,也不行,也是上述提示!
5楼: 因为我的程序能编译过去,要改成你的方式,连编译都难呀!
6楼: 是在這裡加:
sql.Add(''select avg(''+dataM.cj_adoquery1['':fdname'']+'') as hj from ''+cj+'''' );
修改上面的就可以,其它的不要改。
财务软件版7楼: 谢了,我试一下
8楼: 我试了,提示:cj_adoquery1:未发现字段'':fdname''!
9楼: sql.Add(''select avg([''+dataM.cj_adoquery1[''fdname'']+'']) as hj from ''+cj+'''' );
前后加中括号引起
10楼: 楼上的兄弟,我试都不行,说是:“字段大小无效!”请兄弟看看啦!
11楼: with dataM.cj_ADOQuery2 do
begin
close;
sql.Clear;
sql.Add(''select avg(''+dataM.cj_adoquery1[''fdname'']+'') from ''+cj+'' '' );
sql.Add(''where 级校=''''''+s1+'''''' and 班=''''''+s2+'''''' and ''+dataM.cj_adoquery1[''fdname'']+''>0'');
open;
end;
dataM.tj_adotable1.edit;
dataM.tj_adotable1.FieldValues[dataM.cj_adoquery1[''fdname'']]:=dataM.cj_ADOQuery2.Fields[0].Value;
dataM.tj_adotable1.post
试试
12楼: fdname什么类型
HJ什么类型
存储过程应该速度快啊,要不就是你写得有问题
你把语句粘全吧 如进销存表格
13楼: to bjyplbx,我试了,问题出在第一句上!
财务软件版14楼: dataM.cj_adoquery1.First;
for j:=0 to dataM.cj_adoquery1.recordcount-1 do
begin
with dataM.cj_ADOQuery2 do
begin
close;
sql.Clear;
sql.Add(''select avg(''+dataM.cj_adoquery1[''fdname'']+'') as hj from ''+cj+'''' );
sql.Add(''where 级校=''''''+s1+'''''' and 班=''''''+s2+'''''' and ''+dataM.cj_adoquery1[''fdname'']+''>0'');
open;
prepared;
end;
dataM.tj_adotable1.edit;
dataM.tj_adotable1.FieldValues[dataM.cj_adoquery1[''fdname'']]:=hj;
dataM.tj_adotable1.post;
dataM.cj_adoquery1.next;
end;
end
大侠们给看看!
15楼: 写成存储过程,然后考虑加上几个索引。效率会提高很多的。可惜我对数据库性能优化方面不是很在好,没办法给你具体的建议。
16楼: [b]to bjyplbx,我试了,问题出在第一句上![/b]
第一句指哪句啊
17楼: sql.Add(''select avg(''+dataM.cj_adoquery1[''fdname'']+'') as hj from ''+cj+'''' );
错误提示:说是:“字段大小无效!”
18楼: 你把组合好的sql语句显示一下看看对不对,起码要先保证语句没问题
19楼: 这就是一个过程呀;
请问:avg、sum函数可以嵌套吗?
20楼: where前面有空格吗?你把整个SQL弄出来看看
财务软件版21楼: 看着乱,能说下要干什么吗
22楼: where前无空格,这一句是没问题的,问题的是:
sql.Add(''select avg(''+dataM.cj_adoquery1[''fdname'']+'') as hj from ''+cj+'''' );
错误提示:说是:“字段大小无效!” 如仓库管理软件下载
23楼: 你把组合好的 sql 到别处运行一下,看看是不是有问题,你怎么就是不明白呢
24楼: 就是因为没空格才觉得有问题。
25楼: hj 变量是什么类型??
请用 string, integer, double, real, 不要用currency。。。
26楼: 我没有用过sqlserver,我就用过 orcale ,请问 sql 里的 as 是不是 orcale 的 into 类似?
27楼: yun,as是标准sql,哪里都一样
财务软件版28楼: to anso:
那你给说说
dataM.tj_adotable1.FieldValues[dataM.cj_adoquery1[''fdname'']]:=hj;
这里的 hj 是什么东西
29楼: 把 as 去掉
或者把 HJ 改成 real 类型试试.
或者
avg(''+dataM.cj_adoquery1[''fdname'']+'')
改成
(avg(''+dataM.cj_adoquery1[''fdname'']+'')) as hj
30楼: 应该 是类型不匹配 仔细看看把
31楼: 你的hj不是个字段名吗?怎么可以这样赋值的?
如果是变量,你把hj的定义拿出来看看
32楼: dataM.tj_adotable1.FieldValues[dataM.cj_adoquery1[''fdname'']]:=dataM.cj_ADOQuery2.Fields[0].Value;
应该可以吧
33楼: 楼主这样的程序真的可以编译通过吗?hj到底是个什么东西,变量?字段别名?还是什么?我都被你的 as 搞糊涂了
34楼: procedure Tfrm_kwkj.YbPjf(cj,km,tj:string);
var
i,j,n,m,w:integer;
hj:real;
s1,s2:string;
begin
dataM.tj_adotable1.Close;
dataM.tj_adotable1.TableName:=tj;
dataM.tj_adotable1.Open;
for i:=0 to dataM.tj_adotable1.recordcount-1 do
begin
dataM.cj_adoquery1.First;
for j:=0 to dataM.cj_adoquery1.recordcount-1 do
begin
with dataM.cj_ADOQuery2 do
begin
close;
sql.Clear;
sql.Add(''select avg(''+dataM.cj_adoquery1[''fdname'']+'') as hj from ''+cj+'''' );
sql.Add(''where 级校=''''''+s1+'''''' and 班=''''''+s2+'''''' and ''+dataM.cj_adoquery1[''fdname'']+''>0'');
open;
prepared;
end;
dataM.tj_adotable1.edit;
dataM.tj_adotable1.FieldValues[dataM.cj_adoquery1[''fdname'']]:=hj;
dataM.tj_adotable1.post;
dataM.cj_adoquery1.next;
end;
end
财务软件版35楼: with dataM.cj_ADOQuery2 do
begin
...
end;
有什么用啊?
36楼: to bjyplbx,:你难道看不出来吗?当然有用了,虽然小一点而已了
37楼: 一点没看出来
38楼: 将你的程序段发给我,我调试一下,再告诉你,可以吗!swqw12@126.com
39楼: 问题还没有解决!不过还是谢谢你们的热心!