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...
Firebird de hangi alan türü ile bire çok ilişki sağlanmalı?
Firebird de hangi alan türü ile bire çok ilişki sağlanmalı?
..::ÖzSoft Computer Land & NetCity Internet Cafe::..
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
- 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...
- 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
- 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...
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...
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::..
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
hata yı türkçeye çevirirseniz..verdiği hata:
vialation of primary or unique key constraint "unq1_hadi" on table "hadi"
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;
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
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome