SQL 語法產生暫存 Table ? |
答題得分者是:Wesly
|
crlin
一般會員 發表:47 回覆:57 積分:20 註冊:2002-07-23 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
crlin
一般會員 發表:47 回覆:57 積分:20 註冊:2002-07-23 發送簡訊給我 |
以下是我原來查詢的語法 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 發送簡訊給我 |
|
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
從您的原始語法, 似乎弄錯了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 發送簡訊給我 |
引言: 以下是我原來查詢的語法 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
------
天行健 君子當自強不息~~@.@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |