Firebird ile sipariş numarası oluşturma

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
AhmetNuri
Üye
Mesajlar: 262
Kayıt: 02 Tem 2007 07:55
Konum: ist
İletişim:

Firebird ile sipariş numarası oluşturma

Mesaj gönderen AhmetNuri »

Merhaba Delph 7 ve Firebird 1.5 ile hazırladığım proje için yıll+ay+xxxx şeklinde otomatik değişen bir sipariş numarası ürettirmem lazım. Otomatik sayı üretebiliyorum ancak bunu yapamadım. Firebird den buu yapmanın bir yolu var mı? Yardımcı olan arkadaşlara teşekkürler.
Örenek sipariş no
2007010001 ilk sipariş
2007010002 sonraki .....
Ahmet DENİZ
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

s.a.
Deneme şansım olmadı ama şu koda bir gözatın isterseniz

function Sayi_Uret:String;
var
Sayi,
Maxsip:String;
Begin
Sayi:=FormatDateTime('yyyymm',Date)+'0001'; //2007010001
Sorgu.sql.clear;
Sorgu.sql.text:='Select Max(Alan) as SipNo from Table';
Sorgu.sql.open;
Maxsip:=Sorgu.FieldByName('SipNo').Asstring;
If (Maxsip='') or (Sorgu.Recordcount=0) Then Maxsip:=Sayi;
Result:=Maxsip;
end;
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Firebird ile sipariş numarası oluşturma

Mesaj gönderen akdatilla »

AhmetNuri yazdı:Merhaba Delph 7 ve Firebird 1.5 ile hazırladığım proje için yıll+ay+xxxx şeklinde otomatik değişen bir sipariş numarası ürettirmem lazım. Otomatik sayı üretebiliyorum ancak bunu yapamadım. Firebird den buu yapmanın bir yolu var mı? Yardımcı olan arkadaşlara teşekkürler.
Örenek sipariş no
2007010001 ilk sipariş
2007010002 sonraki .....
S.A.
böyle bir işlemi yapmak için bir sayac tablosu ve bir sp hazırladım. Bir deneyin isterseniz.

Kod: Tümünü seç

CREATE TABLE TMPSAYAC
(
    SAYI INT NOT NULL,
    PRIMARY KEY (SAYI)
)

Kod: Tümünü seç

CREATE PROCEDURE SAYACVER (YIL VARCHAR(4),AY VARCHAR(2)) RETURNS (VSAYI INT)
AS
  declare variable V1 VARCHAR(10);
  declare variable V2 VARCHAR(10);
  declare variable A INT;
  declare variable B INT;
BEGIN
 V1=YIL || AY || '0000';
 V2=YIL || AY || '9999';
 A=CAST (V1 AS INT);
 B=CAST (V2 AS INT);
 if (EXISTS(SELECT * FROM TMPSAYAC WHERE SAYI between :A AND :B)) then
 BEGIN
    SELECT MAX(SAYI) FROM TMPSAYAC WHERE SAYI between :A AND :B INTO :VSAYI;
    VSAYI=:VSAYI+1;
    if (:VSAYI>:B) then
    BEGIN
        VSAYI=NULL;
        SUSPEND;
        EXIT;
    END
    UPDATE TMPSAYAC SET SAYI=:VSAYI WHERE SAYI between :A AND :B;
 END ELSE
 BEGIN
    VSAYI=:A+1;
    INSERT INTO TMPSAYAC (SAYI) VALUES (:VSAYI);
 END
 SUSPEND;
END
örnek kullanım:

Kod: Tümünü seç

SELECT * FROM SAYACVER('2007','01')
SELECT * FROM SAYACVER('2007','09')
Not: Kodlarımızı code tagı içerisini alırsak daha okunaklı olur. (@aslangeri)
Cevapla