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

TQuery 的 SQL command 長度只限 256 ?

 
crlin
一般會員


發表:47
回覆:57
積分:20
註冊:2002-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-07 13:31:20 IP:203.74.xxx.xxx 未訂閱
TQuery 的 SQL command 似乎只能允許長度 256 個字元的 command string 超過 256 的部分在執行時會被自動切掉, 造成 command 錯誤 請問 若欲查詢的 command 很長時(超過 256 個字元)該怎麼辦呢 ?? thanks!!
danny
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-07 13:42:53 IP:210.200.xxx.xxx 未訂閱
引言: TQuery 的 SQL command 似乎只能允許長度 256 個字元的 command string 超過 256 的部分在執行時會被自動切掉, 造成 command 錯誤 請問 若欲查詢的 command 很長時(超過 256 個字元)該怎麼辦呢 ?? thanks!!
我查了一下 TQuery.SQL 是宣告成 TStrings, 理論上應該可以到好幾 GB 的容量. 不知道您是如何使用的 ? 一般是這樣下 SQL 語法: TQuery.SQL.Clear; TQuery.SQL.Add('select * from TestTable');
------
將問題盡快結案也是一種禮貌!
crlin
一般會員


發表:47
回覆:57
積分:20
註冊:2002-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-07 14:03:48 IP:203.74.xxx.xxx 未訂閱
因為是要同時從好幾個不同的 Table 中 select 出資料, 因此無法用萬用字元, 我的SQL 語法如下 Query1.SQL.Clear; Query1.SQL.Add('select PC_BS.PC_paper_num as f1, PC_BS.PC_date, PC_BS.PC_depart, MN_DT.MN_short_name, PC_DT.item_num, MT_DT.MT_code, PC_DT.unit_name, PC_DT.unit_price, PC_DT.coin, PC_DT.quantity ,PC_BS.rcv_date,PC_BS.ava_ex_date, PC_BS.act_ex_date, PC_BS.Fax, PC_BS.memo, PC_DT.need_date, PC_DT.stock, PC_DT.hint_card, PC_DT.supply_num, PC_DT.memo, MT_DT.MT_name from PC_BS, PC_DT, MT_DT, MN_DT where MT_DT.MT_code = PC_DT.MT_code and PC_BS.PC_paper_num = PC_DT.PC_paper_num and PC_BS.MN_code = MN_DT.MN_short_name order by f1'); Query1.Open; 執行時出現以下訊息 String literals may have at most 255 elements
天外來客
初階會員


發表:22
回覆:199
積分:44
註冊:2001-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-07 14:18:49 IP:210.243.xxx.xxx 未訂閱
改成 Query1.SQL.Text := 'select PC_BS.PC_paper_num as f1, PC_BS.PC_date, PC_BS.PC_depart, MN_DT.MN_short_name, PC_DT.item_num, MT_DT.MT_code, PC_DT.unit_name, PC_DT.unit_price, PC_DT.coin, PC_DT.quantity ,PC_BS.rcv_date,PC_BS.ava_ex_date, PC_BS.act_ex_date, PC_BS.Fax, PC_BS.memo, PC_DT.need_date, PC_DT.stock, PC_DT.hint_card, PC_DT.supply_num, PC_DT.memo, MT_DT.MT_name from PC_BS, PC_DT, MT_DT, MN_DT where MT_DT.MT_code = PC_DT.MT_code and PC_BS.PC_paper_num = PC_DT.PC_paper_num and PC_BS.MN_code = MN_DT.MN_short_name order by f1' ; Try 一下看看吧.... 不要用 add 的 直接把值丟進去...
crlin
一般會員


發表:47
回覆:57
積分:20
註冊:2002-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-07 14:25:34 IP:203.74.xxx.xxx 未訂閱
用 Query1.SQL.Text 的結果和用 Query1.SQL.Add 的結果都相同耶 !! 還有沒有別的方法呢 ? thanks!
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-08-07 15:21:31 IP:203.204.xxx.xxx 未訂閱
引言: 用 Query1.SQL.Text 的結果和用 Query1.SQL.Add 的結果都相同耶 !! 還有沒有別的方法呢 ? thanks!
如果你中間有用 分隔字串,是只能到 255,可用變數分段加。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
cbrskimo
一般會員


發表:9
回覆:14
積分:4
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-08-07 15:22:05 IP:211.21.xxx.xxx 未訂閱
引言: 用 Query1.SQL.Text 的結果和用 Query1.SQL.Add 的結果都相同耶 !! 還有沒有別的方法呢 ? thanks!
do it ! var s1:String; s1:='select .....'; s1:=s1 ' from....'; s1:=s1 ' ...'; s1:=s1 '...'; Query1.SQL.Clear; query1.sql.add(s1); Query1.open;
klmer
一般會員


發表:11
回覆:46
積分:13
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-08-07 17:39:21 IP:210.243.xxx.xxx 未訂閱
嗯嗯 分段加應該是可能 我想只是差在那個換行符號 而且個人建議可以把 SQL 分開寫 select PC_BS.PC_paper_num as f1, PC_BS.PC_date, PC_BS.PC_depart, MN_DT.MN_short_name, PC_DT.item_num, MT_DT.MT_code, PC_DT.unit_name, PC_DT.unit_price, PC_DT.coin, PC_DT.quantity ,PC_BS.rcv_date,PC_BS.ava_ex_date, PC_BS.act_ex_date, PC_BS.Fax, PC_BS.memo, PC_DT.need_date, PC_DT.stock, PC_DT.hint_card, PC_DT.supply_num, PC_DT.memo, MT_DT.MT_name FROM PC_BS, PC_DT, MT_DT, MN_DT WHERE MT_DT.MT_code = PC_DT.MT_code and PC_BS.PC_paper_num = PC_DT.PC_paper_num and PC_BS.MN_code = MN_DT.MN_short_name Order by f1 這樣以後比較好 maintain ^^"...
crlin
一般會員


發表:47
回覆:57
積分:20
註冊:2002-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-08-08 12:02:27 IP:203.74.xxx.xxx 未訂閱
我試過利用變數分段加 結果還是不行 錯誤訊息是 驅動程式參數太少預期個數 2 我在 Query1.Open 前加一行 ShowMessage(sqlCommand); 結果出現的 sqlcommand 還是在一半的地方被截掉了 各位高手快快幫我想想辦法吧 ! thanks !
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-08-08 12:55:35 IP:211.20.xxx.xxx 未訂閱
不知你如何將以上SQL加到QUERY.SQL去,你如果是直接將SQL.TEXT指定為以上SQL則會有問題,因為TSTRINGLIST的一行最多只能容下255個字元, 你可以試著一行一行用SQL.ADD去加入試試看 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-08-08 12:58:17 IP:210.64.xxx.xxx 未訂閱
不然就換個做法 如果這個查詢比較固定 就寫成view ,不就讓程式簡單多了? 噓~~~~~~沉思中…
danny
版主


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-08-08 14:28:21 IP:210.200.xxx.xxx 未訂閱
引言: 我試過利用變數分段加 結果還是不行 錯誤訊息是 驅動程式參數太少預期個數 2 我在 Query1.Open 前加一行 ShowMessage(sqlCommand); 結果出現的 sqlcommand 還是在一半的地方被截掉了 各位高手快快幫我想想辦法吧 ! thanks !
您可以用這樣方式分段加入看看, 而且每一段後面可以不用空格. Query1.SQL.Add('select * from TableName'); Query1.SQL.Add('where aaa = :aaa and'); Query1.SQL.Add('bbb = :bbb and'); Query1.SQL.Add('ccc = :ccc'); Query1.SQL.Add('order by aaa'); ShowMessage 的參數是 String 當然會被切斷.
------
將問題盡快結案也是一種禮貌!
系統時間:2024-04-26 8:18:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!