ilişkili tablolarla ilgili
-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
ilişkili tablolarla ilgili
Hayırlı günler,
ibExpert ile ilgili bir sorum olacaktı.
Şimdi iki tablom var.Bunları birbirleriyle ilişkilendireceğim.
mesela
a tablomda 1 kayıt var
b tablomda da 1.kayıtın 6 tane alt kayıtı var.Mesela a tablosundaki bir yolcunun yaptığı 6 farklı sefer b tablosunda tutuluyor.
Bunu yapamıyorum.
a tablosundaki yolcu_no ile b tablosundaki yolcu_no ilişkili ve :
b tablosuna yolcu_no kısmına 1 yazıyorum detayları yanındaki alanlara v.s. ama yolcu_no 1 diyip tekrar bir kayıt ekleyemiyorum hata veriyor.yolcu_no kısmına 2 girersem oluyor ki istediğim bu değil...
umarım anlatabilmişimdir.
yardımcı olursanız çok mutlu olacağım
ibExpert ile ilgili bir sorum olacaktı.
Şimdi iki tablom var.Bunları birbirleriyle ilişkilendireceğim.
mesela
a tablomda 1 kayıt var
b tablomda da 1.kayıtın 6 tane alt kayıtı var.Mesela a tablosundaki bir yolcunun yaptığı 6 farklı sefer b tablosunda tutuluyor.
Bunu yapamıyorum.
a tablosundaki yolcu_no ile b tablosundaki yolcu_no ilişkili ve :
b tablosuna yolcu_no kısmına 1 yazıyorum detayları yanındaki alanlara v.s. ama yolcu_no 1 diyip tekrar bir kayıt ekleyemiyorum hata veriyor.yolcu_no kısmına 2 girersem oluyor ki istediğim bu değil...
umarım anlatabilmişimdir.
yardımcı olursanız çok mutlu olacağım
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Her tabloda eşitsizliği bozacak birincil anahtar alan (primary key) olarak kullanılacak bir ya da birden fazla alandan oluşan (sen yolcu_no demişsin, aynı numaralı iki yolcu olamayacak) tanımlanmalı. İkinci tabloda ise eşsizliği bozmak için yolcu_no yanına, tarih_zaman eklenmeli. Yani ikinci tabloda (detay tablosu) primary key iki alandan oluşmalı. Bu durumda da aynı gün iki kez yolculuk yapma şansı olmaz. Eğer tarihi saati-dakikasi ile yazarsan o zaman aynı anda farklı iki yerde olamayacağına göre eşsizlik (unique) sağlanmış olur. foreign key (bağımlı alan) tanımlarken de b tablosunun yolcu_no alanına girilecek değerin ana tablo a tablosundaki yolcu_no lardan biri olabileceği tanımını yapman gerekecek. Bundan sonraki kısmını da delphi tarafından halletmen gerekir. Onun için de master detail diye aratırsan yeterli bilgiye ulaşabilirsin 

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
" Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$PRIMARY46".
null segment of UNIQUE KEY. "
Mus_Adi primary key yapmak istiyorum bu hatayı veriyor iExpertte...
Problem nedir,niye birincil anahtar yapamıyorum?
constrained - no 2 table rows can have duplicate column values.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$PRIMARY46".
null segment of UNIQUE KEY. "
Mus_Adi primary key yapmak istiyorum bu hatayı veriyor iExpertte...
Problem nedir,niye birincil anahtar yapamıyorum?
Firebird Master / Detail ile ilgili belki incelemişsindir bilmiyorum ama yinede bu link e bir uğra derim
viewtopic.php?t=9830&highlight=master
viewtopic.php?t=9830&highlight=master
Mus_Adi alanının eşsiz olmasını istediğinden böyle bir şey düşünüyorsan bu doğru değil
Primary key yapamazsın anlamında değil ama bir detay tablosu ile ilişkilendirmen gerektiğinde uygun ve kullanışlı olmaz. Eşsiz/unique olması için (ki aynı isimde birden fazla kayıt olacağını da düşünmek lazım
) ikinci bir indeks tanımlayıp eşsiz/unique özellik verebilirsin
Yolcu_no diye ya da musteri_no, musteri_id, musteri_kodu diye verilebilecek alan birincil anahtar alan (primary key) alanı olmalı. Listeleme ve raporlama amaçlı kullanılacak diğer alanlara da ayrıca indeks tanımlamak yüzlerce binlerce kayıtlı tablolarda yüzde yüz perfomansa yansıyacaktır 




Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
şimdi ben isme göre veritabanında arama yapmak istiyorum da, sanırım primary key yapacağım alanın integer gibi sayısal bir tipe sahip olması gerekiyor? doğru mu?
bir arama formu olacak ve ben ismi girdiğimde veritabanından ilgili tablodaki musteri_adi kısmından adını bulup kayıtları gösterecek.
bunu nasıl halledebilirim ?
bir arama formu olacak ve ben ismi girdiğimde veritabanından ilgili tablodaki musteri_adi kısmından adını bulup kayıtları gösterecek.
bunu nasıl halledebilirim ?
Primary key olma zorunluluğu yok. Hatta herhangi bir indeks tanımlamak zorunda bile değilsin. Çünkü SELECT ile istediğin aramayı yapabilirsin. Veri tabanı motoru (burada firebird) çok sayıdaki kayıt içinden istenen kayıt/kayıtları getirmesi indeksli bir tablodan daha hızlı gelecektir. Ayrıca integer/sayısal değeri nereden çıkardınızintelcihat yazdı:şimdi ben isme göre veritabanında arama yapmak istiyorum da, sanırım primary key yapacağım alanın integer gibi sayısal bir tipe sahip olması gerekiyor? doğru mu?...

