Would you like to react to this message? Create an account in a few clicks or log in to continue.


Bismil Team Groub
 
AnasayfaAramaLatest imagesKayıt OlGiriş yap

 

 Makbuz-Fiş Seri ve Sıra numaraları hakkında bir yöntem

Aşağa gitmek 
YazarMesaj
dynamic
Co Admin
Co Admin
dynamic


Mesaj Sayısı : 220
Kayıt tarihi : 25/09/08
Yaş : 34

Makbuz-Fiş Seri ve Sıra numaraları hakkında bir yöntem Empty
MesajKonu: Makbuz-Fiş Seri ve Sıra numaraları hakkında bir yöntem   Makbuz-Fiş Seri ve Sıra numaraları hakkında bir yöntem Icon_minitimeSalı Ekim 21, 2008 5:57 am

Aşağıda Table ın DDL i var. Kullandığım kodları yapıştırıyorum, gereksiz alanları ayıkladım gözümden kaçan ufak yazım hataları olabilir


Kod:
DECLARE EXTERNAL FUNCTION LPAD CSTRING(255), INTEGER, CSTRING(1) RETURNS CSTRING(255) FREE_IT ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf'; CREATE TABLE MASTER_ ( MAK_SERI DM_STR2 /* DM_STR2 = VARCHAR(2) */, MAK_SIRA DM_BIGINT NOT NULL /* DM_BIGINT = BIGINT */, MAK_TRH DM_DATE NOT NULL /* DM_DATE = DATE */, MAK_NO COMPUTED BY (CAST( COALESCE(MAK_SERI, '') || '-' || LPAD(CAST(MAK_SIRA AS VARCHAR(15)) ,15,' ') AS VARCHAR(18))) );

MAK_NO yu oluştururken kullandığım LPAD standart UDF içinde mevcut. Yaptığı iş gönderilen stringin soluna belirtilen adete tamamlamak şartıyla belirtilen karakter ekler.
Computed alanı AS VARCHAR(18 ) ile sabitleme sebebim LPAD function ı 255 karakter return değeri olduğu için, "MASTER_" table ın select inde okadar uzun oluyor, buda gereksiz bir network trafinde yük oluşturur.bunu engellemek için benim en fazla olabilecek uzunluk 18 olduğu için 18 le sabitledim.

Aşağıdaki Procedure ilede en büyük kaydı bulup 1 arttırıp dışarı çıkartıyor. burda püf nokta şu delphi yada FB içinde kullanılırken Seri NO ='' yani null olması boşluk ile null farklı olarak algılanabilir(başıma gelmişti)Bende o yüzden boşluksa bu null dur diye kurguladım tüm db ve delphi tarafında.

Ayrıca, MAK_TYPE_ID ile aynı table da birden fazla farklı fiş tipi bilgisini saklıyorum, bana sum alırken kolaylık sağlıyor. Yani tahsilat ve tediye için aynı table ı kullanıyorum Alacak ve Borç field larını sum ile alabilmek gibi. Siz kendi yapınızda bunu kullanmaya bilirsiniz.


Kod:
CREATE OR ALTER PROCEDURE SP_LAST_MST_SIRA( MAK_TIPI__ INTEGER, SERI__ VARCHAR(2)) RETURNS ( RESULT INTEGER) AS BEGIN RESULT=-1; IF (SERI__ IS NULL) THEN BEGIN SELECT COALESCE( MAX(MASTER_.MAK_SIRA), 0) FROM MASTER_ WHERE (MASTER_.MAK_TYPE_ID =:MAK_TIPI__)AND (MASTER_.MAK_SERI IS NULL) INTO:RESULT; RESULT = RESULT + 1; END ELSE BEGIN SELECT COALESCE( MAX(MASTER_.MAK_SIRA), 0) FROM MASTER_ WHERE (MASTER_.MAK_TYPE_ID =:MAK_TIPI__)AND (MASTER_.MAK_SERI = :SERI__) INTO:RESULT; IF ( RESULT IS NULL ) THEN RESULT = 0; RESULT = RESULT + 1; END SUSPEND; END
Sayfa başına dön Aşağa gitmek
 
Makbuz-Fiş Seri ve Sıra numaraları hakkında bir yöntem
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» veri tabanı hakkında güzel kaynaklar

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
 :: BT Bilgisayar ve Teknolojisi :: Programlama :: Delphi / Pascal-
Buraya geçin: