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

Calculated 欄位之排序

尚未結案
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-01 16:39:49 IP:210.200.xxx.xxx 未訂閱
calField 為 Calculated 欄位,執行 Select * From Table1 Order By calField 會出現下列之 error message 無效的資料行名稱 'calField' 可有方法解決 ? 謝謝!
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-01 16:47:36 IP:61.222.xxx.xxx 未訂閱
你好: calculated形態的欄位是開啟後動態運算的,並不是來自資料庫,因此下sql語法自然無法以之排序,要將calculated欄位排序 有以下的方法 1.使用tclientdateset,將calculated欄位型態改為intercalc, 2.動態建立一個新欄位動態消除,在dataset開啟前下sql語法 alter table add ....,然後結束後 drop,在dataset開啟後動態填入這個新增欄位的值,當然這樣已經不是使用calculated欄位了... 提供您作參考..
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-01 17:09:40 IP:210.65.xxx.xxx 未訂閱
Hi:    可以考慮直接在 Query 中,直接由 DataBase 產生出該欄位,即在 SQL 語法中包含該計算欄位,如此即可以該欄位進行排序,不過先決條件是計算的資料來源都是從 DataBase 來的。     -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-01 17:37:52 IP:210.200.xxx.xxx 未訂閱
1.使用tclientdateset,將calculated欄位型態改為intercalc, ======================================================== 感謝 hahalin 兄, 看了一下元件盤, tclientdateset 是屬於 midas 的元件, midas的架構或觀念, 目前尚未接觸, 完全不清楚 若要使用 tclientdateset, 最少要使用到哪些元件? (現在我是以 ADOConnection ADOQuery 來處理資料) 謝謝!
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-01 17:42:24 IP:61.222.xxx.xxx 未訂閱
我要趕去上課 如果沒有高手回應 我九點左右會回家... 嗯...你這個問題我有掙扎過 不過根據borland提供的資料來看... calculated真的是無法拿來排序... 哎呀呀...不過...有解有解... 我有想過一種做法...等我...九點下課
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-01 17:42:25 IP:210.200.xxx.xxx 未訂閱
可以考慮直接在 Query 中,直接由 DataBase 產生出該欄位 ======================================================== 感謝 Fishman 兄, 上面這句話的意思, 小弟不太懂 可否麻煩 Fishman 兄撥空稍加說明 謝謝!
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-02 08:37:54 IP:210.65.xxx.xxx 未訂閱
Hi:    比如說,DataBase 有單價與數量,再 SQL 語法中你可以這樣下    select  s.selling_price,         s.ordered_quantity,         (s.selling_price * s.ordered_quantity) amount from    訂單資料表 where   訂單號碼 = ... order by         (s.selling_price * s.ordered_quantity)    直接由 DataBase 將該計算欄位直接算出並作為排序條件 (很抱歉,我用的 DataBase 是 Oracle,但是 MS-SQL 應該也可以) -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-02 11:01:32 IP:210.200.xxx.xxx 未訂閱
感謝 Fishman 兄, 小弟的情況是 calField 是寫在 OnCalcFields 事件中,由某兩欄位之比較運算 而給予另外欄位之值, 如下 if qy1.FieldByName('F1').AsString=qy1.FieldByName('F2').AsString) then qy1.FieldByName('calField').AsString:=qy1.FieldByName('F3').AsString else qy1.FieldByName('calField').AsString:=qy1.FieldByName('F4').AsString; 而非某兩欄位直接運算而得, 像這個情況 該如何寫這 SQL 敘述 ? 謝謝!
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-02 11:41:42 IP:210.65.xxx.xxx 未訂閱
Hi:    SQL Server:    
select alias_name = case f1
                    when f2 then f3
                    else f4
                    end
from   table
Oracle:
 
select  decode(f1,f2,f3,f4) alias_name
from    table
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
danajn
一般會員


發表:14
回覆:29
積分:8
註冊:2002-08-01

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-02 18:00:33 IP:211.75.xxx.xxx 未訂閱
可利用TBDEClientDataSet元件 1.DBConnection 接DATABASE 2.CommandText =所下的SQL敘述 3.將要排序的Calculated 改設為InternalCalc 4.IndexFieldNames =要排序的InternalCalc 如此即可達到Calculated 排序的功能
系統時間:2024-08-16 23:11:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!