forumdaki arkadaslarin ısrarları uzerine firebird e basladım. insallah pisman olmam.
gelelim soruya;
otomatik numara verme işinde, master/detail olan iki tabloda detailde otomatik sıranın şu sekilde olması mümkün mü?
master
sıra adı soyad
1 a b
2 c d
detail
sıra dsıra tarih
1 1 1
1 2 1
2 1 1
2 2 1
2 3 1
3 1 1
oto numara oluşturan bi generatorle bu işi yaptim fakat detail de kayıtlar
1 1
1 2
2 3
2 4
2 5
3 6
şeklinde oluşuyor. temel de sorun yok (index açısından - zaten amaç da bu-) fakat illa bu sekilde mi olmak zorunda? Generator işinde iki alanı birden kontrol etmek mümkün mü?
kolay gelsin.
FireBird - Oto Numara
Re: FireBird - Oto Numara
hocam burda yanlış olmasın sakın. Biz sadece faydalı yönlerini anlatıp, kullanırsanız iyi olur diyoruz. Neticede karar sizinmikser yazdı:forumdaki arkadaslarin ısrarları uzerine firebird e basladım. insallah pisman olmam.

Kolay gelsin.
Bunun bir yolu yok sanırım
Evet bu benim kafamda da olan bir soru.
Master siparis tablom var ve siparis noları otomatik alıyor.
Detail ise Siparis_satirlari tablosu, burada da Siparis_no Foreign Key olarak gelecek. Artı sipariş satır numarası olacak, ama satır numarası her sipariş için 1 den başlamalı tabii ki.
Ben otomatik artırmaktan vazgeçip elle yazıyorum satırnoları.
Master siparis tablom var ve siparis noları otomatik alıyor.
Detail ise Siparis_satirlari tablosu, burada da Siparis_no Foreign Key olarak gelecek. Artı sipariş satır numarası olacak, ama satır numarası her sipariş için 1 den başlamalı tabii ki.
Ben otomatik artırmaktan vazgeçip elle yazıyorum satırnoları.
Sevgi, Saygı.....
salih bey,
ben sorunu şu sekilde cözdüm.
SET SQL DIALECT 3;
SET NAMES WIN1254;
SET TERM ^ ;
CREATE TRIGGER HBSIRA FOR HIZBORC
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if(new.sira is null ) then
begin
select max(SIRA) + 1 from HIZBORC where SICIL = new.sicil
into new.SIRA;
if(new.SIRA is null) then
begin
new.SIRA = 1;
end
end
end
^
SET TERM ; ^
HIZBORC DOSYASI ŞU SEKİLDE
SICIL SIRA TARIH..... V.S.
1 1 1
1 2 1
2 1 2
2 2 2
bu trigger masterdaki her kayıt icin detaildeki kayıtlara devam eden numara veriyor. fakat uygulama tarafında bunu görmek icin dosyayi acip kapatmak gerekiyor.
ben sorunu şu sekilde cözdüm.
SET SQL DIALECT 3;
SET NAMES WIN1254;
SET TERM ^ ;
CREATE TRIGGER HBSIRA FOR HIZBORC
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if(new.sira is null ) then
begin
select max(SIRA) + 1 from HIZBORC where SICIL = new.sicil
into new.SIRA;
if(new.SIRA is null) then
begin
new.SIRA = 1;
end
end
end
^
SET TERM ; ^
HIZBORC DOSYASI ŞU SEKİLDE
SICIL SIRA TARIH..... V.S.
1 1 1
1 2 1
2 1 2
2 2 2
bu trigger masterdaki her kayıt icin detaildeki kayıtlara devam eden numara veriyor. fakat uygulama tarafında bunu görmek icin dosyayi acip kapatmak gerekiyor.
Ben de Stored procedure ile yaptım
Hocam stored procedure ile yapmak daha uygun göründü bana, öyle yaptım.
CREATE PROCEDURE SP_YENISIPSATIR (SIPNO INTEGER)
RETURNS (SATIRNO SMALLINT)
AS
begin
Select max (SIPSATIR) from SIPDETAY where SIPARISNO = :SIPNO
into :SATIRNO;
if (SATIRNO is null) then SATIRNO = 1;
else SATIRNO = SATIRNO + 1;
suspend;
end
Çağırırken de
SPYenisipsatir.ParamByName ('SIPNO').AsInteger := StrToInt(DEsipno.text);
SPYenisipsatir.ExecProc;
DESira.Text := SPYenisipsatir.ParamByname('SATIRNO').AsString;
CREATE PROCEDURE SP_YENISIPSATIR (SIPNO INTEGER)
RETURNS (SATIRNO SMALLINT)
AS
begin
Select max (SIPSATIR) from SIPDETAY where SIPARISNO = :SIPNO
into :SATIRNO;
if (SATIRNO is null) then SATIRNO = 1;
else SATIRNO = SATIRNO + 1;
suspend;
end
Çağırırken de
SPYenisipsatir.ParamByName ('SIPNO').AsInteger := StrToInt(DEsipno.text);
SPYenisipsatir.ExecProc;
DESira.Text := SPYenisipsatir.ParamByname('SATIRNO').AsString;
Sevgi, Saygı.....