如何把query查詢的結果存到虛擬table |
答題得分者是:ying0515
|
juantonia
一般會員 發表:14 回覆:12 積分:5 註冊:2003-07-10 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
juantonia
一般會員 發表:14 回覆:12 積分:5 註冊:2003-07-10 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
當然,temp1是虛擬的表,無須建立的,假設您要對已存在的一個表Table1進行查詢,然後要把查詢的結果放到一個暫時的虛擬表中,就象您剛才寫的語句即可
Select a1,a2 into #temp1 from Table1 where …
Select a1, a2 from #temp1
試試看吧,在我這邊是可以的 //很抱歉,不是很清楚您的需求,上面的語句也有出入,會在資料庫中自動建立一個Temp1資料表,可把Temp1改成#Temp1,即做為臨時表,這樣在資料源關閉時會自動刪除該表。 發表人 - Rain 於 2003/07/15 17:06:32
|
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
可用TClientDataSet在Client記憶體中建立虛擬table, cds1: TClientDataSet; cds2: TClientDataSet; 再設計時期對cds2元件加入欄位並按右鍵選Create DataSet 或者執行期動態建立欄位... cds1.close; cds1.commandtext := 'select a1,a2 from temp1'; cds1.open; if not(cds1.eof) then cds2.CloneCursor(cds1,false,true); 不知是否滿足你的需求?Delphi Man
------
Delphi |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 就以暫存表格(Temporary Table)而已﹐小弟比較贊同使用'Select 欄位 into 暫存表格名 from 資料表名'這樣的SQL方法﹐在系統一結束時即可自動清除此暫存表格﹒ 例﹕將產品編號﹑供應商代碼﹑產品名稱及目前單價上漲0.5%之新單價建立一名為Productstemp的暫存表格﹒
Select Prod_num, supp_code, description, unit_price*1.05 new_price into productstemp from products 不知您使用何資料庫﹐此例為MSSQL之資料庫﹐若使用Access資料庫時﹐需在new_price新欄位名前加上As 希望有用﹗ 努力,相信會獲得美麗!
忻晟
------
忻晟 |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
補充一下,MS-SQL 下的暫存資料表正如 Rain 夥伴所說,但有分全域與區域兩種。
#table_name 為區域暫存資料表,##table_name 為全域暫存資料表(藍色字為前置碼)。
下面說明節錄自 MS-SQL 線上說明手冊。但在 Access 中似乎並無暫存資料表的概念喔。 MS-SQL 暫存資料表說明
您可以建立區域或全域暫存資料表。區域暫存資料表只能在目前的工作階段中使用;全域暫存資料表可以在所有的工作階段中使用。
區域暫存資料表使用單一數字符號作為前置碼 (#table_name),而全域暫存資料表使用兩個數字符號作為前置碼(##table_name)。
當範圍超過時,便會自動卸除暫存資料表,除非先明確地使用 DROP TABLE執行卸除:
預存程序中所建立的暫存資料表當預存程序完成時,便會自動卸除。建立資料表的預存程序所執行的任何巢狀預存程序皆可以參考資
料表。呼叫建立資料表之預存程序的處理序無法參考資料表。在目前工作階段結束時,便會自動卸除其它所有的暫存資料表。當建立
資料表的工作區域結束以及其它所有工作停止參考時,便會自動卸除全域資料表。工作與資料表的關聯只維持單一 Transact-SQL 陳
述式的生命週期。這表示在建立工作階段結束時主動參考資料表的上一個 Transact-SQL 陳述式完成時,卸除全域資料表。
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
juantonia
一般會員 發表:14 回覆:12 積分:5 註冊:2003-07-10 發送簡訊給我 |
引言: 當然,temp1是虛擬的表,無須建立的,假設您要對已存在的一個表Table1進行查詢,然後要把查詢的結果放到一個暫時的虛擬表中,就象您剛才寫的語句即可 Select a1,a2 into #temp1 from Table1 where … Select a1, a2 from #temp1 試試看吧,在我這邊是可以的 //很抱歉,不是很清楚您的需求,上面的語句也有出入,會在資料庫中自動建立一個Temp1資料表,可把Temp1改成#Temp1,即做為臨時表,這樣在資料源關閉時會自動刪除該表。 發表人 - Rain 於 2003/07/15 17:06:32我在 |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
juantonia
一般會員 發表:14 回覆:12 積分:5 註冊:2003-07-10 發送簡訊給我 |
|
juantonia
一般會員 發表:14 回覆:12 積分:5 註冊:2003-07-10 發送簡訊給我 |
引言:謝謝您的回答,但我沒用過TClientDataSet,請問 if not(cds1.eof) then cds2.CloneCursor(cds1,false,true); 中CloneCursor(cds1,false,true);是什麼意思 發表人 - juantonia 於 2003/07/16 15:47:55可用TClientDataSet在Client記憶體中建立虛擬table, cds1: TClientDataSet; cds2: TClientDataSet; 再設計時期對cds2元件加入欄位並按右鍵選Create DataSet 或者執行期動態建立欄位... cds1.close; cds1.commandtext := 'select a1,a2 from temp1'; cds1.open; if not(cds1.eof) then cds2.CloneCursor(cds1,false,true); 不知是否滿足你的需求?Delphi Man |
juantonia
一般會員 發表:14 回覆:12 積分:5 註冊:2003-07-10 發送簡訊給我 |
|
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
|
ying0515
中階會員 發表:90 回覆:168 積分:81 註冊:2003-01-04 發送簡訊給我 |
下列有各位先進發表相關TClientDataSet的精采文章可供參考:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28513
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=24044
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21521 Delphi Man 發表人 - ying0515 於 2003/07/16 22:05:19
------
Delphi |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |