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

有append功能的Query元件 SQL語法內有Token錯誤

答題得分者是:SwingGuppy
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-20 17:46:30 IP:210.65.xxx.xxx 訂閱
請教各位大大:
小的有一個QUERY,因為需要delete的功能,所以將屬性CachedUpdates與RequestLive兩個設成true
其SQL語法內有decode判斷不同的字串,要顯示不同的結果字串,故有用到單引號(將字串圈起來)
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID,INSTR(T.ITEMID,'-') 1,LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-'))), 'L3/4','201','L4/5','301','')) AS LN FROM T
可是變成有錯誤訊息,找不出原因,請有空的人幫忙一下,感恩~


SwingGuppy
初階會員


發表:1
回覆:18
積分:38
註冊:2006-12-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-20 21:27:04 IP:61.62.xxx.xxx 訂閱

===================引 用 moko 文 章===================
請教各位大大:
小的有一個QUERY,因為需要delete的功能,所以將屬性CachedUpdates與RequestLive兩個設成true?
其SQL語法內有decode判斷不同的字串,要顯示不同的結果字串,故有用到單引號(將字串圈起來)?
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID,INSTR(T.ITEMID,'-') 1,LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-'))), 'L3/4','201','L4/5','301','')) AS LN FROM T?
可是變成有錯誤訊息,找不出原因,請有空的人幫忙一下,感恩~

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


錯誤是發生在DECODE(.....)後面多了一個 右括號 ')'
------
受人點滴,湧泉以報。
編輯記錄
SwingGuppy 重新編輯於 2007-04-20 21:30:59, 註解 無‧
SwingGuppy 重新編輯於 2007-04-20 21:36:10, 註解 無‧
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-21 18:01:54 IP:210.65.xxx.xxx 訂閱
hi SwingGuppy:
您好,不好意思,是我po文章時手誤多打了個 )
實際上的沒有,所以問題還是存在
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID,INSTR(T.ITEMID,'-') 1,LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-'))), 'L3/4','201','L4/5','301','') AS LN FROM T
再麻煩大家有沒有其他解法?感恩~


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

===================引 用 moko 文 章===================
請教各位大大:
小的有一個QUERY,因為需要delete的功能,所以將屬性CachedUpdates與RequestLive兩個設成true?
其SQL語法內有decode判斷不同的字串,要顯示不同的結果字串,故有用到單引號(將字串圈起來)?
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID,INSTR(T.ITEMID,'-') 1,LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-'))), 'L3/4','201','L4/5','301','')) AS LN FROM T?
可是變成有錯誤訊息,找不出原因,請有空的人幫忙一下,感恩~

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


錯誤是發生在DECODE(.....)後面多了一個 右括號 ')'
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-21 18:11:51 IP:211.22.xxx.xxx 未訂閱
錯誤訊息已經說的很明確啦~
你錯用了關鍵字LENGTH,Length是Delphi的函數,,如果你是用MSSQL那麼SQL陳述式計算字串長度函數應該是LEN。
===================引 用 moko 文 章===================
請教各位大大:
小的有一個QUERY,因為需要delete的功能,所以將屬性CachedUpdates與RequestLive兩個設成true
其SQL語法內有decode判斷不同的字串,要顯示不同的結果字串,故有用到單引號(將字串圈起來)
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID,INSTR(T.ITEMID,'-') 1,LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-'))), 'L3/4','201','L4/5','301','')) AS LN FROM T
可是變成有錯誤訊息,找不出原因,請有空的人幫忙一下,感恩~

SwingGuppy
初階會員


發表:1
回覆:18
積分:38
註冊:2006-12-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-21 18:46:24 IP:61.62.xxx.xxx 訂閱
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID, INSTR(T.ITEMID,'-') 1, (LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-')))), 'L3/4','201','L4/5','301','') AS LN FROM T

我以前用Oracle時也常碰到這個問題,目前手邊沒有機器可以測,要請其他高手幫幫忙了。

建議你加上紅色的那兩個括弧。

Stallion大大不好意思,我不清楚發問者的資料庫用哪種,不過我覺得比較像是Oracle
------
受人點滴,湧泉以報。
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-21 19:11:23 IP:210.65.xxx.xxx 訂閱
感謝上面兩位的回覆
小的使用的是ORACLE,而且一定是sql在PLSQL測過才會放到query內使用~
也加了SwingGuppy的括號,但還是沒改變
個人覺得問題是出在Catchedupdates與RequestLive兩個屬性上
因為設為false就不會有問題了說~but我需要有delete的功能哩~真是摳鬧啊~


===================引 用 SwingGuppy 文 章===================
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID, INSTR(T.ITEMID,'-') 1,? (LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-')))), 'L3/4','201','L4/5','301','') AS LN FROM T

我以前用Oracle時也常碰到這個問題,目前手邊沒有機器可以測,要請其他高手幫幫忙了。

建議你加上紅色的那兩個括弧。

Stallion大大不好意思,我不清楚發問者的資料庫用哪種,不過我覺得比較像是Oracle
SwingGuppy
初階會員


發表:1
回覆:18
積分:38
註冊:2006-12-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-21 19:46:58 IP:61.62.xxx.xxx 訂閱
不曉得你是不是用BDE,如果是的話請檢查 confiuration -> Drivers -> native -> Oracle -> DLL32
將預設值SQLORA8.DLL改成SQLORA32.DLL

===================引 用 moko 文 章===================
感謝上面兩位的回覆
小的使用的是ORACLE,而且一定是sql在PLSQL測過才會放到query內使用~
也加了SwingGuppy的括號,但還是沒改變
個人覺得問題是出在Catchedupdates與RequestLive兩個屬性上
因為設為false就不會有問題了說~but我需要有delete的功能哩~真是摳鬧啊~
------
受人點滴,湧泉以報。
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-04-21 19:55:50 IP:210.65.xxx.xxx 訂閱
小的本來就用SQLORA32.DLL 了說~

===================引 用 SwingGuppy 文 章===================
不曉得你是不是用BDE,如果是的話請檢查 confiuration -> Drivers -> native -> Oracle -> DLL32
將預設值SQLORA8.DLL改成SQLORA32.DLL

===================引 用 moko 文 章===================
感謝上面兩位的回覆
小的使用的是ORACLE,而且一定是sql在PLSQL測過才會放到query內使用~
也加了SwingGuppy的括號,但還是沒改變
個人覺得問題是出在Catchedupdates與RequestLive兩個屬性上
因為設為false就不會有問題了說~but我需要有delete的功能哩~真是摳鬧啊~
SwingGuppy
初階會員


發表:1
回覆:18
積分:38
註冊:2006-12-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-04-21 20:21:02 IP:61.62.xxx.xxx 訂閱
我想問題應該是出在TQuery的RequestLive只能一次對應到一個Table,  

RequestLive設為true後,decode(...)中的許多函數都被當成Table欄位,BDE認不出來於是產生錯誤。

VCL Reference

RequestLive property (TQuery)
.....
A true value for RequestLive is a request for an updatable result set. It does not guarantee that the database back-end will return an updatable result set.
.....
Note: All multi-table queries return read-only result sets.

可用CanModify屬性來檢測Query出來的Dataset是否可以修改。

------
受人點滴,湧泉以報。
編輯記錄
SwingGuppy 重新編輯於 2007-04-21 20:46:28, 註解 無‧
SwingGuppy 重新編輯於 2007-04-22 00:03:03, 註解 無‧
system72
中階會員


發表:15
回覆:114
積分:55
註冊:2005-08-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-04-22 11:27:00 IP:219.80.xxx.xxx 訂閱

如果是 ( ) 數目 對不對稱的問題,可以用Rainbow Editor 來看,還可,先成Html格式,在複製貼到討論區如下: 這樣就可以保留顏色.

DECODE(
TRIM( SUBSTR( T.ITEMID, INSTR(T.ITEMID,'-') 1, LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-') ) ),
'L3/4','201','L4/5','301',''))




===================引 用 moko 文 章===================
請教各位大大:
小的有一個QUERY,因為需要delete的功能,所以將屬性CachedUpdates與RequestLive兩個設成true?
其SQL語法內有decode判斷不同的字串,要顯示不同的結果字串,故有用到單引號(將字串圈起來)?
SELECT T.*, DECODE(TRIM(SUBSTR(T.ITEMID,INSTR(T.ITEMID,'-') 1,LENGTH(T.ITEMID)-INSTR(T.ITEMID,'-'))), 'L3/4','201','L4/5','301','')) AS LN FROM T?
可是變成有錯誤訊息,找不出原因,請有空的人幫忙一下,感恩~


編輯記錄
system72 重新編輯於 2007-04-22 23:43:26, 註解 增加連結‧
system72 重新編輯於 2007-04-28 18:02:52, 註解 無‧
moko
一般會員


發表:31
回覆:34
積分:13
註冊:2002-09-20

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-04-23 11:45:52 IP:210.65.xxx.xxx 訂閱

大家好
我看了書上的確也是說TQuery的RequestLive只能一次對應到一個Table,
書上說可以再使用一個TUpdateSQL元件來解決這個問題
我也試過是可行的
再此感謝大家的幫忙~~感恩!

===================引 用 SwingGuppy 文 章===================
我想問題應該是出在TQuery的RequestLive只能一次對應到一個Table,??

RequestLive設為true後,decode(...)中的許多函數都被當成Table欄位,BDE認不出來於是產生錯誤。

?VCL Reference

RequestLive property (TQuery)
.....
A true value for RequestLive is a request for an updatable result set. It does not guarantee that the database back-end will return an updatable result set.
.....
Note:?All multi-table queries return read-only result sets.

可用CanModify屬性來檢測Query出來的Dataset是否可以修改。

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