Firebird de hangi alan türü ile bire çok ilişki sağlanmalı?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Firebird de hangi alan türü ile bire çok ilişki sağlanmalı?

Mesaj gönderen boncapelo »

Slm hocalarım.kütüphane programı için master-detail yapmaya çaşıyorum yani listeden seçilen bi öğrencinin üzerine kitap eklenecek eklenecek.isim ve soyadi alanlarım farklı iki alan.elimdeki kitapda iki tabloyada adısoyadı alanı açmış ve bunları ilişkilendirmiş ama bana bu uymuyor yani adı alanı ile ilişki kurarsam 3 tane ahmet adında öğrenci varsa üçünede atıyor kitabı.daha önce paradox kullanıyordum sanırım onda L(Logical) bi alan oluşturup bunları ilişkilendiriyordun acaba firebird de hangi alan türü kullanılıyor yada nasıl bişey önerirsiniz.Yardımlarınızı bekliyorum...
Saygılar...
Allah yardımcınız olsun...
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Master / Detail ilişkilendirmede unique (tekil) ifadeler kullanılır. En basit örnek otomatik artan sıranoları kullanılır.

- Master Tablon kitaplar olsun. Detay tablo ise Müşteriler.

KitapTABLOSU
KitapID,
KitapAdi,
KitapKatalogYeri vs.vs.vs. diğer bilgileri....

MusteriTABLOSU
MusteriID,
MusteriAdi,
MusteriSoyadi,
MusteriAdresi vs.vs.vs diğer bilgileri...

KitapHareketTABLOSU
HareketID,
KitapID,
MusteriID,
TarihSaat,
TeslimEdildi Boolean,
IadeAlindi Boolean,
TeslimEden vs.vs.vs.

- Bu üç tablo senin temel tabloların olacaktır.

- Birisi kitap alacaksa ve henüz hiç kaydı yoksa ilk önce MusteriTablosuna ilk kaydı yapılır. Bir dahaki sefere kayıtlardaki sabit olarak MusteriID nosu kullanılır. Yani üç tane Ahmet varsa da her birinin ID'si farklı olacağından karışıklık olmaz :wink:

- Artık her zaman KitapHareketTablosu'na kaydedilecek. Sadece ID'ler kaydedilecek. Eğer içerik lazım olursa bu ID'lerden geri dönük sorgu yapmak imkanı her zaman mümkün.

- Yapacağın sorgularda bir müşterinin ne zaman kitap aldığı ne zaman iade ettiği veya etmediği üzerine kayıtlar hareket kaydıdır.

- Başarılar...
Resim
Resim ....Resim
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

mrmarman hocam öncelikle teşekkürler cevabınız için fakat ilk defa firebird ile proje hazırlıyorum ve delphide de çok yeniyim o yüzden biraz daha açık anlatabilirmisiniz...dediğiniz gibi ilk tabloya pk alan olan masterid ikinci tabloya da did adında uniq bi alan tanımladım sonra masterid ile did i birbirine bağladım ilk kayıdı yaptığımda sorun olmuyor.fakat aynı kişiye bir kitap daha eklerken hata veriyor.çok acemiyim lütfen af buyurun...verdiği hata:
vialation of primary or unique key constraint "unq1_hadi" on table "hadi"
Saygılar...
Allah Yardımcınız Olsun...
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

verdiği hata:
vialation of primary or unique key constraint "unq1_hadi" on table "hadi"
hata yı türkçeye çevirirseniz..

hadi tablosunda gerekli olan birincil anahtar fieldi unq1_hadi değeri yok...

öncelikle Tablo oluştururken PK kullandığınız alanları autoinc tanımlayın. daha sonra Delphi tarafında GeneratorField özelliğini doldurup, artış değerini belirleyin. yok ben bu alanı autoinc yapmayacam diyorsan, PK yani birincil ve girilmesi zorunlu alana daha önce verilmemiş bir değer vermekle sorumlusundur..

Örnek Tablo Yapısı

MASTER

MASTERID INTEGER PK AUTOINC
DİĞER ALANLAR

DETAİL

DETAILID INTEGER PK AUTOINC
MASTERID INTEGER (INDEX VEYA FOREIGN KEY)

şimdi Master tablonun Masterid alanı otomatik arttı ve sonuç 1 diyelim...
detail tablonunda PK alanı oto arttı... en son aşamda ise detail tablonun OnBeforePost (Detail Tablodaki kayıt gerçekleşmeden hemen önce) yordamına

Kod: Tümünü seç

DetailTabloMASTERID.AsInteger := MasterTabloMASTERID.AsInteger;
kodunu eklemelisin ki. Detail tablo daki kayıt Master Tablodaki kayıtla eşleşsin... ilişki sağlansın...

mantık bu... gerisi size kalmış...

Kolay Gelsin...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
boncapelo
Üye
Mesajlar: 49
Kayıt: 01 Tem 2005 02:28
Konum: Bursa
İletişim:

Mesaj gönderen boncapelo »

Selamunaleyküm...
Hepinizden allah razı olsun hocalarım...sorunu düzelttik.cevaplar için tekrar saolun teşekkür ederim...
Allah Yardımcınız Olsun...
Saygılar...
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
Cevapla