当前位置:主页>销售管理软件> 列表

bgzxclh请大家看一个SQL语句! 找仓库管理软件下载

财务软件版1楼: 请大家帮助看一个程序语句,到底错在何处?
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楼: 问题还没有解决!不过还是谢谢你们的热心!