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

simpledataset missing data provider or data packet

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


發表:6
回覆:7
積分:2
註冊:2010-08-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2017-11-13 18:30:23 IP:220.130.xxx.xxx 未訂閱
大家好:
因最近想用dbexpress來取代BDE,最近測試了simpledataset的元件,有個問題一直無法解決,只好來請教各位先進。
我先用simpledataset來執Open的動作,再來接著執行excute的動作,卻會彈出下面的訊息,不知有那個先進請指教一下。
SimpleDataSet: missing data provider or data packet

with SimpleDataSet do begin
Active:=false;
DataSet.CommandText:=' SELECT * FROM TP_FILETABLE WHERE DATA_NO=''ZZZZ'' ';
Open;
end;


with SimpleDataSet do begin
Active:=false;
DataSet.CommandText:=' DROP TABLE TP_FILETABLE';
Execute;
end;
------
delphi 新手,請多多指教
GrandRURU
站務副站長


發表:234
回覆:1654
積分:1752
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2017-11-14 08:56:10 IP:59.120.xxx.xxx 未訂閱
TSimpleDataSet = TSQLDataSet + TDataSetProvider + TClientDataSet

TSimpleDataSet 的 SQL 指定語法是

1.TSimepleDataSet.DataSet.CommandText
2.在 Active = True 時,把資料載入

等同
1.TSQLDataSet1.CommandText
2.ClientDataSet.Active = True

然而 TSimpleDataSet.Execute 時,卻是直接呼叫 TSimpleDataSet 內部的 ClientDataSet
1. TClientDataSet.CommandText
2. TClientDataSet.Execute

因為 TSimpleDataSet 內部的 TClientDataSet 沒有使用 ProviderName (當然也沒有 CommandText,因為它在 TSimpleDataSet.DataSet 裡),故會發生【missing data provider or data packet】例外

已知 TSimpleDataSet.DataSet = TSQLDataSet
解決方法即為使用【轉型】就可完成


===================引 用 lanbome0128 文 章===================
大家好:
因最近想用dbexpress來取代BDE,最近測試了simpledataset的元件,有個問題一直無法解決,只好來請教各位先進。
我先用simpledataset來執Open的動作,再來接著執行excute的動作,卻會彈出下面的訊息,不知有那個先進請指教一下。
SimpleDataSet: missing data provider or data packet

with SimpleDataSet do begin
Active:=false;
DataSet.CommandText:=' SELECT * FROM TP_FILETABLE WHERE DATA_NO=''ZZZZ'' ';
Open;
end;


with SimpleDataSet do begin
Active:=false;
DataSet.CommandText:=' DROP TABLE TP_FILETABLE';
Execute;
end;
編輯記錄
GrandRURU 重新編輯於 2017-11-14 08:57:47, 註解 無‧
lanbome0128
一般會員


發表:6
回覆:7
積分:2
註冊:2010-08-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2017-11-15 15:20:13 IP:220.130.xxx.xxx 未訂閱

感謝大大 GrandRURU的幫忙。小弟剛研究dbexpress元件,不太了你所說的轉型方法。
但我自已又多測試了一下,發現是SimpleDataSet.Active的問題。也就是當執行Execute 時,不可作Active:=false 的動作
就不會出現【missing data provider or data packet】例外。



with SimpleDataSet do begin
Active:=false;
DataSet.CommandText:=' SELECT * FROM TP_FILETABLE WHERE DATA_NO=''ZZZZ'' ';
Open;
end;


with SimpleDataSet do begin
// Active:=false;執行Execute 時,不可作Active:=false 的動作,就能順利執行Execute
DataSet.CommandText:=' DROP TABLE TP_FILETABLE';
Execute;
end;
------
delphi 新手,請多多指教
系統時間:2017-11-24 2:17:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!