Bahsettiğin formda belli ki bir Edit alanı olacak, genel kalıpintelcihat yazdı:...
bir arama formu olacak ve ben ismi girdiğimde veritabanından ilgili tablodaki musteri_adi kısmından adını bulup kayıtları gösterecek.
bunu nasıl halledebilirim ?
Kod: Tümünü seç
SELECT MUST_ADI FROM TABLO_ADI
WHERE MUST_ADI CONTAINING Editteki_Alan

Kod: Tümünü seç
IBDataSet1.SelectSQL.Clear; // aynı zamanda IBDataSet i kapatır (close).
IBDataSet1.SelectSQL.Add('SELECT MUST_ADI FROM TABLO_ADI');
IBDataSet1.SelectSQL.Add('WHERE MUST_ADI CONTAINING ' + QuotedStr(Edit1.Text) );
IBDataSet1.Open;

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
Hocam yine bir problemim var.
Dediğiniz kodları uyguladım çalıştırdığımda şöyle bir hata veriyor anlayamadım :
bununla birlikte ben mus_no alanını sildim (dbgridten) ve yine çalıştırdım.çalıştı ama bu sefer kayıtları görüntülemiyor
bugün bitirmeliyim
Dediğiniz kodları uyguladım çalıştırdığımda şöyle bir hata veriyor anlayamadım :
tabii ben her ne kadar şu mus_no ile ilgisini anlamasamda,ne alakası var mus_no ile? Ben mus_adi kısmından aratacağım
project project2.exe raised exception class EIBClientError with message 'Size Mismatch - Field MUS_NO size is too small for data'.
Process stopped.Use Step or Run to continue

bununla birlikte ben mus_no alanını sildim (dbgridten) ve yine çalıştırdım.çalıştı ama bu sefer kayıtları görüntülemiyor
bugün bitirmeliyim

-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
hocam diğerini bir nevi hallettim ama 7-8 tane ayrı formum var ve dolayısıyla her birinde ibDatabase bileşenini kullandım.Bundan kaynaklanıyor olabilir mi?Bu hatayı nasıl çözebilirim?project project2.exe raised exception class EIBInterBaseError with message 'Maximum user count exceeded.Contact your database administrator'.Process stopped.Use Step or Run to continue
-
- Üye
- Mesajlar: 20
- Kayıt: 01 Kas 2006 12:32
Arkadaşlar cevap verebilecek olan yok mu ?intelcihat yazdı:hocam diğerini bir nevi hallettim ama 7-8 tane ayrı formum var ve dolayısıyla her birinde ibDatabase bileşenini kullandım.Bundan kaynaklanıyor olabilir mi?Bu hatayı nasıl çözebilirim?project project2.exe raised exception class EIBInterBaseError with message 'Maximum user count exceeded.Contact your database administrator'.Process stopped.Use Step or Run to continue
burada tıkandım kaldım