Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

Почему при обновлении 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
4-1129202576
Spellcaster
2005-10-13 15:22
2005.12.18
Собственный хинт в трее


14-1132627955
Рсдрп
2005-11-22 05:52
2005.12.18
Как проще откомпилировать программу на Си++?


6-1124823636
Korvet
2005-08-23 23:00
2005.12.18
Подключение к сети


2-1133539320
Максим
2005-12-02 19:02
2005.12.18
Дали 3 упражнения связанные со строкой Edit


14-1132823910
ОноТебеНадо
2005-11-24 12:18
2005.12.18
Покупка программы