FireBird - Oto Numara

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
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

FireBird - Oto Numara

Mesaj gönderen mikser »

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.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: FireBird - Oto Numara

Mesaj gönderen mussimsek »

mikser yazdı:forumdaki arkadaslarin ısrarları uzerine firebird e basladım. insallah pisman olmam.
hocam burda yanlış olmasın sakın. Biz sadece faydalı yönlerini anlatıp, kullanırsanız iyi olur diyoruz. Neticede karar sizin :)

Kolay gelsin.
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

üstad kötü bi amaçla söylemedim. her hangi bir zorlama olduğunu filan kasdetmedim. Silah zoruyla felan da kimseye firebird/interbase kullanın gibi bir durumda yok zaten. :))

tavsiyenize uydum. iyi de oldu sanırım. bana göre üstad lafi dinlemek de her zaman fayda vardır.
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Bunun bir yolu yok sanırım

Mesaj gönderen Salih »

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ı.
Sevgi, Saygı.....
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

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.
Salih
Üye
Mesajlar: 250
Kayıt: 11 Mar 2004 05:36

Ben de Stored procedure ile yaptım

Mesaj gönderen Salih »

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;
Sevgi, Saygı.....
Cevapla