sql陳述句在資料庫上執行沒問題,但在做delphi時就報錯了,請問該怎么辦啊,很急!!各位大神求助!先謝謝大家了!
uj5u.com熱心網友回復:
相關代碼如下:procedure TForm8.Button1Click(Sender: TObject);
begin
DBGrid1.Visible:=true;
if radiobutton1.Checked=true then
with ADOQuery1 do
begin
close;
sql.Clear;
sql.add('select 倉庫編號,D.鋼材編號,鋼材名稱,鋼材規格,鋼材單價,鋼材質量等級,期初庫存,總入庫量,總出庫量,期初庫存+總入庫量-總出庫量 as 當前庫存');
sql.add('from(select 倉庫編號,A.鋼材編號,鋼材名稱,鋼材規格,鋼材單價,鋼材質量等級,期初庫存');
sql.add('from 鋼材 as A inner join 期初庫存1 as B');
sql.add('on A.鋼材編號=B.鋼材編號');
sql.add('where 倉庫編號=:a and A.鋼材編號=:b)as C inner join(select 鋼材編號,SUM(入庫數量)as 總入庫量');
sql.add('from 入庫1');
sql.add('group by 鋼材編號');
sql.add('having 鋼材編號=:b)as D');
sql.add('on D.鋼材編號=C.鋼材編號 inner join');
sql.add('(select 鋼材編號,SUM(出庫數量)as 總出庫量');
sql.add('from 出庫1');
sql.add('group by 鋼材編號');
sql.add('having 鋼材編號=:b)as E on D.鋼材編號=E.鋼材編號');
Parameters.ParseSQL(SQL.Text, True);
parameters.ParamByName('a').Value:=edit1.Text;
parameters.ParamByName('b').Value:=edit2.Text;
open;
end;
if radiobutton2.Checked=true then
with ADOQuery1 do
begin
close;
sql.Clear;
sql.add('select 倉庫編號,D.鋼材編號,鋼材名稱,鋼材規格,鋼材單價,鋼材質量等級,期初庫存,總入庫量,總出庫量,期初庫存+總入庫量-總出庫量 as 當前庫存');
sql.add('from(select 倉庫編號,A.鋼材編號,鋼材名稱,鋼材規格,鋼材單價,鋼材質量等級,期初庫存');
sql.add('from 鋼材 as A inner join 期初庫存2 as B');
sql.add('on A.鋼材編號=B.鋼材編號');
sql.add('where 倉庫編號=:c and A.鋼材編號=:d)as C inner join(select 鋼材編號,SUM(入庫數量)as 總入庫量');
sql.add('from 入庫2');
sql.add('group by 鋼材編號');
sql.add('having 鋼材編號=:d)as D');
sql.add('on D.鋼材編號=C.鋼材編號 inner join');
sql.add('(select 鋼材編號,SUM(出庫數量)as 總出庫量');
sql.add('from 出庫2');
sql.add('group by 鋼材編號');
sql.add('having 鋼材編號=:d)as E on D.鋼材編號=E.鋼材編號');
Parameters.ParseSQL(SQL.Text, True);
parameters.ParamByName('c').Value:=edit1.Text;
parameters.ParamByName('d').Value:=edit2.Text;
open;
end;
end;
uj5u.com熱心網友回復:
求援手啊啊啊啊uj5u.com熱心網友回復:
其實你用事件探查器跟蹤一下delphi生成的sql陳述句就明白了,難道你的a,b,c,d都是字串型別的?uj5u.com熱心網友回復:
Add()函式2行間沒加空格。或者每個Add()字串后加#13。你顯示下你的SQL文本就知道了uj5u.com熱心網友回復:
回三樓:是的。。。uj5u.com熱心網友回復:
回四樓:試了,沒用。。。。。。。不過還是謝謝你!uj5u.com熱心網友回復:
不知道怎么回事,我用XE5,拷貝了你代碼進去,觀看 ADOQuery1.SQL.Text 的時候,你每個ADD進去的字串后,都會多出這么個東西 “ #$D#$A ”建議你連接字串就直接用widestring 連接好了。然后在直接賦值給 ADOQuery1.SQL.Text
SqlStr := 'select 倉庫編號,D.鋼材編號,鋼材名稱,鋼材規格,鋼材單價,鋼材質量等級,期初庫存,總入庫量,總出庫量,期初庫存+總入庫量-總出庫量 as 當前庫存 ';
SqlStr := SqlStr + 'from(select 倉庫編號,A.鋼材編號,鋼材名稱,鋼材規格,鋼材單價,鋼材質量等級,期初庫存 ';
SqlStr := SqlStr + 'from 鋼材 as A inner join 期初庫存1 as B ';
SqlStr := SqlStr + 'on A.鋼材編號=B.鋼材編號 ';
SqlStr := SqlStr + 'where 倉庫編號=''%s'' and A.鋼材編號=''%s'')as C inner join(select 鋼材編號,SUM(入庫數量)as 總入庫量 ';
SqlStr := SqlStr + 'from 入庫1 ';
SqlStr := SqlStr + 'group by 鋼材編號 ';
SqlStr := SqlStr + 'having 鋼材編號=''%s'')as D ';
SqlStr := SqlStr + 'on D.鋼材編號=C.鋼材編號 inner join ';
SqlStr := SqlStr + '(select 鋼材編號,SUM(出庫數量)as 總出庫量 ';
SqlStr := SqlStr + 'from 出庫1 ';
SqlStr := SqlStr + 'group by 鋼材編號 ';
SqlStr := SqlStr + 'having 鋼材編號=''%s'')as E on D.鋼材編號=E.鋼材編號 ';
SqlStr := Format(SqlStr, [edit1.Text, edit2.Text, edit2.Text, edit2.Text]);
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Text := SqlStr ;
ADOQuery1.Open;
uj5u.com熱心網友回復:
為防止輸入的 edit1.Text, edit2.Text 引數帶單引號,最好是格式化一下,如果引數出現單引號,則添加一個單引號,變成 “‘’” 形式。否則,帶單引號的引數是會出錯的。uj5u.com熱心網友回復:
parameters.ParamByName('a').Value:=quotedstr(edit1.Text);
parameters.ParamByName('b').Value:=quotedstr(edit2.Text);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104485.html
標籤:數據庫相關
上一篇:mp3檔案怎么轉成音頻流格式
