Dinamik Yüklenen Paketler Hk.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Dinamik Yüklenen Paketler Hk.
Arkadaşlar öncelikle ne yapmak istediğimle ilgili bilgi verip bu konuda bilgilerinize ihtiyacım var .Forum da ve nette aradım bir kaç örnek buldum birkaç kitapda inceledim ama bir türlü çözüm bulamadım.
Yapmak istediğim şey
Firebird IBX bileşenlerini kullanarak bir stok programı yazdım. Bu program
bir ana menüden diğer formlara ulaşarak çalışacak. Formları paketlerin içine koyup dinamik olarak yüklemek istiyorum. Araştırmalarımda DLL lerin sorun yaratabileceği bunun yerine BPL kullanmanın daha avantjlı olduğu bilgisini edindim. Normalde bu işlemi arabirim kullanarak yada paketteki formları register ederek yapabiliyorum. Çözemediğim kısım Anafrm bulunan yada Datamodulde bulunan IBdatabase ile pakette bulunan IBDataseti birbirine bağlayamıyorum her paketin içine datamodulü bağlayıp derlemek çok mantıklı gelmiyor.Birden fazla IBdatabase kullanmakta mantıklı gelmiyor.
Yardımlarınız için şimdiden teşekkür ederim
Yapmak istediğim şey
Firebird IBX bileşenlerini kullanarak bir stok programı yazdım. Bu program
bir ana menüden diğer formlara ulaşarak çalışacak. Formları paketlerin içine koyup dinamik olarak yüklemek istiyorum. Araştırmalarımda DLL lerin sorun yaratabileceği bunun yerine BPL kullanmanın daha avantjlı olduğu bilgisini edindim. Normalde bu işlemi arabirim kullanarak yada paketteki formları register ederek yapabiliyorum. Çözemediğim kısım Anafrm bulunan yada Datamodulde bulunan IBdatabase ile pakette bulunan IBDataseti birbirine bağlayamıyorum her paketin içine datamodulü bağlayıp derlemek çok mantıklı gelmiyor.Birden fazla IBdatabase kullanmakta mantıklı gelmiyor.
Yardımlarınız için şimdiden teşekkür ederim
Ben BPL kullanımında bağlantıyı yapmak için.
Aşağıdaki kodu kullanmıştım
Burada sorgu : IBTable veya IBQuery ;
IBDB : TIBDatabase;
IBTR : TIBTransaction;
yerine deyimini de kullanabilirsin.
DataFieldleri (ya da bindingsource) bağlamak için ise aşağıdakiörnek kodu kullandım
Aşağıdaki kodu kullanmıştım
Kod: Tümünü seç
sorgu.Database:=TIBDatabase(application.MainForm.FindComponent('IBDB'));
sorgu.Transaction:=TIBTransaction(application.MainForm.FindComponent('IBTR'));
IBDB : TIBDatabase;
IBTR : TIBTransaction;
Kod: Tümünü seç
application.mainform
Kod: Tümünü seç
application.findcomponet('FormAdi')
DataFieldleri (ya da bindingsource) bağlamak için ise aşağıdakiörnek kodu kullandım
Kod: Tümünü seç
DSTKod.DataField :='STKOD'; //30
DSTAD.DataField :='STAD'; //120
DSATISF1.DataField :='SATISF1'; // Double
DAlisF1.DataField :='ALISF';
DDovizTipi.DataField :='DOVIZTIPI'; // 10
DBirim1.DataField :='BIRIM1'; //30
DBirim2.DataField :='BIRIM2'; // 30
DBIRIM3.DataField :='BIRIM3'; //30
DLBIRIM1.DataField :='BIRIM1'; //30
DLBIRIM2.DataField :='BIRIM2'; //30
DBIRIM12.DataField :='BIRIM12'; //30
DBIRIM23.DataField :='BIRIM23'; //30
DUreticiKodu.DataField:='URETICIKODU';//60
DTipi.DataField :='TIPI'; // 20
DNetAg.DataField :='NETAG';
DBrutAg.DataField :='BRUTAG';
DAcilisTar.DataField :='ACilisTar';
DVadeGunu.DataField :='VADEGUNU';
DiskontoA.DataField :='ISKONTOA';
DiskontoS.DataField :='ISKONTOS';
DDSatisf1.DataField :='DSATISF1';
DDAlisF1.DataField :='DALISF';
DKDVA.DataField :='KDVA';
DKDVS.DataField :='KDVS';
Lost Soul yazdı:Ben BPL kullanımında bağlantıyı yapmak için.
Aşağıdaki kodu kullanmıştım
Burada sorgu : IBTable veya IBQuery ;Kod: Tümünü seç
sorgu.Database:=TIBDatabase(application.MainForm.FindComponent('IBDB')); sorgu.Transaction:=TIBTransaction(application.MainForm.FindComponent('IBTR'));
IBDB : TIBDatabase;
IBTR : TIBTransaction;
yerineKod: Tümünü seç
application.mainform
deyimini de kullanabilirsin.Kod: Tümünü seç
application.findcomponet('FormAdi')
DataFieldleri (ya da bindingsource) bağlamak için ise aşağıdakiörnek kodu kullandım
Kod: Tümünü seç
DSTKod.DataField :='STKOD'; //30 DSTAD.DataField :='STAD'; //120 DSATISF1.DataField :='SATISF1'; // Double DAlisF1.DataField :='ALISF'; DDovizTipi.DataField :='DOVIZTIPI'; // 10 DBirim1.DataField :='BIRIM1'; //30 DBirim2.DataField :='BIRIM2'; // 30 DBIRIM3.DataField :='BIRIM3'; //30 DLBIRIM1.DataField :='BIRIM1'; //30 DLBIRIM2.DataField :='BIRIM2'; //30 DBIRIM12.DataField :='BIRIM12'; //30 DBIRIM23.DataField :='BIRIM23'; //30 DUreticiKodu.DataField:='URETICIKODU';//60 DTipi.DataField :='TIPI'; // 20 DNetAg.DataField :='NETAG'; DBrutAg.DataField :='BRUTAG'; DAcilisTar.DataField :='ACilisTar'; DVadeGunu.DataField :='VADEGUNU'; DiskontoA.DataField :='ISKONTOA'; DiskontoS.DataField :='ISKONTOS'; DDSatisf1.DataField :='DSATISF1'; DDAlisF1.DataField :='DALISF'; DKDVA.DataField :='KDVA'; DKDVS.DataField :='KDVS';
findcomponet dışında bir yöntem yokmu?
FindComponenet zaten olayı tek satırda çözüyor.
Eğer niyetin designtime da veritabanına erişip gerekli bağlantıları yapmak ise bildiğim kadarıyla bu mümkün değil.
Ayrıca find componentin olduğu fonksiyonu direkt kullanmak yerine şöyle bir procedure oluşturabilirsin.
ayrıca
yerine nesnelere designtime da fieldler ile aynı ismi verirsin.
ve bağlanma esnasında.
diyerek tüm Modüllerinde kullanabilirsin.
Başka da aklıma gelmiyor. Daha kısa yöntemi var mı bilmiyorum.
İyi çalışmalar.
Eğer niyetin designtime da veritabanına erişip gerekli bağlantıları yapmak ise bildiğim kadarıyla bu mümkün değil.
Ayrıca find componentin olduğu fonksiyonu direkt kullanmak yerine şöyle bir procedure oluşturabilirsin.
Kod: Tümünü seç
Procedure TBenimBPL.TabloAc(TabloAdi : String);
begin
if tablo.active then tablo.Close;
tablo.Database:=TIBDatabase(application.MainForm.FindComponent('IBDB'));
sorgu.Transaction:=TIBTransaction(application.MainForm.FindComponent('IBTR'));
tablo.TableName:=TabloAdi;
tablo.Open;
Kod: Tümünü seç
DSTKod.DataField :='STKOD'; //30
DSTAD.DataField :='STAD'; //120
DSATISF1.DataField :='SATISF1'; // Double
DAlisF1.DataField :='ALISF';
DDovizTipi.DataField :='DOVIZTIPI'; // 10
DBirim1.DataField :='BIRIM1'; //30
DBirim2.DataField :='BIRIM2'; // 30
DBIRIM3.DataField :='BIRIM3'; //30
DLBIRIM1.DataField :='BIRIM1'; //30
DLBIRIM2.DataField :='BIRIM2'; //30
DBIRIM12.DataField :='BIRIM12'; //30
DBIRIM23.DataField :='BIRIM23'; //30
DUreticiKodu.DataField:='URETICIKODU';//60
DTipi.DataField :='TIPI'; // 20
DNetAg.DataField :='NETAG';
DBrutAg.DataField :='BRUTAG';
DAcilisTar.DataField :='ACilisTar';
DVadeGunu.DataField :='VADEGUNU';
DiskontoA.DataField :='ISKONTOA';
DiskontoS.DataField :='ISKONTOS';
DDSatisf1.DataField :='DSATISF1';
DDAlisF1.DataField :='DALISF';
DKDVA.DataField :='KDVA';
DKDVS.DataField :='KDVS';
TABLO.First;
end;
ve bağlanma esnasında.
Kod: Tümünü seç
For i := Tablo.FieldCount-1 do
TDBEdit(BenimBPL.findcomponent(Tablo.fields[i].fieldname)).DataField:=Tablo.Fields[i].FieldName;
Başka da aklıma gelmiyor. Daha kısa yöntemi var mı bilmiyorum.
İyi çalışmalar.
TeşekkürlerLost Soul yazdı:FindComponenet zaten olayı tek satırda çözüyor.
Eğer niyetin designtime da veritabanına erişip gerekli bağlantıları yapmak ise bildiğim kadarıyla bu mümkün değil.
Ayrıca find componentin olduğu fonksiyonu direkt kullanmak yerine şöyle bir procedure oluşturabilirsin.
ayrıcaKod: Tümünü seç
Procedure TBenimBPL.TabloAc(TabloAdi : String); begin if tablo.active then tablo.Close; tablo.Database:=TIBDatabase(application.MainForm.FindComponent('IBDB')); sorgu.Transaction:=TIBTransaction(application.MainForm.FindComponent('IBTR')); tablo.TableName:=TabloAdi; tablo.Open;
yerine nesnelere designtime da fieldler ile aynı ismi verirsin.Kod: Tümünü seç
DSTKod.DataField :='STKOD'; //30 DSTAD.DataField :='STAD'; //120 DSATISF1.DataField :='SATISF1'; // Double DAlisF1.DataField :='ALISF'; DDovizTipi.DataField :='DOVIZTIPI'; // 10 DBirim1.DataField :='BIRIM1'; //30 DBirim2.DataField :='BIRIM2'; // 30 DBIRIM3.DataField :='BIRIM3'; //30 DLBIRIM1.DataField :='BIRIM1'; //30 DLBIRIM2.DataField :='BIRIM2'; //30 DBIRIM12.DataField :='BIRIM12'; //30 DBIRIM23.DataField :='BIRIM23'; //30 DUreticiKodu.DataField:='URETICIKODU';//60 DTipi.DataField :='TIPI'; // 20 DNetAg.DataField :='NETAG'; DBrutAg.DataField :='BRUTAG'; DAcilisTar.DataField :='ACilisTar'; DVadeGunu.DataField :='VADEGUNU'; DiskontoA.DataField :='ISKONTOA'; DiskontoS.DataField :='ISKONTOS'; DDSatisf1.DataField :='DSATISF1'; DDAlisF1.DataField :='DALISF'; DKDVA.DataField :='KDVA'; DKDVS.DataField :='KDVS'; TABLO.First; end;
ve bağlanma esnasında.
diyerek tüm Modüllerinde kullanabilirsin.Kod: Tümünü seç
For i := Tablo.FieldCount-1 do TDBEdit(BenimBPL.findcomponent(Tablo.fields[i].fieldname)).DataField:=Tablo.Fields[i].FieldName;
Başka da aklıma gelmiyor. Daha kısa yöntemi var mı bilmiyorum.
İyi çalışmalar.