Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизПочему при обновлении ClientDataSet Найти похожие ветки
← →
Ega23 © (2005-10-31 16:25) [0]... ему надо заново задавать провайдера?
В ран-тайме создаю ADOQuery, DataSetProvider, ClientDataSet и DataSource.
При попытке обновления данных без задания провайдера (жирным) вылезает эксепшн "Missing data provider or data packet"
type
TForm1 = class(TForm)
aDBGrid: TDBGrid;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure CreateAll;
procedure Refresh;
public
{ Public declarations }
aQuery:TADOQuery;
aDS:TDataSource;
aCDS:TClientDataSet;
aDSP:TDataSetProvider;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.CreateAll;
var
aSQL:String;
begin
KdrDBConnection:=TKdrDBConnection.Create;
KdrDBConnection.ConnectKdr("dbsrv2", "arm2");
aSQL:="Select * from Classes";
aQuery:=TADOQuery.Create(Self);
aQuery.SQL.Text:=aSQL;
aDSP:=TDataSetProvider.Create(Self);
aDSP.DataSet:=aQuery;
aCDS:=TClientDataSet.Create(Self);
aCDS.SetProvider(aDSP);
aDS:=TDataSource.Create(Self);
aDS.DataSet:=aCDS;
aDBGrid.DataSource:=aDS;
KdrDBConnection.ConnectQueries(Self);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateAll;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Refresh;
end;
procedure TForm1.Refresh;
begin
if aCDS.Active then
begin
aCDS.EmptyDataSet;
aCDS.Close;
end;
aQuery.Close;
aQuery.Open;
aCDS.SetProvider(aDSP);
aCDS.Open;
end;
← →
Johnmen © (2005-10-31 16:33) [1]Потому, что читать Note из SetProvider + F1
← →
Ega23 © (2005-10-31 16:35) [2]
> Потому, что читать Note из SetProvider + F1
Да я прочитал. Скажем так, мне непонятно зачем так сделано?
Насколько я понимаю, менять провайдера на ActiveChanged - всё равно, что Connection каждый раз для TADOQuery задавать.
Т.е. какова была мотивация при создании TClientDataSet?
← →
Johnmen © (2005-10-31 16:50) [3]Видимо, потому, что источник данных для провайдера в общем случае может претерпеть изменения. И SetProvider критичен к этому......
Я бы прописал "однократно" ProviderName для CDS.
← →
Ega23 © (2005-10-31 16:54) [4]
> Видимо, потому, что источник данных для провайдера в общем
> случае может претерпеть изменения. И SetProvider критичен
> к этому......
> Я бы прописал "однократно" ProviderName для CDS.
Я в конечном итоге так и сделал.
Просто не совсем ясно, для чего был выбран такой странный путь с провайдером...
← →
Johnmen © (2005-10-31 16:58) [5]Мне тоже не ясно...:)
Хотя смутные мысли есть по прочтении хелпа...
← →
Ega23 © (2005-10-31 17:01) [6]
> Я в конечном итоге так и сделал.
> Просто не совсем ясно, для чего был выбран такой странный
> путь с провайдером...
>
Не, так нельзя. Owner должен совпадать у провайдера и у CDS. А в моём случае они могут быть разные...
Ладно, буду каждый раз провайдер задавать.
← →
Johnmen © (2005-10-31 17:13) [7]>Не, так нельзя. Owner должен совпадать у провайдера и у CDS. А в моём
>случае они могут быть разные...
Хм... Ну и что?
Пропиши с учётом разных овнеров.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c