Merhaba,
'Saçmalama' dediğinizi duyar gibiyim. Arama da yaptım ama bir sonuca ulaşamadım henüz. Şimdi sorunu biraz açmaya çalışayım.
IBQuery ile Stored procedure çağırıp, sonucu DBGrid'de gösteriyorum.
Ancak DBGridde 41 inci kayıttan sonraki Tutar kolonunun değeri sıfır olarak geliyor.
Eğer bu kayıtlardan örneğin ilk 10 tanesini silersem, daha önce sıfır gelen kayıtların gerçek tutar değerleri gösteriliyor. AMa 40 tan sonrakilerin tutarı gene sıfır.
IBQuery şu şekilde :
select * from SP_TEMPFAT1 ( :BAYIKODU)
IB Expert içinden aynı SP'yi aynı bayi için çalıştırdığımda kayıtların doğru olduğunu görüyorum. DBGrid içinde veya Query parametrelerinde, gelen kayıtlarla ilgili bir sınırlama olabilir mi ?
Bana 70 kayıt dönüyor ve sorun sadece 41-70 arasındaki kayıtlarda ve sadece Tutar alanında. Diğer alanlardaki bilgiler doğru. Bakalım daha neler göreceğiz.
SP den gelen bilgide 40.kayıttan sonrası yanlış
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
SP den gelen bilgide 40.kayıttan sonrası yanlış
Sevgi, Saygı.....
Selamlar,
SP'nizi ve Table Structure'ınızı gönderin inceleyelim.
SP'nizi ve Table Structure'ınızı gönderin inceleyelim.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Problemin tanımını biraz değiştiriyorum, soru çok daha uzun olacak ama :
Aslında DBgrid doğrudan query sonucuna bağlı değil.
SP_TEMPFAT1 çalışınca TEMPFAT dosyasını yaratıyor, DBGrid ise TEMPFAT dosyasını gösteriyor.
daha doğru ifade etmiş oldum şimdi.
Stored procedure'u IB expert'ten çalıştırırsam kayıtlar doğru, ama delphi içinden çalıştırırsam Xalan, Tutar ve Ftutar değerleri 40. kayıttan sonra 0 geliyor.
Stored Procedure şu şekilde :
TMPFAT tablosunun yapısı da şöyle :
Aslında DBgrid doğrudan query sonucuna bağlı değil.
SP_TEMPFAT1 çalışınca TEMPFAT dosyasını yaratıyor, DBGrid ise TEMPFAT dosyasını gösteriyor.
Kod: Tümünü seç
DBGfat.datasource := DSfat;
DSfat.dataset := TBTmpfat;
TBTmpFat.TableName := TmpFat;
Stored procedure'u IB expert'ten çalıştırırsam kayıtlar doğru, ama delphi içinden çalıştırırsam Xalan, Tutar ve Ftutar değerleri 40. kayıttan sonra 0 geliyor.
Stored Procedure şu şekilde :
Kod: Tümünü seç
SET TERM ^ ;
CREATE PROCEDURE SP_TEMPFAT1 (BAYIKODU VARCHAR(15))
RETURNS ( SIPNO INTEGER, IRSNO INTEGER, HESAPADI VARCHAR(35),
ADET SMALLINT, ALAN NUMERIC(12,3), XALAN NUMERIC(12,3),
UNITEKODU CHAR(1), UNITEADI VARCHAR(15), CIFT VARCHAR(1),
SEC VARCHAR(1), FATFIYAT NUMERIC(12,3), ISKONTO SMALLINT,
ISK1 SMALLINT, ISK2 SMALLINT, ISK3 SMALLINT,
TUTAR NUMERIC(12,3), FTUTAR NUMERIC(12,3), GARNO INTEGER)
AS
DECLARE VARIABLE HESAPKODU VARCHAR(15);
DECLARE VARIABLE NUMROWS SMALLINT;
DECLARE VARIABLE ISKHESAP FLOAT;
BEGIN
/* FATURA için gereken bilgileri SIPDETAY dan okuyup süzer, TMPFAT tablosunda oluşturur */
DELETE FROM TMPFAT;
FOR
SELECT SD.siparisno, SD.HESAPKODU, SD.IRSNO, SD.ADET, SD.ALAN, SD.UNITEKODU, SD.CIFT, SD.FATFIYAT, SA.ISKONTO, SA.ISK1, SA.ISK2, SA.ISK3, SA.GARNO
FROM SIPDETAY SD, SIPANA SA
WHERE (SA.BAYIKODU = :BAYIKODU) AND (SD.FATNO is NULL) AND
(SA.SIPARISNO = SD.SIPARISNO) AND (SD.IRSTARIH is not NULL)
INTO :SIPNO, :HESAPKODU, :IRSNO, :ADET, :ALAN, :UNITEKODU, :CIFT, :FATFIYAT, :ISKONTO, :ISK1, :ISK2, :ISK3, :GARNO
DO
begin
if (ISK1 is null) then ISK1 = 1;
if (ISK2 is null) then ISK2 = 1;
if (ISK3 is null) then ISK3 = 0;
if (ISK1 = 0 ) then ISK1 = 1;
if (ISK2 = 0 ) then ISK2 = 1;
if (unitekodu is null ) then UNITEKODU = ' ';
UNITEADI = ' ';
select UNITEADI from UNITE
where UNITE.UNITEKODU = :UNITEKODU into :UNITEADI;
if (UNITEADI is null ) then UNITEADI = ' ';
select HESAPLAR.HESAPADI from HESAPLAR
where HESAPLAR.HESAPKODU = :HESAPKODU into :HESAPADI;
select count(*) from TMPFAT
where
TMPFAT.SIPNO = :SIPNO AND
TMPFAT.IRSNO = :IRSNO AND
TMPFAT.HESAPADI = :HESAPADI AND
TMPFAT.UNITEKODU = :UNITEKODU into numrows;
SEC = ' ';
if (numrows = 0) THEN
INSERT INTO TMPFAT (SIPNO, IRSNO, HESAPADI, HESAPKODU, UNITEKODU, ADET, ALAN, UNITEADI,CIFT,FATFIYAT,ISKONTO,ISK1,ISK2,ISK3,TUTAR,FTUTAR,SEC,GARNO)
values (:SIPNO, :IRSNO, :HESAPADI, :HESAPKODU, :UNITEKODU, 0, 0, :UNITEADI,:CIFT, :FATFIYAT,:ISKONTO,:ISK1,:ISK2,:ISK3,0,0,:SEC,:GARNO);
update tmpFAT set TMPFAT.ADET = TMPFAT.ADET + :ADET,
TMPFAT.ALAN = TMPFAT.ALAN + :ALAN
where
TMPFAT.SIPNO = :SIPNO AND
TMPFAT.IRSNO = :IRSNO AND
TMPFAT.HESAPADI = :HESAPADI AND
TMPFAT.UNITEKODU = :UNITEKODU;
END
FOR
SELECT SIPNO, IRSNO, CIFT, HESAPADI, ADET, ALAN, UNITEKODU, UNITEADI, FATFIYAT, ISKONTO, ISK1, ISK2, ISK3, TUTAR, FTUTAR, GARNO
FROM TMPFAT
ORDER BY TMPFAT.SIPNO, TMPFAT.IRSNO, TMPFAT.CIFT, TMPFAT.HESAPADI
INTO :SIPNO, :IRSNO, :CIFT, :HESAPADI, :ADET, :ALAN, :UNITEKODU, :UNITEADI, :FATFIYAT, :ISKONTO, :ISK1, :ISK2, :ISK3, :TUTAR, :FTUTAR, :GARNO
/* ISK1 / ISK2 Oranı ile Faturada yazılacak ALAN bilgisini hesapla */
/* ve faturaya yazılacak FTUTAR bilgisini hesapla */
DO begin
/* deneme yapmak için */
/* ISKONTO = 20; ISK1 = 1; ISK2 = 2; ISK3 = 5; */
TUTAR = :FATFIYAT * (1 - :ISKONTO/100.00) * :ALAN;
if (:ISK2 > 0) then XALAN = :ALAN * :ISK1 / :ISK2; ELSE XALAN = ALAN;
FTUTAR = :FATFIYAT * (1.00 - (:ISKONTO + :ISK3) / 100.00) * :XALAN;
update tmpFAT set TMPFAT.TUTAR = :TUTAR ,
TMPFAT.FTUTAR = :FTUTAR,
TMPFAT.XALAN = :XALAN
where
TMPFAT.SIPNO = :SIPNO AND
TMPFAT.IRSNO = :IRSNO AND
TMPFAT.HESAPADI = :HESAPADI AND
TMPFAT.UNITEKODU = :UNITEKODU;
SUSPEND;
END
END
^
SET TERM ; ^
GRANT SELECT,INSERT,DELETE,UPDATE ON TMPFAT TO PROCEDURE SP_TEMPFAT1;
GRANT SELECT ON SIPDETAY TO PROCEDURE SP_TEMPFAT1;
GRANT SELECT ON SIPANA TO PROCEDURE SP_TEMPFAT1;
GRANT SELECT ON UNITE TO PROCEDURE SP_TEMPFAT1;
GRANT SELECT ON HESAPLAR TO PROCEDURE SP_TEMPFAT1;
Kod: Tümünü seç
CREATE TABLE TMPFAT (
SIPNO INTEGER NOT NULL,
IRSNO INTEGER,
CIFT VARCHAR(1) NOT NULL COLLATE PXW_TURK,
HESAPADI VARCHAR(35) NOT NULL COLLATE PXW_TURK,
UNITEKODU CHAR(1) NOT NULL COLLATE PXW_TURK,
HESAPKODU VARCHAR(15) COLLATE PXW_TURK,
ADET SMALLINT,
ALAN DMN_ALAN /* DMN_ALAN = NUMERIC(12,3) DEFAULT 0 */,
XALAN DMN_ALAN /* DMN_ALAN = NUMERIC(12,3) DEFAULT 0 */,
UNITEADI DMN_AD15 COLLATE PXW_TURK /* DMN_AD15 = VARCHAR(15) */,
SEC VARCHAR(1) COLLATE PXW_TURK,
FATFIYAT DMN_PARA /* DMN_PARA = NUMERIC(12,2) */,
ISKONTO SMALLINT,
ISK1 SMALLINT,
ISK2 SMALLINT,
ISK3 SMALLINT,
TUTAR DMN_PARA /* DMN_PARA = NUMERIC(12,2) */,
FTUTAR DMN_PARA /* DMN_PARA = NUMERIC(12,2) */,
GARNO INTEGER
);
/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/
ALTER TABLE TMPFAT ADD CONSTRAINT PK_TMPFAT PRIMARY KEY (SIPNO, CIFT, HESAPADI, UNITEKODU);
/******************************************************************************/
/**** Privileges ****/
/******************************************************************************/
/* Privileges of users */
GRANT SELECT, INSERT, UPDATE, DELETE ON TMPFAT TO PUBLIC;
/* Privileges of procedures */
GRANT SELECT ON TMPFAT TO PROCEDURE SP_FAT_YAZILDI;
GRANT SELECT, INSERT, UPDATE, DELETE ON TMPFAT TO PROCEDURE SP_TEMPFAT1;
Sevgi, Saygı.....