線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1849
推到 Plurk!
推到 Facebook!

No SQL statement available..?

答題得分者是:pgdennis
firesu
中階會員


發表:26
回覆:28
積分:55
註冊:2004-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-19 08:39:14 IP:61.62.xxx.xxx 未訂閱

在TQuery 會出現這樣的錯誤
with Q1,sql do begin
close;
clear;
add('select ....');
add('.......');
. . .
ParamByName('xxx').......
ParamByName('xxx').......
open;
end;
程式run到open時, Q1確定有sql敘述,
可是open一執行 就出現No SQL statement available的錯誤...找不出是啥原因
sql語法也單獨執行過 ...確定是正確的

試過access 跟 postgresql,程式都沒變 只是改Query的DateBaseName

在access上就正常 ,postgresql上就會出現這個no sql statenemt available的錯誤...

danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-19 11:56:08 IP:211.76.xxx.xxx 未訂閱

請將 SQL 語法 post 出來才知道是不是有問題

------
將問題盡快結案也是一種禮貌!
firesu
中階會員


發表:26
回覆:28
積分:55
註冊:2004-12-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-19 17:23:09 IP:61.62.xxx.xxx 未訂閱

===================引 用 文 章===================

請將 SQL 語法 post 出來才知道是不是有問題

==============================================

程式裡改DBType來連不同的資料庫

DBtype=0 是postgresql
DBType=1 是access

case DBType of
0:SQL_GET_INT:='%';
1:SQL_GET_INT:='int';
end;

function fun_SQL_Year(FieldName, Y: string): string;
begin
case DBType of
0: Result := ' to_char(' FieldName ',''' 'yyyy' ''')=''' Y ''' ';
1: Result := ' ((year(' FieldName '))=' Y ') ';
end;
end;

function fun_SQL_Month(FieldName, M: string): string;
begin
case DBType of
0: Result := ' to_char(' FieldName ',''' 'mm' ''')=''' M ''' ';
1: Result := ' ((month(' FieldName '))=' M ') ';
end;
end;

function fun_SQL_M(FieldName, D: string): string;
begin
// D -- 1 或 -1 --是否要轉為負數
case decimalsM of {decimalsM 是小數位數}
0: result := ' ' SQL_GET_INT '((' FieldName ' 0.5)*1)*(' D ') ';
1: result := ' ' SQL_GET_INT '((' FieldName ' 0.05)*10)*(' D ')/10 ';
2: result := ' ' SQL_GET_INT '((' FieldName ' 0.005)*100)*(' D ')/100 ';
3: result := ' ' SQL_GET_INT '((' FieldName ' 0.0005)*1000)*(' D ')/1000 ';
end;
end;

with Q1,sql do begin
add(' select classno,cusno,sa,sum(p1) as p2 from ');
add('(');
add(' select c.classno,a.cusno, ');
add(fun_SQL_M('b.prqty*b.price','1') 'as p1,');
add(' 1 as sa from sale a,sales1 b,prod c,class d ');
add(' where b.prdno=c.prdno ');
add(' and a.salno=b.salno ');
add(' and c.classno=d.classno ');
if CLASS_S<>'' then
add(' and c.classno=:classno ');
add(' and a.cusno between :cusno1 and :cusno2 ');
add('and ' fun_SQL_Month('a.sdate',daM) ' and ' fun_SQL_Year('a.sdate',daY));
add(' union all ');
add(' select c.classno,a.cusno,');
add(fun_SQL_M('b.prqty*b.price','-1') 'as p1,');
add(' 2 as sb from sback a,sbacks1 b,prod c,class d ');
add(' where b.prdno=c.prdno ');
add(' and a.sbkno=b.sbkno ');
add(' and c.classno=d.classno ');
if CLASS_S<>'' then begin
add(' and c.classno=:classno ');
ParamByName('classno').AsString:=CLASS_S;
end;
add(' and a.cusno between :cusno1 and :cusno2 ');
add('and ' fun_SQL_Month('a.sbdate',daM) ' and ' fun_SQL_Year('a.sbdate',daY));
add(' ) as t ');
add(' group by cusno,classno,sa ');
ParamByName('cusno1').AsString:=CUST_Start;
ParamByName('cusno2').AsString:=CUST_End;
open;
end;

在條件視窗選擇年月 '2006/07'
daM ='07'
daY = '2006'
CUST_Start, CUST_End 客戶範圍
CLASS_S 商品類別

組合出來的語法 , 分別拿到access 跟 postgresql 單獨執行都沒問題..
可是連postgresql 在程式 run到open就會錯誤....

不過專案很多地方用這樣的寫法都沒問題....只有這會有錯誤

pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-07-20 16:41:15 IP:218.163.xxx.xxx 未訂閱
1.組合出的SQL,在design time時,用TQuery元件試試看,能不能active=true

2.重拉該TQuery元件

3.簡化SQL debug,先把param部份拿掉try it

把條件拿掉 try it

這樣就知道問題在哪了...
------
星期一,二...無窮迴圈@@
系統時間:2024-05-19 7:11:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!