Yapmak istediğim şey 3 componenti birleştirip tek component yapmak.
Componentlerim : TClientDataSet, TDataSetProvider, TSQLQuery
şimdi bunları tek bir ClientDataSetX componentinde birleştirme aşamasında şöyle bir sorunla karşılaştım. ClientDataSetX in içine diğer ikisini property olarak koyuyorum ve constructor u şu şekilde override ediyorum.
FSQLQuery:=TSQLQuery.Create(aowner);
FSQLQuery.Name:=aOwner.Name+'_SQLQuery';
FDataSetProvider:=TDataSetProvider.Create(aowner);
FDataSetProvider.Name:=aOwner.Name+'_DataSetProvider';
bu şekilde isim veriyorum. Oluşturduğum ClientDataSetX componenti active ini true yaparak databaseden yolladığım sql query nin sonucunu DBGrid componentime getirebiliyor. Fakat bunu run ederek çalıştırdığımda ise, şu şu mesajla bir exception vermekte."A component named Form1_SQLQuery already exists", continue diyince aynısını dataSetProvider in ismi içinde vermekte.
Sorunu nasıl halledebilirim ?
Component Yaratmada component.Name sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Aslında bileşenlere isim vermek zorunda değilsin. İllaki isim vereceksen o zaman Create ederken .Create(aowner) yerine .Create(Self) şeklinde de tasarlayabilirsin. Ben yine de owner olarak aynı form vb. bileşeni tutacağanı düşünerek aşağıdaki yöntemi öneririm.
Bileşen oluşturma işleminden sonra isim verildiği için, bunu yapmak ancak isim verme işlemi sırasında yapmak mantıklı olacaktır. Kolay gelsin.
Bileşen oluşturma işleminden sonra isim verildiği için, bunu yapmak ancak isim verme işlemi sırasında yapmak mantıklı olacaktır.
Kod: Tümünü seç
type
TClientDataSetX=class(TClientDataSet)
.
.
procedure SetName(const NewName: TComponentName); override;
.
.
end;
.
.
.
procedure TClientDataSetX.SetName(const NewName:TComponentName);
begin
inherited SetName(NewName);
FSQLQuery.Name:=aOwner.Name+'_SQLQuery';
FDataSetProvider.Name:=aOwner.Name+'_DataSetProvider';
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .