全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4350
推到 Plurk!
推到 Facebook!

Ado Query 會出現無法指出的錯誤

缺席
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-06-28 09:07:47 IP:59.120.xxx.xxx 訂閱
我的環境是 delphi 2006 

連的資料庫是 IBM as400/ db2

sql如下

[code sql]
select
s10f05,s12f09,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f06,s01f06,s12f33,s12f30,
round(sum(r10f25),3) as r1,
round(sum(r10f26),2) as r2,
round(sum(r10f29),3) as r3,
round(sum(r10f30),2) as r4
from
(
select b.s12f30,a.s10f03,a.s10f11,a.s10f06,a.s10f07,a.s10f12,a.s10f13,c.s01f06,e.s60f04,e.s60f02,b.s12fs1,b.s12fs2,b.s12f31,
b.s12f32,d.s02f11,d.s02f15,d.s02f16,a.s10f14,a.s10f16,a.s10f17,a.s10f15,d.s02f12,b.s12f04,d.s02f39,
b.s12f33,b.s12f34,b.s12f35,b.s12f05,b.s12f06,b.s12f07,b.s12f10,b.s12f11,b.s12f12,b.s12f13,b.s12f14,b.s12f15,b.s12f16,
a.s10f05,b.s12f09,b.s12f12*b.s12f06 as r10f27, b.s12f13*b.s12f06 as r10f28,
case b.s12f33
when 'KG' then b.s12f07 else 0
end as r10f25,
case b.s12f33
when 'KG' then 0 else b.s12f16
end as r10f29,
case b.s12f33
when 'KG' then ((b.s12f07*b.s12f35)/b.s12f34) else 0
end as r10f26,
case b.s12f33
when 'KG' then 0 else ((b.s12f16*b.s12f35)/b.s12f34)
end as r10f30
from ((((scwdta.scw10p as a left join scwdta.scw12p as b on a.s10f05=b.s12fs1)
left join scwdta.scw01p as c on c.s01fs1=b.s12f31)
left join scwdta.scw02p as d on d.s02fs1=c.s01fs1 and d.s02fs2= b.s12f32)
left join scwdta.scw60p as e on e.s60fs1=b.s12f04)
where a.s10fs1=''
) as g
group by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f05,s12f09,s12f33
order by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35
[/code]

SQL本身是沒什麼問題,
使用 java, sql server ,甚至是AS400裡的sql查詢
都可以正確執行此SQL

但是在 delphi 裡的 adoQuery , 當把
這段sql 的內層加上去 後, 沒問題
外層加上去後,問題就會出現 , 會產生一個 command text does not return a result set 錯誤 ,

之後在執行一次,就會一直出現 "無法指出的錯誤" ..

即使是把sql 改成最簡單的 select * from table where key=''

執行後也會出現..."無法指出的錯誤"

這樣一來,就必須砍掉這個物件,跟connection,重建一次, 簡單的sql 才會正常

但是只要出現一次 command text does not return a result set 錯誤 , 就回像上述一樣....

很困擾, 該如何解決呢?? 資料撈不出來的話,這張報表就沒辦法完成...


編輯記錄
it1506 重新編輯於 2011-06-27 19:09:50, 註解 無‧
it1506 重新編輯於 2011-06-27 19:10:12, 註解 無‧
taishyang 重新編輯於 2011-06-28 03:35:23, 註解 移除[急]字樣‧
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-06-28 10:46:28 IP:61.66.xxx.xxx 訂閱
您好:
應該是 ‘KG’ 的地方有問題
您可以用導出ADOQRY的TEXT看看組成的SQL是否適用
showmessage(adoqry.sql.text);
一般我會使用QuotedStr('KG') 來取代 'KG'
以上請參考
------
======================
昏睡~
不昏睡~
不由昏睡~
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-06-28 12:38:22 IP:59.120.xxx.xxx 訂閱

===================引 用 ko 文 章===================
您好:
應該是 ‘KG’ 的地方有問題
您可以用導出ADOQRY的TEXT看看組成的SQL是否適用
showmessage(adoqry.sql.text);
一般我會使用QuotedStr('KG') 來取代 'KG'
以上請參考
=================================================

謝謝指導
只不過,這樣似乎無法解決我的問題
我這段sql 主要是要連結到 rave report
所以在 adoquery物件裡的 twString 我一定要給他一串可以抓到欄位的 sql
但是使用函數把 'KG' 包起來的話, 在 TwideString的編輯欄裡, 是行不通的,
這樣rave report 沒辦法抓到它要的欄位....

我不認為是'KG' 的問題
我前一板的程式可以正確執行,
因為前一版的SQL只是比這版少了兩個 case判斷,跟兩個 sum(round())

現在我想改回前一版的sql 也會出錯了, 所以很莫名其妙啊....

找不出原因超苦惱啊...

ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-06-28 14:46:11 IP:61.66.xxx.xxx 訂閱
那改用''K''試試看吧
主要還是請你將組合在ADOQRY裡面的SQL
print 出來看看
這樣才能了解組合中式否出現問題
------
======================
昏睡~
不昏睡~
不由昏睡~
salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-06-28 15:07:26 IP:60.249.xxx.xxx 未訂閱
嗯!! 如 ko 大大所說
show 出來 或 存檔,來除錯!!!

ShowMessage(ADOQuery1.SQL.Text);
ADOQuery1.SQL.SaveToFile('c:\\sql.txt');
ADOQuery1.Open;

===================引 用 ko 文 章===================
那改用''K''試試看吧
主要還是請你將組合在ADOQRY裡面的SQL
print 出來看看
這樣才能了解組合中式否出現問題
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-06-28 16:11:01 IP:59.120.xxx.xxx 訂閱

===================引 用 ko 文 章===================
那改用''K''試試看吧
主要還是請你將組合在ADOQRY裡面的SQL
print 出來看看
這樣才能了解組合中式否出現問題
=================================================
ko大, sql 如下 ,用code 區塊會出現
的標籤,很討厭 = =, 應該是站上的bug.
為什麼要用'KG'呢, 原因就是該欄位,我必須用KG來判斷. 才能找出正確資料.

這SQL是有兩層, 裡面那層,完全可以正常執行
外層加上去後就會有"無法指出的錯誤" , 但是用別的軟體去測試SQL, 是正常無誤


select
s10f05,s12f09,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f06,s01f06,s12f33,s12f30,
round(sum(r10f25),3) as r1,
round(sum(r10f26),2) as r2,
round(sum(r10f29),3) as r3,
round(sum(r10f30),2) as r4
from
(
select
b.s12f30,a.s10f03,a.s10f11,a.s10f06,a.s10f07,a.s10f12,a.s10f13,c.s01f06,e.s60f04,e.s60f02,b.s12fs1,b.s12fs2,b.s12f31,
b.s12f32,d.s02f11,d.s02f15,d.s02f16,a.s10f14,a.s10f16,a.s10f17,a.s10f15,d.s02f12,b.s12f04,d.s02f39,
b.s12f33,b.s12f34,b.s12f35,b.s12f05,b.s12f06,b.s12f07,b.s12f10,b.s12f11,b.s12f12,b.s12f13,b.s12f14,b.s12f15,b.s12f16,
a.s10f05,b.s12f09,b.s12f12*b.s12f06 as r10f27, b.s12f13*b.s12f06 as r10f28,
case b.s12f33
when 'KG' then b.s12f07 else 0
end as r10f25,
case b.s12f33
when 'KG' then 0 else b.s12f16
end as r10f29,
case b.s12f33
when 'KG' then ((b.s12f07*b.s12f35)/b.s12f34) else 0
end as r10f26,
case b.s12f33
when 'KG' then 0 else ((b.s12f16*b.s12f35)/b.s12f34)
end as r10f30
from ((((scwdta.scw10p as a left join scwdta.scw12p as b on a.s10f05=b.s12fs1)
left join scwdta.scw01p as c on c.s01fs1=b.s12f31)
left join scwdta.scw02p as d on d.s02fs1=c.s01fs1 and d.s02fs2= b.s12f32)
left join scwdta.scw60p as e on e.s60fs1=b.s12f04)
where a.s10fs1=''

) as g
group by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f05,s12f09,s12f33
order by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35


ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-06-28 16:25:39 IP:61.66.xxx.xxx 訂閱
也請您把delphi的語法一並PO上來好嗎
------
======================
昏睡~
不昏睡~
不由昏睡~
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-06-28 16:44:31 IP:59.120.xxx.xxx 訂閱

===================引 用 ko 文 章===================
也請您把delphi的語法一並PO上來好嗎
================================================
ko大,我從開始組那一行開始貼, 貼到qry1.open , qry1的sql就是全段
下面有幾個排序條件可以不用理它.
sqlstr5 就是裡面那層的sql;

sqlstr5 是可以正常執行的, 因為它的資料是丟給另一個報表用,而那個報表是正常無誤;

另外,我還有另一個問題, 就是
if(adoquery5.IsEmpty) then begin
showmessage('查無資料~!');
exit;
//abort;
end;
這一段, 我編譯時都會錯在 abort; 這行, 所以我改用 exit 才不會出錯...真的是很奇怪的錯誤...之前還好好的,

sqlStr5:='select b.s12f30,a.s10f03,a.s10f11,a.s10f06,a.s10f07,a.s10f12,a.s10f13,c.s01f06,e.s60f04,e.s60f02,b.s12fs1,b.s12fs2,b.s12f31,'
' b.s12f32,d.s02f11,d.s02f15,d.s02f16,a.s10f14,a.s10f16,a.s10f17,a.s10f15,d.s02f12,b.s12f04,d.s02f39,'
' b.s12f33,b.s12f34,b.s12f35,b.s12f05,b.s12f06,b.s12f07,b.s12f10,b.s12f11,b.s12f12,b.s12f13,b.s12f14,b.s12f15,b.s12f16,'
' a.s10f05,b.s12f09,b.s12f12*b.s12f06 as r10f27, b.s12f13*b.s12f06 as r10f28,'
' case b.s12f33'
' when ' '''KG''' ' then b.s12f07 else 0 '
' end as r10f25,'
' case b.s12f33'
' when ' '''KG''' ' then 0 else b.s12f16 '
' end as r10f29,'
' case b.s12f33'
' when ' '''KG''' ' then (b.s12f07*b.s12f35)/b.s12f34 else 0 '
' end as r10f26,'
' case b.s12f33'
' when ' '''KG''' ' then 0 else (b.s12f16*b.s12f35)/b.s12f34'
' end as r10f30'
' from ((((scwdta.scw10p as a left join scwdta.scw12p as b on a.s10f05=b.s12fs1)'
' left join scwdta.scw01p as c on c.s01fs1=b.s12f31)'
' left join scwdta.scw02p as d on d.s02fs1=c.s01fs1 and d.s02fs2= b.s12f32)'
' left join scwdta.scw60p as e on e.s60fs1=b.s12f04)'
' where a.s10fs1=''' edit1.text '''' ;
//排序條件
//報驗單號 客戶代碼 裝櫃 客戶單號 英文品名 架號 起始箱號 規格
if(radiobutton1.Checked) then begin
sqlstr5:=sqlstr5 ' order by s12fs1,s12f30,s10f06,s01f06,s60f04,s12f10,s12f14,s60f02';
end;
//報驗單號 客戶代碼 裝櫃 架號 英文品名 規格 起始箱號
if(radiobutton2.Checked) then begin
sqlstr5:=sqlstr5 ' order by s12fs1,s12f30,s12f10,s60f04,s12f14,s60f02 desc ';
end;
//報驗單號 客戶代碼 裝櫃 規格 英文品名 起始箱號
if(radiobutton3.Checked) then begin
sqlstr5:=sqlstr5 ' order by s12fs1,s12f30,s60f02,s60f04,s12f10';
end;
ADOQuery5.sql.text:=sqlstr5;
adoquery5.Open;
if(adoquery5.IsEmpty) then begin
showmessage('查無資料~!');
exit;
//abort;
end;
sqlStr1:='select s10f05,s12f09,s12f30,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f06,s01f06,s12f33,'
' round(sum(r10f25),3) as r1,'
' round(sum(r10f26),2) as r2,'
' round(sum(r10f29),3) as r3,'
' round(sum(r10f30),2) as r4'
' from ('
sqlstr5
' ) as g '
' group by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f05,s12f09,s12f33 '
' order by s12fs1,s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35' ;
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.text:=sqlstr1;
qry1.SQL.SaveToFile('D:\\sql.txt');
qry1.Open;
編輯記錄
it1506 重新編輯於 2011-06-28 02:46:20, 註解 無‧
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-06-28 17:52:02 IP:61.66.xxx.xxx 訂閱
 看來是理想做法
可以在請您試著qry5不要open
直接看 qry1的open是否能執行
------
======================
昏睡~
不昏睡~
不由昏睡~
smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2011-06-29 00:30:09 IP:203.73.xxx.xxx 訂閱
可否貼上來 qry5 及 qry1 的屬性及事件表 ?
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2011-06-29 10:50:59 IP:59.120.xxx.xxx 訂閱

===================引 用 ko 文 章===================
看來是理想做法
可以在請您試著qry5不要open
直接看 qry1的open是否能執行
================================================
ko大
我照你的方式做了, 是可以通過了,
我把 qry5 放在 qry1 後面再 open. 就可以執行了
只是這種錯誤真的很納悶, 會是用同一個connetcion的關係嗎?
但是這樣又無法解釋為何我前一版的程式可以OK.... @@
我想是adoquery元件的bug吧...

雖然程式可以過,但是元件 active 不能過啊!!!!!
rave report 必須要元件有active過了,才會有個dataview的欄位讓我拉到報表上
這樣報表沒辦法設計......

剩下最後兩個問題....1. 元件 active 不能過 , 2. abort; 這一行編譯不過... @@


補一下之前狀況的圖
qry1 在 adoquery1 要active時就會掛了,
請見下圖
剛開啟時 把adoquery1 ,active (其實SQL是正常的,但是它就是會掛掉)


第二次再 active 時, 出現"無法指出的錯誤"


第三次就算我把sql改成最簡單的select , 再active一次 ,也會出現"無法指出的錯誤"


to small fox 大
adoquery1 跟adoquery5 的屬性都是預設值, 就是產出來後,我只有加了 sql 跟 adoconnection 而已 , 請見下圖



編輯記錄
it1506 重新編輯於 2011-06-28 21:07:02, 註解 無‧
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2011-06-29 11:40:46 IP:61.66.xxx.xxx 訂閱
您好:
礙於小弟沒有2006可以實測
所以僅能猜測~

只能看網上的各位大德幫你了

小弟想在請你不要連結REPORT
改在datagrid上面連結看看結果

------
======================
昏睡~
不昏睡~
不由昏睡~
HikaruGo
中階會員


發表:22
回覆:69
積分:88
註冊:2007-12-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2011-06-29 12:30:54 IP:111.254.xxx.xxx 訂閱

外層加上去後,問題就會出現 , 會產生一個 command text does not return a result set 錯誤

不是自己已經知道你的問題了?
推測 sql 語法 有問題 , 可能 data 導致 error CONNECT 斷了


可能死在含式 round ?

純猜測





===================引 用 it1506 文 章===================
我的環境是 delphi 2006

連的資料庫是 IBM as400/ db2

sql如下

[code sql]
select
s10f05,s12f09,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f06,s01f06,s12f33,s12f30,
round(sum(r10f25),3) as r1,
round(sum(r10f26),2) as r2,
round(sum(r10f29),3) as r3,
round(sum(r10f30),2) as r4
from
(
select b.s12f30,a.s10f03,a.s10f11,a.s10f06,a.s10f07,a.s10f12,a.s10f13,c.s01f06,e.s60f04,e.s60f02,b.s12fs1,b.s12fs2,b.s12f31,
b.s12f32,d.s02f11,d.s02f15,d.s02f16,a.s10f14,a.s10f16,a.s10f17,a.s10f15,d.s02f12,b.s12f04,d.s02f39,
b.s12f33,b.s12f34,b.s12f35,b.s12f05,b.s12f06,b.s12f07,b.s12f10,b.s12f11,b.s12f12,b.s12f13,b.s12f14,b.s12f15,b.s12f16,
a.s10f05,b.s12f09,b.s12f12*b.s12f06 as r10f27, b.s12f13*b.s12f06 as r10f28,
case b.s12f33
when 'KG' then b.s12f07 else 0
end as r10f25,
case b.s12f33
when 'KG' then 0 else b.s12f16
end as r10f29,
case b.s12f33
when 'KG' then ((b.s12f07*b.s12f35)/b.s12f34) else 0
end as r10f26,
case b.s12f33
when 'KG' then 0 else ((b.s12f16*b.s12f35)/b.s12f34)
end as r10f30
from ((((scwdta.scw10p as a left join scwdta.scw12p as b on a.s10f05=b.s12fs1)
left join scwdta.scw01p as c on c.s01fs1=b.s12f31)
left join scwdta.scw02p as d on d.s02fs1=c.s01fs1 and d.s02fs2= b.s12f32)
left join scwdta.scw60p as e on e.s60fs1=b.s12f04)
where a.s10fs1=''
) as g
group by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f05,s12f09,s12f33
order by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35
[/code]

SQL本身是沒什麼問題,
使用 java, sql server ,甚至是AS400裡的sql查詢
都可以正確執行此SQL

但是在 delphi 裡的 adoQuery , 當把
這段sql 的內層加上去 後, 沒問題
外層加上去後,問題就會出現 , 會產生一個 command text does not return a result set 錯誤 ,

之後在執行一次,就會一直出現 "無法指出的錯誤" ..

即使是把sql 改成最簡單的 select * from table where key=''

執行後也會出現..."無法指出的錯誤"

這樣一來,就必須砍掉這個物件,跟connection,重建一次, 簡單的sql 才會正常

但是只要出現一次command text does not return a result set 錯誤 , 就回像上述一樣....

很困擾, 該如何解決呢?? 資料撈不出來的話,這張報表就沒辦法完成...


it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#14 引用回覆 回覆 發表時間:2011-06-29 13:04:56 IP:59.120.xxx.xxx 訂閱
sql 沒問題

有問題的是 adoquery 這個元件

同樣的sql 在 bde 的tsqlquery, java, sql server , as400等... 都可以執行


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

外層加上去後,問題就會出現 , 會產生一個 command text does not return a result set 錯誤

不是自己已經知道你的問題了?
推測sql 語法有問題,可能data 導致 error CONNECT 斷了


可能死在含式 round ?

純猜測





===================引 用 it1506 文 章===================
我的環境是 delphi 2006

連的資料庫是 IBM as400/ db2

sql如下

[code sql]
select
s10f05,s12f09,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f06,s01f06,s12f33,s12f30,
round(sum(r10f25),3) as r1,
round(sum(r10f26),2) as r2,
round(sum(r10f29),3) as r3,
round(sum(r10f30),2) as r4
from
(
select b.s12f30,a.s10f03,a.s10f11,a.s10f06,a.s10f07,a.s10f12,a.s10f13,c.s01f06,e.s60f04,e.s60f02,b.s12fs1,b.s12fs2,b.s12f31,
b.s12f32,d.s02f11,d.s02f15,d.s02f16,a.s10f14,a.s10f16,a.s10f17,a.s10f15,d.s02f12,b.s12f04,d.s02f39,
b.s12f33,b.s12f34,b.s12f35,b.s12f05,b.s12f06,b.s12f07,b.s12f10,b.s12f11,b.s12f12,b.s12f13,b.s12f14,b.s12f15,b.s12f16,
a.s10f05,b.s12f09,b.s12f12*b.s12f06 as r10f27, b.s12f13*b.s12f06 as r10f28,
case b.s12f33
when 'KG' then b.s12f07 else 0
end as r10f25,
case b.s12f33
when 'KG' then 0 else b.s12f16
end as r10f29,
case b.s12f33
when 'KG' then ((b.s12f07*b.s12f35)/b.s12f34) else 0
end as r10f26,
case b.s12f33
when 'KG' then 0 else ((b.s12f16*b.s12f35)/b.s12f34)
end as r10f30
from ((((scwdta.scw10p as a left join scwdta.scw12p as b on a.s10f05=b.s12fs1)
left join scwdta.scw01p as c on c.s01fs1=b.s12f31)
left join scwdta.scw02p as d on d.s02fs1=c.s01fs1 and d.s02fs2= b.s12f32)
left join scwdta.scw60p as e on e.s60fs1=b.s12f04)
where a.s10fs1=''
) as g
group by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35,s10f05,s12f09,s12f33
order by s12f30,s10f06,s01f06,s60f04,s02f39,s60f02,s12fs1,s02f15,s02f16,s12f35
[/code]

SQL本身是沒什麼問題,
使用 java, sql server ,甚至是AS400裡的sql查詢
都可以正確執行此SQL

但是在 delphi 裡的 adoQuery , 當把
這段sql 的內層加上去 後, 沒問題
外層加上去後,問題就會出現 , 會產生一個 command text does not return a result set 錯誤 ,

之後在執行一次,就會一直出現 "無法指出的錯誤" ..

即使是把sql 改成最簡單的 select * from table where key=''

執行後也會出現..."無法指出的錯誤"

這樣一來,就必須砍掉這個物件,跟connection,重建一次, 簡單的sql 才會正常

但是只要出現一次command text does not return a result set 錯誤 , 就回像上述一樣....

很困擾, 該如何解決呢?? 資料撈不出來的話,這張報表就沒辦法完成...


it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#15 引用回覆 回覆 發表時間:2011-06-29 13:16:50 IP:59.120.xxx.xxx 訂閱

===================引 用 ko 文 章===================
您好:
礙於小弟沒有2006可以實測
所以僅能猜測~

只能看網上的各位大德幫你了

小弟想在請你不要連結REPORT
改在datagrid上面連結看看結果
================================================
ko 大, 我想不是 rave report 的問題
adoquery 1 在 active 時,就會出錯了, 所以在上面放了datagrid ,也無法顯示出來
資料是沒問題的
因為我可以用sql server 或是 as400本身的sql命令 , 還有 sqlWorkbench 軟體
去執行這段sql.



smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#16 引用回覆 回覆 發表時間:2011-06-29 23:48:35 IP:203.73.xxx.xxx 訂閱
你把 TADOQuery 的 LockType 屬性改成 ltReadOnly, ParamCheck 屬性改成 False, 試看看.
smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#17 引用回覆 回覆 發表時間:2011-07-01 01:24:10 IP:203.67.xxx.xxx 訂閱
請問你是用 ADO for ODBC 來連接 AS400 database 的嗎 ?

若是, 有沒有最新的 ODBC driver ?

你有沒有算過整個 SQL command 的文字長度是多少 ?,

你會出現 '... not return ....', 通常是下了如: Drop, Insert, Delete from ... 等非查詢指令,

卻使用 TADOQuery.Open 方法所致, 我還碰過 SQL 文字太長, 超過 ODBC driver 的限制等狀況.

也許你在設定欄位別名時, 不要使用 a,b,c ... 等與 table 別名相同的命名方法,

這樣閱讀及 debug 起來也蠻困難的 ...

it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#18 引用回覆 回覆 發表時間:2011-07-01 11:15:24 IP:59.120.xxx.xxx 訂閱
to smallfox 大, 如你所見
我的sql只有 select而已

關於 driver , 是配合as400的版本, 使用ibm官方的driver

另外, 我上面回覆ko大的文章有說過.

這串sql 真的沒問題, 證據就在我先 把 qry1.open , 再來qry5.open , 就不會出錯

反之 qry5.open 後, 再qry1.open 就會出錯

但是 既然 qry1.open 不會出錯, 那麼我在adoQuery元件要 active 時,它就出錯

應該是 AdoQuery 有未知的bug吧.

===================引 用 smallfox 文 章===================
請問你是用 ADO for ODBC 來連接 AS400 database 的嗎 ?

若是, 有沒有最新的 ODBC driver ?

你有沒有算過整個 SQL command 的文字長度是多少 ?,

你會出現 '... not return ....', 通常是下了如: Drop, Insert, Delete from ... 等非查詢指令,

卻使用 TADOQuery.Open 方法所致, 我還碰過 SQL 文字太長, 超過 ODBC driver 的限制等狀況.

也許你在設定欄位別名時, 不要使用a,b,c ... 等與 table 別名相同的命名方法,

這樣閱讀及 debug 起來也蠻困難的 ...

salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#19 引用回覆 回覆 發表時間:2011-07-01 11:40:40 IP:60.249.xxx.xxx 未訂閱

是否方便 ~

新做一個 PROJECT

Form,裡面放入 你那二個有問題的 adoQuery

一個button ,Click事件 放入你 ( adoQuery open) 的程式。

此時在你的電腦上執行,按下button , 應該會跟這一樣吧 ---> http://twpic.org/uploads2/368ad0d57d.png

那你在把那 PROJECT,打包放上來!!

===================引 用 it1506 文 章===================
to smallfox 大, 如你所見
我的sql只有 select而已

關於 driver , 是配合as400的版本, 使用ibm官方的driver

另外, 我上面回覆ko大的文章有說過.

這串sql 真的沒問題, 證據就在我先 把 qry1.open , 再來qry5.open , 就不會出錯

反之 qry5.open 後, 再qry1.open 就會出錯

但是 既然 qry1.open 不會出錯, 那麼我在adoQuery元件要 active 時,它就出錯

應該是 AdoQuery 有未知的bug吧.


smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#20 引用回覆 回覆 發表時間:2011-07-01 23:20:33 IP:211.74.xxx.xxx 訂閱
1. 可否將 TADOConnection 的屬性表貼出來 ?

2. 可否考慮將 qry1 及 qry5 的 SQL 寫成 View or Store Procedure ?

3. 你說先 qry1.open 後 qry5.open 沒問題, 有試過將 LockType 改為 ltReadOnly 後,
若先 qry5.open 再 qry1.open, 還會出問題嗎 ?

4. 你沒貼出 ODBC for AS400 的版本, 不如到官方網站看一下有無最新的版本, 更新一下.

我認為問題應該與後端資料庫的鎖定機制 or ODBC for AS400 的 RecordLock Mode 有關,
而這些又與 TADOConnection1.IsolationLevel 及 TADOConnection1.Mode 兩個屬性, 以及 TADOQuery.LockType 有關,
倒過來說, 使用 ADO 對於 Record 的鎖定方式是與後端資料鎖定模式是有關係的.

如果你真的很想解決掉這個問題, 可慮一下我的第 2 點建議吧 !!
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#21 引用回覆 回覆 發表時間:2011-07-05 11:12:10 IP:59.120.xxx.xxx 訂閱


2.大大, 寫成view的話...非到最後一步,不會走這條路. 我現在是用BDE的元件就ok了.

3.還是會出一樣的問題

我是覺得跟odbc沒什麼關係
因為我前一版的程式大家還是正常使用
前一版的程式也是用adoquery這種做法,就沒問題,
程式也沒改到什麼,就是sql加兩個round() 跟 兩個case判斷
就出問題,

總之adoquery還是少用了 = =

另外...

還有另一個問題, 就是
if(adoquery5.IsEmpty) then begin
showmessage('查無資料~!');
exit;
//abort;
end;

這一段, 我編譯時都會錯在 abort; 這行, 所以我改用 exit 才不會出錯...真的是很奇怪的錯誤...之前還好好的,

===================引 用 smallfox 文 章===================
1. 可否將 TADOConnection 的屬性表貼出來 ?

2. 可否考慮將 qry1 及 qry5 的 SQL 寫成 View or Store Procedure ?

3. 你說先 qry1.open 後 qry5.open 沒問題,有試過將 LockType 改為 ltReadOnly 後,
若先 qry5.open再 qry1.open, 還會出問題嗎 ?

4. 你沒貼出 ODBC for AS400 的版本, 不如到官方網站看一下有無最新的版本, 更新一下.

我認為問題應該與後端資料庫的鎖定機制 or ODBC for AS400 的 RecordLock Mode 有關,
而這些又與 TADOConnection1.IsolationLevel及 TADOConnection1.Mode 兩個屬性, 以及 TADOQuery.LockType 有關,
倒過來說, 使用 ADO 對於 Record 的鎖定方式是與後端資料鎖定模式是有關係的.

如果你真的很想解決掉這個問題, 可慮一下我的第 2 點建議吧 !!
編輯記錄
it1506 重新編輯於 2011-07-04 21:14:14, 註解 無‧
it1506 重新編輯於 2011-07-04 21:15:06, 註解 無‧
smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#22 引用回覆 回覆 發表時間:2011-07-09 01:35:14 IP:203.73.xxx.xxx 訂閱
1. 複雜的 SQL 還是寫成 View or Store Procedure 比較有效率, 因為這些都是事先編譯好儲存在資料庫端, 若每台 Client 在要求資料時, DB 都要將這些複雜的 SQL 再編譯執行, 那會損失很多 DB Run Time.

2. 你在使用 D2006 之前的是 D5 的版本吧 ? abort 應該是用在 "事件" 中, 以停止你使用某個 "方法" 所引發的一連串 "事件" 的執行, 如: Post 會引發 BeforePost & AfterPost 兩事件, 若你在 BeforePost 中下了 abort, AfterPost 便會被停止執行 (有點像 "安全的 except"). 而在一般的 "程序" 中, 才是使用 exit 來中斷及結束, 這樣才是正確的概念.
(這樣的問題, 之前在本論壇中, 就有人提及過了)

3. 使用 BDE or ADO 並無一定, 哪種方式能解決問題比較重要. 如果你 Client 端的程式安裝環境不會麻煩, 其實使用 BDE 也無妨.

4. 把你多加的 round() & case 拿掉, ADOQuery 可以正常的 open & active 嗎 ?
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#23 引用回覆 回覆 發表時間:2011-07-11 10:00:29 IP:59.120.xxx.xxx 訂閱
1.就我了解,一直在變動table寫成view的話,效能應該不好吧,每變動一筆view就會去更新, 不如要查時就再進去就行了,
而且我的唯一查詢條件是變動的,不適合做成view.這資料也很多, 做成view的效率也沒有比較快.
我覺得view只適合做在比較少資料的...大量table.
2.這一點我倒是很疑惑, 為什麼我加了sql字串, abort就會出錯, 毫無關聯啊....而且我前一版的程式是用abort, 沒理由我改了sql字串,abort就會失效吧...
3.因為那個adoquery一直沒辦法解決,所以改用bde了, 只是...為什麼前一版程式就沒問題....疑惑啊~
4.前一版程式拿出來試ok , 新版的,就算把程式碼改成跟前一版一樣, 還是會出錯, 我真的很納悶.....
===================引 用 smallfox 文 章===================
1. 複雜的 SQL 還是寫成 View or Store Procedure 比較有效率, 因為這些都是事先編譯好儲存在資料庫端, 若每台 Client 在要求資料時, DB 都要將這些複雜的 SQL 再編譯執行, 那會損失很多 DB Run Time.

2. 你在使用D2006 之前的是 D5 的版本吧 ? abort 應該是用在 "事件" 中, 以停止你使用某個 "方法" 所引發的一連串 "事件" 的執行, 如: Post 會引發 BeforePost & AfterPost 兩事件, 若你在 BeforePost 中下了 abort, AfterPost 便會被停止執行 (有點像 "安全的 except"). 而在一般的 "程序" 中,才是使用 exit 來中斷及結束, 這樣才是正確的概念.
(這樣的問題, 之前在本論壇中, 就有人提及過了)

3. 使用 BDE or ADO 並無一定, 哪種方式能解決問題比較重要. 如果你 Client 端的程式安裝環境不會麻煩, 其實使用 BDE 也無妨.

4. 把你多加的 round() & case 拿掉, ADOQuery 可以正常的 open & active 嗎 ?
it1506
初階會員


發表:32
回覆:89
積分:49
註冊:2011-02-16

發送簡訊給我
#24 引用回覆 回覆 發表時間:2011-07-27 09:22:08 IP:59.120.xxx.xxx 訂閱
 經過測試

使用 delphi xe 也是有一樣的問題

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