动态sql 语句中的参数(50分)

  • 主题发起人 主题发起人 coffeeffee
  • 开始时间 开始时间
C

coffeeffee

Unregistered / Unconfirmed
GUEST, unregistred user!
下面一段程序,运行时提示query中的参数类型未知,请问如何解决????
with Query1 do
begin
Close;
Sql.Clear;
Sql.Add('Select Max(Sc_date),Min(Sc_date) into :Max_date,:Min_date from qf');
ExecSql;
MaxDate:=ParamByName('Max_date').AsDate;
MinDate:=ParamByName('Min_date').AsDate;
showmessage(DateToStr(MaxDate));
end;
 
哈哈,你写出错啦!
with Query1 do
begin
Close;
Sql.Clear;
Sql.Add('Select Max(Sc_date),Min(Sc_date) into :Max_date,:Min_date from qf');
MaxDate:=ParamByName('Max_date').AsDate;
MinDate:=ParamByName('Min_date').AsDate;
ExecSql;
showmessage(DateToStr(MaxDate));
end;

 
在Delphi帮助中查DataType,就知道原因了
 
这样就50分啦?!
 
Execsql OR Open?
 
你在运行SQL时,都没有给其中的参数赋值啊!!
 
各位大虾,我是想把select出来的值放入参数返回,
to aw_zhao: 按你的写法试了一下,但同样出错,提示max_date的类型未知;
to driver:我想这不是数据类型匹配问题,而是sql中的参数的类型没有定义;
to honstman:若你以前试过,可以给我一个例子吗?
to jobsxy:我想应该是execsql,因为sql不用返回结果集;
to zengr :我是想把select出来的值放入参数返回,应该在sql执行过后再取参数啊。。
请指教!!
 
你是不是想将sc_date中最大和最小的日期取出返回给程序吗?如果这样的话,请看:
with Query1 do
begin
Close;
Sql.Clear;
Sql.Add('insert into qf Select Max(Sc_date) max,Min(Sc_date) min from qf');
open;
MaxDate:=FieldByName('Max_date').AsDate;
MinDate:=FieldByName('Min_date').AsDate;
showmessage(DateToStr(MaxDate));
end;

 
Sql.Add('insert into qf Select Max(Sc_date) max,Min(Sc_date) min from qf'); ??
 
怎么会有Select ...into ..的SQL语句?
我觉得你可以变通一下,先用Select ...from..获得最值,
再用Query1.FieldByName('字段名').asdate赋给变量。
 
这样 MaxDate:=ParamByName('Sc_date').AsDate;
MinDate:=ParamByName('Sc_date').AsDate;
 
to coffeeffee
问题解决后,通知我!先谢了!
 
应如此:
with Query1 do
begin
Close;
Sql.Clear;
Sql.Add(' Select Max(Sc_date) Max_Date,Min(Sc_date) Min_Date from qf');
open;
MaxDate:=FieldByName('Max_date').AsDateTime;
MinDate:=FieldByName('Min_date').AsDateTime;
showmessage(DateToStr(MaxDate));
end;
 

with Query1 do
begin
Close;
Sql.Clear;
Sql.Add('Select Max(Sc_date),Min(Sc_date) into :Max_date,:Min_date from qf');
ParamByName('MaxDate'):=ParamByName('Sc_date').AsDate;
ParamByName('MinDate'):=ParamByName('Sc_date').AsDate;
execsql;
showmessage(DateToStr(MaxDate));
end;

参数赋值在执行SQL语句之前
 
Select Into 语句是用于 嵌入式 SQL 的,在 Delphi 里并不支持,如果想通过 SQL
得到一个返回结果,就用 Select .. from,然后去读 Query,即 ydy 的方法。
 
with Query1 do
begin
Close;
Sql.Clear;
Sql.Add('Select Max(Sc_date),Min(Sc_date) into :Max_date,:Min_date from qf');
ParamByName('MaxDate'):=ParamByName('Sc_date').AsDate;
ParamByName('MinDate'):=ParamByName('Sc_date').AsDate;
try
execsql;
except
Open
end;
showmessage(DateToStr(MaxDate)); end;
 
with Query1 do
begin
Close;
Sql.Clear;
Sql.Add('Select Max(Sc_date),Min(Sc_date) into :Max_date,:Min_date from qf');
MaxDate:=ParamByName('Max_date').AsDate;
MinDate:=ParamByName('Min_date').AsDate;
open;
showmessage(DateToStr(MaxDate));
end;
应该用open,否则不会返回查询结果
 
多人接受答案了。
 
后退
顶部