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

SQL 語法產生暫存 Table ?

答題得分者是:Wesly
crlin
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-11 16:58:24 IP:203.74.xxx.xxx 未訂閱
在 Delphi 中如何利用 SQL 語法查詢資料庫中的某些資料後, 將所得結果存成 一個暫存的 Table , 然後第二次再利用 SQL 語法去存取這個暫存的 Table ?
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-11 17:52:24 IP:61.220.xxx.xxx 未訂閱
只需要一個Query 利用 SQL 語法查詢資料庫中的某些資料後 直接把Query元件的Filtered屬性設為True  然後在onFilterRecord事件中寫入所限制的條件即可    但是有一點想不通 既然要第二次再利用 SQL 語法去存取這個暫存的 Table  為什麼不直接用第二次SQL 語法去存取這個Table  不會覺得多此一舉嗎    < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-11 18:00:36 IP:211.22.xxx.xxx 未訂閱
不知道以下可不可行? 1.Query1 為第一次 Select, DataSource1 的 DataSet 屬性設為 Query1 Query2 為第二次 Select, Query2 的 DataSource 屬性設為 DataSource1 2.Query1 做第一次 Select, 第二次的條件用 Filter 來做
andersonhsieh
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-11 19:23:56 IP:211.23.xxx.xxx 未訂閱
你如果是用MSQL可以試試這樣做 先下一段SELECT的SQL,如下 SELECT * INTO #ADDR_TEMP FROM ADDRESS_BOOK 然後再下 SELECT * FROM #ADDR_TEMP 注意#ADDR_TEMP在連線未終止前都會存在,只要連線終止MSSQL SERVER會自動將該暫存TABLE刪除 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
crlin
一般會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-12 14:57:08 IP:203.74.xxx.xxx 未訂閱
以下是我原來查詢的語法 Query1.SQL.Clear; Query1.SQL.Add('select SA_BS.Sales_num as f1, sum(SA_DT.Sell_Penny) as f2 from SA_BS, SA_DT where SA_DT.Sales_num = SA_BS.Sales_num group by SA_BS.Sales_num'); Query2.SQL.Clear; Query2.SQL.Add('select SA_BS.Sales_num, SA_BS.SA_date, SA_BS.Bill_num, SA_BS.ticket_num, Query1.f1 from SA_BS, Query1 where SA_BS.Sales_num = Query1.f1 and SA_BS.SA_date >= :num1 and SA_BS.SA_date < :num2 order by SA_BS.SA_date'); Query2.ParamByName('num1').AsDateTime := t1; Query2.ParamByName('num2').AsDateTime := t2; Query1.Open; Query2.Open; 但是出現錯誤訊息表示無法找到 Query1 這個 "Table" 故會有此想法 可否再請教 "在onFilterRecord事件中寫入所限制的條件" 是指什麼限製條件呢 ? 謝謝 !
andersonhsieh
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-12 15:39:09 IP:211.20.xxx.xxx 未訂閱
你的SQL本身就是錯的,你怎麼可以對QUERY1做SELECT呢?不知你是從何學來的? @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
Wesly
中階會員


發表:14
回覆:103
積分:53
註冊:2002-05-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-12 15:45:08 IP:211.22.xxx.xxx 未訂閱
從您的原始語法, 似乎弄錯了TQuery與資料庫表格的差異性了. 原本的Query1是Delphi 的一個抓取資料的資料集是存放在Local端。 而在Query2中的SQL語法Query1,在SQL語法中定義是表格名稱,除非在資料庫中已建立該表格,否則是無法找到Query1這個表格的。 在Delphi中的Query1.SQL中輸入下列語法, 應該就可以了 Select SA_BS.Sales_num, SA_BS.SA_date, SA_BS.Bill_num, SA_BS.ticket_num, Query1.f1 From SA_BS, (Select SA_BS.Sales_num as f1, sum(SA_DT.Sell_Penny) as f2 From SA_BS, SA_DT Where SA_DT.Sales_num = SA_BS.Sales_num Group by SA_BS.Sales_num) Query1 Where SA_BS.Sales_num = Query1.f1 and SA_BS.SA_date >= :num1 and SA_BS.SA_date < :num2 order by SA_BS.SA_date
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-12 16:31:38 IP:61.220.xxx.xxx 未訂閱
引言: 以下是我原來查詢的語法 Query1.SQL.Clear; Query1.SQL.Add('select SA_BS.Sales_num as f1, sum(SA_DT.Sell_Penny) as f2 from SA_BS, SA_DT where SA_DT.Sales_num = SA_BS.Sales_num group by SA_BS.Sales_num'); Query2.SQL.Clear; Query2.SQL.Add('select SA_BS.Sales_num, SA_BS.SA_date, SA_BS.Bill_num, SA_BS.ticket_num, Query1.f1 from SA_BS, Query1 where SA_BS.Sales_num = Query1.f1 and SA_BS.SA_date >= :num1 and SA_BS.SA_date < :num2 order by SA_BS.SA_date'); Query2.ParamByName('num1').AsDateTime := t1; Query2.ParamByName('num2').AsDateTime := t2; Query1.Open; Query2.Open; 但是出現錯誤訊息表示無法找到 Query1 這個 "Table" 故會有此想法 可否再請教 "在onFilterRecord事件中寫入所限制的條件" 是指什麼限製條件呢 ? 謝謝 !
你的SQL下錯了 在Query2 語法裡 是不可以用Query1.f1 因為Query1是delphi的東西 不是資料庫的東西 當然會找不到QUERY1這個Table 因為資料庫裡根本沒有QUERY1這個Table 而且你在Query2 語法裡所下的Query1.f1應該是指SA_BS.Sales_num 但是你在Query2 語法前面已經有select 這個欄位 所以不需要 可以把 Query1.f1拿掉 有兩個解決方法 (一):Query2 語法改為 Query2.SQL.Add('select SA_BS.Sales_num, SA_BS.SA_date, SA_BS.Bill_num, SA_BS.ticket_num, Query1.f1 from SA_BS, where SA_BS.SA_date >= :num1 and SA_BS.SA_date < :num2 order by SA_BS.SA_date' 這樣就可以了 不需要做where SA_BS.Sales_num = Query1.f1 的動作 而且沒有這樣的語法 (二):其實你這兩個Query可以下在一起 如下 select SA_BS.Sales_num, SA_BS.SA_date, SA_BS.Bill_num,SA_BS.ticket_num,sum(SA_DT.Sell_Penny) where SA_DT.Sales_num = SA_BS.Sales_num and SA_BS.SA_date >= :num1 and SA_BS.SA_date < :num2 group by SA_BS.Sales_num order by SA_BS.SA_date 這段語法試試看 它的結果跟你用兩個Query的結果是一樣的 而且也不用再做onFilterRecord事件中寫入所限制的條件 至於你說的在onFilterRecord事件中寫入所限制的條件" 是指什麼限製條件呢 就是當第二項的語法可以不寫 and SA_BS.SA_date >= :num1 and SA_BS.SA_date < :num2 然後在onFilterRecord事件中寫 Accept := (((Query2.FieldByName('SA_date ').AsDateTime>=t1)and(Query2.FieldByName('SA_date ').AsDateTime<=t2))=True); 記得把Query元件的Filtered屬性設為True 這樣也可以 出來的資料是一樣的 提供給你做參考 不明白再一起討論喔 < >< > 回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/09/12 16:35:39 發表人 - T.J.B 於 2002/09/12 16:39:41 發表人 - T.J.B 於 2002/09/12 16:41:53
------
天行健
君子當自強不息~~@.@
系統時間:2024-11-25 20:32:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!