求一SQL语句(50分)

  • 主题发起人 主题发起人 sibuxiang
  • 开始时间 开始时间
S

sibuxiang

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi5,sql server7开发,通过ODBC连接。
有一表[药库损益表]
字段
药品编号,批号,调价前单价,调价后单价,调价时数量,调价日期
要求查出该药库损益
sql.add(select 损益=sum(调价时数量*(调价后单价-调价前单价)) from 药库损益表');
prepare;
open ;
edt_yksy.Text :=floattostr(fieldbyname('损益').asfloat);
在sql server7中检查语法时报:
the sql syntax has been verified against the data source
但是运行后能得到正确结果
在delphi中使用有时正确,但当该Tquery控件用于别的表查询后,就出错。
请教一下怎样实现该功能
 
>>但当该Tquery控件用于别的表查询后,就出错。
什么样的错?
没有clear?

 
这样的
你的TQuery控件查询别的表的时候
有没有执行下面这条语句?
Query.Sql.Clear;
没有的话,如果你添加的Sql语句前面没有放置空格,那肯定会出错的。
向你推荐一个方法,调试的时候,把SqlServer的Trace打开(7.0版本在Profiler中),
跟踪出你正在执行的Sql语句,这样有利程序的调试。

 
有sql.clear

project yiyuan.exe raised exception class EDBEngineError with
message'Invalid use of keyword.
Token:=sum(调价时数量*(调价后单价-调价前单价))
Line number:1'

trace中没有该语句的信息
 
可以写出是什么错误吗,要注意用Query.sql.clear;
 
你不是说有时候执行可以的吗?
这样的话肯定可以用trace跟踪出来的,除非你的Sql语句不是连接到Sql server中执行。
还有,那些字段都是中文的吗?我感觉Sql server 7中好像不能支持中文的
或者这样,Delphi 中有一个Sql explore,你把你的Sql语句放到那里去执行看看。用那个
东西调试。光看你的那些保错信息,不是很明白
 
用了 prepare 好象应该用 ExecSQL,否则回重复打开数据源。
 
第一:你的表里数据类型与你写的SQL语句可能有不大的冲突
第二:请在SQL。ADD(‘’)前加SQL。CLEAR!
 
1.sum函数只能是是对数值类型有用,其他类型要转换,但看你的报错又不象,是不是数据源没
连对?
2.我常写的代码是:
query.close;
query.sql.clear;
query.sql.add('具体的SQL语句');
query.open;
3.可用Delphi 中的Sql explore跟踪SQL语句
4.to lccc:
ExecSQL只执行SQL 语句,不返回数据集,所以用在对数据的各种修改上(ins,upd,del)
Open执行SQL语句并返回数据集,所以用在select上
 
请注意一下您的数量,单价类型是否不一枝,试着把单价变为FLOAT,并限制其小数位
 
大家都是提醒你要CLEAR再ADD。
QUERY 一般这样用:
with Qry_X do
begin
Close;
Sql.Clear;
Sql.Add (VS_G_Sql);
PrePare;
Open;
end;
Have a Try,...
 
// select 损益=sum(调价时数量*(调价后单价-调价前单价)) from 药库损益表
"损益="这里错了,正确的SQL语句如下
Select sum(调价时数量*(调价后单价-调价前单价)) as 损益 from 药库损益表
 
各位老兄:
先说谢谢了。
我在前面的帖子中已经说出用了
sql.clear
不太显眼,抱歉!
我已经发现是query控件与别处冲突,换了一个query控件后问题解决。
to foolaliu
sql server 7支持中文
to turborabbit:
= 和 as 都可用
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
816
SUNSTONE的Delphi笔记
S
S
回复
0
查看
739
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部