IBDataset ile Master Detail ilişkisi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
myonur
Üye
Mesajlar: 22
Kayıt: 12 Haz 2003 11:16

IBDataset ile Master Detail ilişkisi

Mesaj gönderen myonur »

Tekrar Merhaba
Acilen Bir sorunu çözmem gerekiyor.

1- SicilBilgileri tablosu nu içeren IBDataset Ana Form üzerinde bulunuyor
2- Bu sicilBilgilerine ait nufus bilgilerini ise başka bir formdan getiriyorum

bu durumda iki IBdataset arasındaki ilişkiyi personelid alanı ile kurduğumda
Nufus bilgisini içeren IBDataseti nasıl yazmalıyım

arkadaşlar bugün sizi meşgul ettim ama bu sorunuma yardımcı olursanız çok sevinirim
şimdiden çok teşekkür ederim
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Öncelikle database ile ilgili componentlerini (IBdatabase, IbDataset vs) koymak için datamodule kullanmanız işleri kolaylaştırır.
Eğer interbase/firebird kullanıyorsanız. Aşagıda yazdıklarım işinize yarar.
masterTable
MasterIdAlan-->integer, Pk (primary) not null
DigerAlanlar
DetailTable
DetailId-->ınteger, Pk not Null (bu alan şart değil)
MasrerIdAlan-->integer Fk (foreign Key) not Null (bu alanla Detail table master table a bağlanacak)
Detail Table a aşağıdaki kodu ekle.

Kod: Tümünü seç

ALTER TABLE detailTable ADD CONSTRAINT FK_DetailTable FOREIGN KEY (MasterIdAlan) REFERENCES MasterTable (MasterIdAlan);
Buna benzer iki table oluştur ve diğer alanları ekle.
IbDetail dataset in select ine

Kod: Tümünü seç

select * from DetailTable where masterIdAlan=:MasterIdAlan
yazın.
IbDetail dataset in after insert ine

Kod: Tümünü seç

IBDetailMasterIdAlan.AsInteger:=IBMasterTableMasterIdAlan.AsInteger;
yazın.
Son olarak
IbDetailTable---->DataSource:=MasterTableDataSource
özelliğini ayarlayın.
Master Detail ilişkiniz hazır durumdadır.
Kolay gelsin
saygılar
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

IB detail' in dataset after post olayına aşağıdaki atamayı yaptım ama;
söylenen kod:
IBDetailMasterIdAlan.AsInteger:=IBMasterTableMasterIdAlan.AsInteger;

bendeki kod: COCUK.CAUTOINC.AsInteger:=PERSONEL.AUTOINC.AsInteger;

hata:
undeclared ıdendifier COCUK
missing operator semicolon...........

diyor....
Delphi konusunda daha çok database ile ilgileniyorum...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
Detail tablonun adının cocuk olduğuna eminmisin.
çünkü cocuk diye bişey tanımıyorum demiş.
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

Evet table isimleri doğru ( PERSONEL ve COCUK)......Tekrar baktım şimdi....
Delphi konusunda daha çok database ile ilgileniyorum...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

ergunalp yazdı:bendeki kod: COCUK.CAUTOINC.AsInteger:=PERSONEL.AUTOINC.AsInteger;

hata:
undeclared ıdendifier COCUK
missing operator semicolon...........

diyor....
Buradaki

Kod: Tümünü seç

CocukCAUTOINC.AsInteger:=PersonelAUTOINC.AsInteger;
şeklinde olabilir. CAUTOINC field i, tablonun fieldproperties ine ekliyese bu şekilde, eklenmemiş ise;

Kod: Tümünü seç

Cocuk.FieldByName('CAUTOINC').AsInteger:=Personel.FieldByName('AUTOINC').AsInteger;
Şeklinde yazman gerekir.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

yine hata veriyor... "undeclared idendifier cocuk"
IBDataset datamodule içinde ve select ile tablodan bilgiler alınıyor(standart yapı)...
Ama hata vermesi tuhaf.....
Delphi konusunda daha çok database ile ilgileniyorum...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Cocuk dediğin bir form mudur yoksa tablo bileşeninin adı mıdır?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

table' ın kendisi
PERSONEL ve COCUK 2 adet table ve relation var arasında(IBDataset ile)
Delphi konusunda daha çok database ile ilgileniyorum...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

ergunalp yazdı:yine hata veriyor... "undeclared idendifier cocuk"
IBDataset datamodule içinde ve select ile tablodan bilgiler alınıyor(standart yapı)...
Ama hata vermesi tuhaf.....
Bu hata mesajı COCUK diye bir tanımlama / tablo vs. aynı form üzerinde olmadığını söyluyor.

çözümsüzlüğe kilitlenip kalmışsan klasik yöntemi dene, arabadan in ve tekrar bin :) pardon bileşenleri sil ve yeniden ekleyip düzenle :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

Bir kez arabadan inip tekrar binmiştim ama yine öyle yapayım bakalım ne olacak... İşte bu nedenlerle çok fazla in bin yapmamak için foruma bir öneri sumuştum(ideal olması gereken basit örnek bir proje, hatta seminervari veya makale gibi...Sizde bir o önerimi okursanız memnun olurum aslında, çünkü üyeler için oldukça faydalı olabilir....
Delphi konusunda daha çok database ile ilgileniyorum...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

ergunalp yazdı:İşte bu nedenlerle çok fazla in bin yapmamak için foruma bir öneri sumuştum(ideal olması gereken basit örnek bir proje, hatta seminervari veya makale gibi...
Ergün bey haklısınız, belki yapılacak çok şey var ancak şunu da göz önünde bulundurmak lazım. Seminerler şu an tüm vaktimizi alıyor. Sadece pazar günü 3 saat sizi meşgul etmiyor. Hazırlıklar, düzenlemeler, dosyaların hazırlanması, upload edilmesi vs. vs.

Biz de bir işte çalışıyoruz. Foruma fazla girmemiz üyeleri yanıltmasın! Ben kendi adıma en az bir 6 ay seminer olayına sıcak bakmıyorum. Genel kanı da öyle.

Bence mevcut seminerlerden ve forumdan işinizi halletmelisiniz.

Kolay gelsin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
Bir ihtimal daha kodları kullandığın procedure in yapısında olabilir.
Yani procedure

Kod: Tümünü seç

Procedure islmeyap();
begin
end;
//yoksa
Procedure Datamodule1.islemyap();
begin
end;
//gibimi

eğer ilki gibiyse islemyapdan önce formun (yada datamodule ün) adını yazmayı dene. tabi yukardada tanımlaman gerekecek.
yada

Kod: Tümünü seç

CocukCAUTOINC.AsInteger:=PersonelAUTOINC.AsInteger
ifadesini

Kod: Tümünü seç

datamodule1.CocukCAUTOINC.AsInteger:=PersonelAUTOINC.AsInteger
gibisinen bir değiştirip bir dene
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ergunalp
Üye
Mesajlar: 28
Kayıt: 31 May 2004 01:52
Konum: Adana

Mesaj gönderen ergunalp »

Tüm arkadaşlara teşekkür....
Aslangeri' nin önerisi ile kafamı tam sarmasada halledebildim(bende bir eksikilik var gibi)...
Peki bu şekilde olması normalmi???

Olması gereken kod(ama hata veren):
Cocuk.FieldByName('CAUTOINC').AsInteger:=Personel.FieldByName('AUTOINC').AsInteger;

yukarıdaki şekilde neden table'ı tanımadı(tüm örneklerdede yukardaki şekil kullanılmış ama)???

Çalışan Kod (ama kafamı sarmayan):
dm1.IBDataSet2.FieldByName('CKODU').asstring:=dm1.IBDataSet1.FieldByName('KODU').asstring;
Delphi konusunda daha çok database ile ilgileniyorum...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Neyin nerde olduğuna karar vermelisin, yada nerdeki hangi nesneyi kullanacağına... Yoksa şöyle yaptım düzeldi demek işi çözmez. Olaya hakim olmak açısından neyi nasıl yaptığının bilincinde olmalısın.. :wink:

Kolay gelsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla