全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1982
推到 Plurk!
推到 Facebook!

請問有哪個物件可以拿來當臨時資料表嗎?

答題得分者是:GrandRURU
tp6jo3long
一般會員


發表:7
回覆:5
積分:2
註冊:2012-10-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-10-24 09:51:51 IP:114.34.xxx.xxx 訂閱
有試用ADOQuery沒有指定實體的資料表直接ADOQuery1.Insert就會發生錯誤"ADOQuery1: cannot perform this operation on a closed dataset"
ADOQuery可以這樣使用嗎(少設定什麼?)? 有哪個物件可以當臨時資料表?
mypigbaby
高階會員


發表:11
回覆:166
積分:150
註冊:2006-07-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-10-24 11:56:23 IP:60.244.xxx.xxx 訂閱
如果是SQL SERVER
豬寶寶建議用#開頭的來當臨時資料表
===================引 用 tp6jo3long 文 章===================
有試用ADOQuery沒有指定實體的資料表直接ADOQuery1.Insert就會發生錯誤"ADOQuery1: cannot perform this operation on a closed dataset"
ADOQuery可以這樣使用嗎(少設定什麼?)? 有哪個物件可以當臨時資料表?
老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-10-24 12:28:01 IP:210.61.xxx.xxx 未訂閱
delphi.ktop.com.tw/board.php
七樓的回文你有看嗎?







===================引 用 tp6jo3long 文 章===================
有試用ADOQuery沒有指定實體的資料表直接ADOQuery1.Insert就會發生錯誤"ADOQuery1: cannot perform this operation on a closed dataset"
ADOQuery可以這樣使用嗎(少設定什麼?)? 有哪個物件可以當臨時資料表?
christie
資深會員


發表:28
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-10-24 12:28:37 IP:59.125.xxx.xxx 未訂閱
CLIENTDATASET
===================引 用 tp6jo3long 文 章===================
有試用ADOQuery沒有指定實體的資料表直接ADOQuery1.Insert就會發生錯誤"ADOQuery1: cannot perform this operation on a closed dataset"
ADOQuery可以這樣使用嗎(少設定什麼?)? 有哪個物件可以當臨時資料表?
------
What do we live for if not to make life less difficult for each other?
tp6jo3long
一般會員


發表:7
回覆:5
積分:2
註冊:2012-10-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-10-24 15:40:33 IP:114.34.xxx.xxx 訂閱
 不好意思直接使用ClientDataSet1(新增沒動過任何設定)
ClientDataSet1.open;
ClientDataSet1.insert;
一樣不可以耶 那樣如何新增資料當作臨時資料表?

leveon
資深會員


發表:30
回覆:386
積分:303
註冊:2012-02-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2012-10-24 16:32:50 IP:118.165.xxx.xxx 訂閱
8樓的回文 你有看嗎 顆顆

http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=104615#8

Clientdataset的結構是空白的 必須拷貝ADOQuery1的結構
請參閱
http://delphi-inspired.blogspot.tw/2012/04/how-to-clone-tfield-and-tdataset-fields.html

===================引 用 tp6jo3long 文 章===================
不好意思直接使用ClientDataSet1(新增沒動過任何設定)
ClientDataSet1.open;
ClientDataSet1.insert;
一樣不可以耶 那樣如何新增資料當作臨時資料表?

aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2012-10-24 19:42:43 IP:114.32.xxx.xxx 訂閱
個人覺得豬寶寶這個做法比較容易,請你參考一下吧…但你都沒說到你的db是哪款的…
否則用 select * into #temp ……
然後再將此#temp 資料庫用 adoquery來搞就行…

當然,若你的db完全沒支持那 select into 的語法,或者也沒temp的資料表的做法…那就只好 clientdataset來做為一個臨時的客戶端來搞…但一整個也不是很容易就是。要看的與學的不少。

以上的技巧都覺得過難的話,那就自己開一至數個真實的"臨時表" (欄位結構與某來源是一樣的),然後使用前delete *,便可塞入新值,惡搞一通…再輸出。

===================引 用 mypigbaby 文 章===================
如果是SQL SERVER
豬寶寶建議用#開頭的來當臨時資料表
===================引 用 tp6jo3long 文 章===================
有試用ADOQuery沒有指定實體的資料表直接ADOQuery1.Insert就會發生錯誤"ADOQuery1: cannot perform this operation on a closed dataset"
ADOQuery可以這樣使用嗎(少設定什麼?)? 有哪個物件可以當臨時資料表?
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2012-10-25 09:38:33 IP:118.168.xxx.xxx 訂閱
 可參考用使用TxQuery元件
http://chee-yang.blogspot.tw/2009/12/txquery-20.html
tp6jo3long
一般會員


發表:7
回覆:5
積分:2
註冊:2012-10-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2012-10-25 09:49:55 IP:114.34.xxx.xxx 訂閱
是使用MYSQL ODBC取得資料
昨天有試出 在MYSQL上再建一個 所需要的暫存表格式
ADOQuery1 (本來要的資料)
ADOQuery2 (暫存表格式)
暫存格式內沒有資料
兩個都select完後
ADOQuery2.Connection := nil;
再用for if 將ADOQuery1在挑出要的資料存入ADOQuery2
之前也有看到#使用的文章 但是不知道怎麼用才可以 有直接打select * into #temp 會出現錯誤
剛接觸DELPHI很多都不知道,還請多多指導



===================引 用aftcast文 章===================
個人覺得豬寶寶這個做法比較容易,請你參考一下吧…但你都沒說到你的db是哪款的…
否則用 select * into #temp ……
然後再將此#temp 資料庫用 adoquery來搞就行…

當然,若你的db完全沒支持那 select into 的語法,或者也沒temp的資料表的做法…那就只好 clientdataset來做為一個臨時的客戶端來搞…但一整個也不是很容易就是。要看的與學的不少。

以上的技巧都覺得過難的話,那就自己開一至數個真實的"臨時表" (欄位結構與某來源是一樣的),然後使用前delete *,便可塞入新值,惡搞一通…再輸出。

老大仔
尊榮會員


發表:77
回覆:835
積分:1082
註冊:2006-07-06

發送簡訊給我
#10 引用回覆 回覆 發表時間:2012-10-25 12:50:07 IP:210.61.xxx.xxx 未訂閱
1.為何需要用for+if?
何不在Select 時下條件後再直接丟到TempTable
這樣不是更好?
連程式碼都省了

2.既然是MYSQL
那您是否應該要先去搜尋有關使用暫存資料表語法的文章會比較妥?
key word: mysql select into
豬寶寶大大的語法是MS-SQL
有些語法在MySQL不見得有相容(不確定,請自行爬文)

3.基本的做法應該是:
清空TempTable
ADOQuery1 查詢出資料
使用for if
假如該筆資料為所需的資料
再用ADOQuery2 Insert into到TempTable中


其實, 3應該已經算是程式碼了...


===================引 用 tp6jo3long 文 章===================
是使用MYSQL ODBC取得資料
昨天有試出 在MYSQL上再建一個 所需要的暫存表格式
ADOQuery1 (本來要的資料)
ADOQuery2 (暫存表格式)
暫存格式內沒有資料
兩個都select完後 ---既然暫存表沒資料就不用再Select,只要在每次使用前清空即可如同aftcast
前輩所說
ADOQuery2.Connection := nil;
再用for if 將ADOQuery1在挑出要的資料存入ADOQuery2
之前也有看到#使用的文章 但是不知道怎麼用才可以 有直接打select * into #temp 會出現錯誤
剛接觸DELPHI很多都不知道,還請多多指導



===================引 用aftcast文 章===================
個人覺得豬寶寶這個做法比較容易,請你參考一下吧…但你都沒說到你的db是哪款的…
否則用 select * into #temp ……
然後再將此#temp 資料庫用 adoquery來搞就行…

當然,若你的db完全沒支持那 select into 的語法,或者也沒temp的資料表的做法…那就只好 clientdataset來做為一個臨時的客戶端來搞…但一整個也不是很容易就是。要看的與學的不少。

以上的技巧都覺得過難的話,那就自己開一至數個真實的"臨時表" (欄位結構與某來源是一樣的),然後使用前delete *,便可塞入新值,惡搞一通…再輸出。

編輯記錄
老大仔 重新編輯於 2012-10-24 22:53:53, 註解 無‧
tp6jo3long
一般會員


發表:7
回覆:5
積分:2
註冊:2012-10-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2012-10-25 14:43:59 IP:114.34.xxx.xxx 訂閱
 感謝老大 多次指點
沒有直接在Select上加條件 要把資料抓下來後將資料做加工 部分資料改成*號或作一些處理後再秀成報表
第三個 是不是就是我現在所用的方式??

===================引 用 老大仔文 章===================
1.為何需要用for if?
何不在Select 時下條件後再直接丟到TempTable
這樣不是更好?
連程式碼都省了

2.既然是MYSQL
那您是否應該要先去搜尋有關使用暫存資料表語法的文章會比較妥?
key word: mysql select into
豬寶寶大大的語法是MS-SQL
有些語法在MySQL不見得有相容(不確定,請自行爬文)

3.基本的做法應該是:
清空TempTable
ADOQuery1 查詢出資料
使用for if
假如該筆資料為所需的資料
再用ADOQuery2 Insert into到TempTable中


其實, 3應該已經算是程式碼了...
GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2012-10-26 08:38:09 IP:59.120.xxx.xxx 未訂閱
Temp Table with ClientDataSet 的方法
http://topic.csdn.net/u/20070110/10/a53606ce-bcdc-4528-978d-0ccae51de735.html

節錄它的解答

[code delphi]
DataSetProvider1.dataset = adoquery
ClientDataSet.Providername = DataSetProvider1
配置好属性后
////////////
function GetDataSet(SQLCommand:string;DataSet:TClientDataSet):
Integer;
begin
try
adoconnection1.Connected:=false;
adoconnection1.Connected:=true;
clientdataset1.Active:=false;
clientdataset1.CommandText:=SQLCommand;
clientdataset1.Active:=true;
DataSet.Data:=ClientDataSet1.Data;
clientdataset1.Active:=false;
result:=S_OK;
except
result:=S_False;
end;
end;
[/code]
系統時間:2017-12-14 2:47:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!