为什么不能执行?(100分)(100分)

  • 主题发起人 主题发起人 月光宝盒
  • 开始时间 开始时间

月光宝盒

Unregistered / Unconfirmed
GUEST, unregistred user!
drop table top_art;
create table top_art
(top_no number(5),
art_no number(6),
sal_qty number(10,2),
sal_amnt number(10,2)
);

declare
my_art_no article.art_no%TYPE;
my_sal_qty top_art.sal_qty%TYPE;
my_sal_amnt top_art.sal_amnt%TYPE;
my_top_no number(5):=0;

cursor aa1 is
select art_no,sum(sales) sales,sum(sales_amnt) sales_amnt
from tablename1
group by art_no
order by sales_amnt desc;
begin
open aa1;
loop
FETCH aa1 into my_art_no,my_sal_qty,my_sal_amnt;
exit when aa1%NOTFOUND;
my_top_no := my_top_no+1;

if my_top_no < 40 then
insert into top_art values(my_top_no,my_art_no,my_sal_qty,my_sal_amnt)
;
commit;
end if;
end loop;

close aa1;

end;
我将以上SQL语句如下执行,
procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Text:=memo1.Text;//memo1中就是以上语句
adoquery1.ExecSQL;
end;
可是不行,说:应用程序定义Parameters 对象的方式不适当,
是怎么回事?如何改?
 
ExecSQL只能执行不返回结果的SQl命令。你的Memo中有Select语句,ExecSQL不支持。
 
应该如何写?
adocommend也不行啊!
 
adoquery1.open; 实验一次呢
 
楼上的是??
记得半个月前有人说你踏上北上的列车走了。
我记错了??
回来就好!
 
不行,
错误一样!
 
1。top_art没定义主键!
2.declare
my_art_no article.art_no%TYPE;
my_sal_qty top_art.sal_qty%TYPE;
my_sal_amnt top_art.sal_amnt%TYPE;
my_top_no number(5):=0;
定义变量不对![red];[/red]不对!
3. 游标中太多的语句根本不支持![h3]你用的什么数据库![/h3]open aa1;
loop。。。
 
ExecSQL 不支持多条语句吧
 
像你这种情况,应该用存储过程实现
 
create procedure这样建立一个存储过程吗?
如何修改、查询、删除已有的存诸过程?
 
某些SQL语句不能放在一起执行,参考SQL Server生成的脚本,
都用Go分开了,如
语句1
go
语句2
go
这样,同时执行语句1和语句2是不行的
 
[:D]
把 : ;全部去掉
比如 my_top_no number(5):=0; 此处的 : 就不应该用
记住一点:SQL语句是在数据库中执行的,不能按delphi的格式写


在查询分析器理能执行的语句,才可以用ADOquery直接执行
最好先在查询分析器理执行成功后,再用于ADOQUERY调用
 
我以上的语句在oracle中运行没任何问题!
只是用delphi不知如何运用!
 
tmpAdoSP := TadoStoredProc.Create(Application);
with tmpAdoSP do
begin
Connection := dmBAPInventory.ADOConnectionBAParts;
ProcedureName := 'bas_ConfirmCK'; //存储过程名
Parameters.Clear;
Parameters.CreateParameter('@RESULT',ftinteger,pdOutput,1,0); //参数
Parameters.CreateParameter('@CKDH',ftString,PdInput,20,adodsUSD_BCKWY.FieldByName('CKDH').AsString);//参数
Parameters.CreateParameter('@FHTZDH',ftString,PdInput,20,adodsUSD_BCKWY.FieldByName('FHTZDH').AsString);//参数
Prepared := True;
ExecProc;
NoExist := Parameters[0].Value;
end;
tmpAdoSP.Free;

存储过程里就是你的SQL语句。如果没有参数需要传入,就不用参数了。
 
后退
顶部