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

如何把query查詢的結果存到虛擬table

答題得分者是:ying0515
juantonia
一般會員


發表:14
回覆:12
積分:5
註冊:2003-07-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-15 13:44:49 IP:211.20.xxx.xxx 未訂閱
請問:如何把
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-15 13:59:47 IP:218.5.xxx.xxx 未訂閱
試試 select * into temp1 from TableName
juantonia
一般會員


發表:14
回覆:12
積分:5
註冊:2003-07-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-15 16:11:32 IP:211.20.xxx.xxx 未訂閱
引言: 試試 select * into temp1 from TableName
在server主機上沒有temp1,請問要如何不在server主機上建一table,就可以把查詢的結果存至temp1,謝謝! with Query1 do begin Sql.clear; Sql.Add('Select a1,a2 into temp1 from temp2'); ... ...
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-15 16:24:49 IP:218.5.xxx.xxx 未訂閱
當然,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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-15 16:26:22 IP:61.218.xxx.xxx 未訂閱
可用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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-15 20:43:59 IP:63.84.xxx.xxx 未訂閱
您好﹗    就以暫存表格(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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-15 21:03:54 IP:61.30.xxx.xxx 未訂閱
你好: 補充一下,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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-15 21:15:26 IP:63.84.xxx.xxx 未訂閱
抱歉抱歉﹒ 小弟這兩天做SQL和Access的練習做暈了﹐兩者混淆不清﹐剛才重新再把筆記本拿出來看﹐才知道﹒﹒﹒﹒﹒﹒見諒見諒﹗ 謝謝
------
忻晟
juantonia
一般會員


發表:14
回覆:12
積分:5
註冊:2003-07-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-16 13:42:20 IP:211.20.xxx.xxx 未訂閱
引言: 當然,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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-16 13:55:11 IP:61.30.xxx.xxx 未訂閱
你好: 大家回答的這麼熱烈,但到現在為止還不知道你的資料庫為何耶 < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
juantonia
一般會員


發表:14
回覆:12
積分:5
註冊:2003-07-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-16 14:05:02 IP:211.20.xxx.xxx 未訂閱
引言: 你好: 大家回答的這麼熱烈,但到現在為止還不知道你的資料庫為何耶 < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
謝謝大家熱烈的回答,我抓的是dbase的資料
juantonia
一般會員


發表:14
回覆:12
積分:5
註冊:2003-07-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-16 14:19:50 IP:211.20.xxx.xxx 未訂閱
引言:
可用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
謝謝您的回答,但我沒用過TClientDataSet,請問 if not(cds1.eof) then cds2.CloneCursor(cds1,false,true); 中CloneCursor(cds1,false,true);是什麼意思 發表人 - juantonia 於 2003/07/16 15:47:55
juantonia
一般會員


發表:14
回覆:12
積分:5
註冊:2003-07-10

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-07-16 15:40:08 IP:211.20.xxx.xxx 未訂閱
cds1.commandtext:="select a1,a2 from temp1"; 出現error:Undeclared identifier'commandtext' delphi4是不是沒有commandtext
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-07-16 16:20:29 IP:218.5.xxx.xxx 未訂閱
dbase?delphi4?感覺是比較古老的東西。沒用過dbase,出現那個錯誤大概是不支援’Select…into’語法的原因。至於CloneCursor是用來把資料記錄從一個ClientDataSet複製到另一個ClientDataSet,相當於cds2.Data := cds1.Data;手頭上沒有delphi4,具體不知道是否不支持CommandText,但好像D4中可以用cds1.DataRequest(‘select a1,a2 from temp1’)
ying0515
中階會員


發表:90
回覆:168
積分:81
註冊:2003-01-04

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-07-16 22:03:33 IP:218.165.xxx.xxx 未訂閱
下列有各位先進發表相關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
系統時間:2024-04-28 8:59:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!