Yorumları: 669
Konuları: 72
Kayıt Tarihi: 24-01-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 906 Acemi
17-04-2024, Saat: 10:29
(Son Düzenleme: 17-04-2024, Saat: 16:35, Düzenleyen: Bay_Y.)
Herkese Merhabalar ;
Aslında sorun tam olarak ne ile ilgili ve başlığı ne olması gerekiyor karar vermedim. Anlatmaya çalışacağım umarım becerebilirim.
Yapmak istediğim bir kod a ait reçete içeriği listesini çıkarmak. Bununla ilgili öncelikle SQL üzerinde yazdığım bir triger içerisinde "CTE" olarak denedim çalışıyor gibi fakat bazen
(maxrecursion 365) hatası aşıldığına dair hata veriyor nedenini bulamadım.
Muhtemel sebep kayıt anında kayıtlar toplu olarak yapıldığından dolayı triger içinde cursor kullanmak gerekiyor her kayıda erişip reçete kontrolü yapmak ve içeriklerini çıkarıp işlemek için buda çok sağlıklı bir sistem gibi durmuyor.
Bu yüzden Delphi içinden halletmek daha doğruymuş gibi geldi , emin değilim bu konuda sıkıntı yaşıyorum ve fikirlerinize ve yardımınıza ihtriyacım var.
Öncelikle asıl sorunum , aşağıda çizerek anlatmaya çalıştım .
Not : Kodlar doğru değil sadece kullanacağım, aklıma gelen yöntem bu şekilde olduğu için, bunu vurgulamak adına anlatmaya çalıştım.
konu hakkında yardım rica ediyorum. Teşekkürler ve kolaylıklar diliyorum.
Yorumları: 835
Konuları: 40
Kayıt Tarihi: 11-11-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.147 Uzman
17-04-2024, Saat: 10:35
(Son Düzenleme: 17-04-2024, Saat: 10:37, Düzenleyen: hi_selamlar.)
(17-04-2024, Saat: 10:29)Bay_Y Adlı Kullanıcıdan Alıntı: Herkese Merhabalar ;
Aslında sorun tam olarak ne ile ilgili ve başlığı ne olması gerekiyor karar vermedim. Anlatmaya çalışacağım umarım becerebilirim.
Yapmak istediğim bir kod a ait reçete içeriği listesini çıkarmak. Bununla ilgili öncelikle SQL üzerinde yazdığım bir triger içerisinde "CTE" olarak denedim çalışıyor gibi fakat bazen
(maxrecursion 365) hatası aşıldığına dair hata veriyor nedenini bulamadım.
Muhtemel sebep kayıt anında kayıtlar toplu olarak yapıldığından dolayı triger içinde cursor kullanmak gerekiyor her kayıda erişip reçete kontrolü yapmak ve içeriklerini çıkarıp işlemek için buda çok sağlıklı bir sistem gibi durmuyor.
Bu yüzden Delphi içinden halletmek daha doğruymuş gibi geldi , emin değilim bu konuda sıkıntı yaşıyorum ve fikirlerinize ve yardımınıza ihtriyacım var.
Öncelikle asıl sorunum , aşağıda çizerek anlatmaya çalıştım .
konu hakkında yardım rica ediyorum. Teşekkürler ve kolaylıklar diliyorum.
Merhabalar,
İlk gördüğüm, Repeat içerisinde neden First; kullanıyorsunuz.
Hiç bir zaman sona ulaşamayacak.
Kolay gelsin
Amaç, bilginin de/aklın da zekat'ını vermek.
Yorumları: 669
Konuları: 72
Kayıt Tarihi: 24-01-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 906 Acemi
17-04-2024, Saat: 10:42
(Son Düzenleme: 17-04-2024, Saat: 10:45, Düzenleyen: Bay_Y.)
(17-04-2024, Saat: 10:35)hi_selamlar Adlı Kullanıcıdan Alıntı: (17-04-2024, Saat: 10:29)Bay_Y Adlı Kullanıcıdan Alıntı: Herkese Merhabalar ;
Aslında sorun tam olarak ne ile ilgili ve başlığı ne olması gerekiyor karar vermedim. Anlatmaya çalışacağım umarım becerebilirim.
Yapmak istediğim bir kod a ait reçete içeriği listesini çıkarmak. Bununla ilgili öncelikle SQL üzerinde yazdığım bir triger içerisinde "CTE" olarak denedim çalışıyor gibi fakat bazen
(maxrecursion 365) hatası aşıldığına dair hata veriyor nedenini bulamadım.
Muhtemel sebep kayıt anında kayıtlar toplu olarak yapıldığından dolayı triger içinde cursor kullanmak gerekiyor her kayıda erişip reçete kontrolü yapmak ve içeriklerini çıkarıp işlemek için buda çok sağlıklı bir sistem gibi durmuyor.
Bu yüzden Delphi içinden halletmek daha doğruymuş gibi geldi , emin değilim bu konuda sıkıntı yaşıyorum ve fikirlerinize ve yardımınıza ihtriyacım var.
Öncelikle asıl sorunum , aşağıda çizerek anlatmaya çalıştım .
konu hakkında yardım rica ediyorum. Teşekkürler ve kolaylıklar diliyorum.
Merhabalar,
İlk gördüğüm, Repeat içerisinde neden First; kullanıyorsunuz.
Hiç bir zaman sona ulaşamayacak.
Kolay gelsin
merhaba cevabınız için teşekkür ederim , yukarıdaki kodu sadece yapmak istediğimi örneklendirebilme adına yazdım zaten repeat 2 kere kullanılmış first altındaki gereksiz ve hatalı , bunun dışında SQL cümlesi yok , buradaki kodlar çalışan kodlar değil , ama bu mantık ile yazılacak ve yaşanan sorun bu demek istemiştim.
Yorumları: 835
Konuları: 40
Kayıt Tarihi: 11-11-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.147 Uzman
17-04-2024, Saat: 10:49
(Son Düzenleme: 17-04-2024, Saat: 10:53, Düzenleyen: hi_selamlar.)
(17-04-2024, Saat: 10:42)Bay_Y Adlı Kullanıcıdan Alıntı: (17-04-2024, Saat: 10:35)hi_selamlar Adlı Kullanıcıdan Alıntı: Merhabalar,
İlk gördüğüm, Repeat içerisinde neden First; kullanıyorsunuz.
Hiç bir zaman sona ulaşamayacak.
Kolay gelsin
merhaba cevabınız için teşekkür ederim , yukarıdaki kodu sadece yapmak istediğimi örneklendirebilme adına yazdım zaten repeat 2 kere kullanılmış first altındaki gereksiz ve hatalı , bunun dışında SQL cümlesi yok , buradaki kodlar çalışan kodlar değil , ama bu mantık ile yazılacak ve yaşanan sorun bu demek istemiştim.
Merhabalar,
Nacizane, bir yardımda bulunduğunuz da canlı kodları "Kod Bloğu" içinde paylaşmanız faydalı olacaktır.
Diğer türlü örnek kodlarınız üzerinden (benim gibi ) yorumlar gelecek ve sonuca ulaşmanız uzun zaman alacaktır.
Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Yorumları: 669
Konuları: 72
Kayıt Tarihi: 24-01-2018
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 906 Acemi
17-04-2024, Saat: 10:58
(Son Düzenleme: 17-04-2024, Saat: 16:34, Düzenleyen: Bay_Y.)
(17-04-2024, Saat: 10:49)hi_selamlar Adlı Kullanıcıdan Alıntı: (17-04-2024, Saat: 10:42)Bay_Y Adlı Kullanıcıdan Alıntı: merhaba cevabınız için teşekkür ederim , yukarıdaki kodu sadece yapmak istediğimi örneklendirebilme adına yazdım zaten repeat 2 kere kullanılmış first altındaki gereksiz ve hatalı , bunun dışında SQL cümlesi yok , buradaki kodlar çalışan kodlar değil , ama bu mantık ile yazılacak ve yaşanan sorun bu demek istemiştim.
Merhabalar,
Nacizane, bir yardımda bulunduğunuz da canlı kodları "Kod Bloğu" içinde paylaşmanız faydalı olacaktır.
Diğer türlü örnek kodlarınız üzerinden (benim gibi ) yorumlar gelecek ve sonuca ulaşmanız uzun zaman alacaktır.
Kolay gelsin.
Çok haklısınız , bu konuda size tamamen katılıyorum , sorun şu ki henüz tamamlanmış bir kod yok sorunu görebilmem için aşağıda paylaşacağım kodu yazmam yetti
procedure satishareketleri_recete_kontrol(fisno, kod , birim: string ; fisadet, miktar : real);
Var sSQLs : String ;
begin
sSQls := ' SELECT * FROM urunkarti_rec WITH (NOLOCK) WHERE reckod=' + Quotedstr(kod) ;
SQlServerDb('R',Datalist.adoRecete,sSQLs);
With Datalist.adoRecete do
begin
Datalist.adoRecete.First;
repeat
if Datalist.adoRecete.recordcount>0 then
begin
// Gelen kod reçeteye sahip
satishareketleri_recete_kontrol( fisno,
Datalist.adoRecete.FieldByName('kod').AsString ,
Datalist.adoRecete.FieldByName('birim').AsString,
fisadet,
ifnull(Datalist.adoRecete.FieldByName('miktar').value,0) * Miktar
);
end else begin
// reçetesi yok ona göre işle
sSQL := ' INSERT INTO ' + tmpRecete + ' (fisno , reckod, kod, miktar , birim , fisadet, recadet ) ' +
' VALUES ( ' + fisno + ',' +
Quotedstr(kod)+',' +
Quotedstr(Datalist.adoRecete.FieldByName('kod').AsString) +
',1,' +
birim + ' ,'+
ReplaceDot(FloatToStr(fisadet)) + ','+
ReplaceDot(FloatToStr(miktar)) + ' )' ;
SQlServerQ(sSQL);
end;
Datalist.adoRecete.Next;
Until Datalist.adoRecete.Eof;
end;
end;
Procedure satis_stok_isle(fisno:string);
Var sSQLs : String ;
begin
sSQls := ' SELECT * FROM satishareketleri WITH (NOLOCK) WHERE fisno=' + fisno ;
SQlServerDb('R',Datalist.adoSales,sSQLs);
With Datalist.adoSales do
begin
if recordcount>0 then
begin
tmpRecete := tmpWh + 'recete_' + fisno ;
tmpf_recete(tmpRecete);
end else
begin
exit;
end;
First;
repeat
satishareketleri_recete_kontrol(fisno,
FieldByName('kod').AsString ,
FieldByName('birim').AsString,
ifnull(FieldByName('miktar').Value,0),
1
);
Next;
Until eof;
end;
end;
şimdilik kodda ufak bir değişiklik ile sorunum çözüldü, Başka birinin işine yarar diye buraya bı şimdilik kodda ufak bir değişiklik ile sorunum çözüldü, Başka birinin işine yarar diye buraya brakıyorum.
[ars=delphi]
procedure satishareketleri_recete_kontrol(fisno, kod , birim: string ; fisadet, miktar : real);
Var sSQLs : String ;
adoRec : TAdoQuery ;
begin
adoRec := TAdoQuery.Create(nil);
adoRec.Connection := datalist.cnROS ;
With adoRec do begin
Active := False;
sSQls := ' SELECT * FROM urunkarti_rec WITH (NOLOCK) WHERE reckod=' + Quotedstr(kod) ;
SQl.Text := sSQls ;
Active := true ;
With adoRec do
begin
First;
repeat
if recordcount>0 then
begin
// Gelen kod reçeteye sahip
receteadet := miktar ;
satishareketleri_recete_kontrol( fisno,
FieldByName('kod').AsString ,
FieldByName('birim').AsString,
fisadet,
ifnull(FieldByName('miktar').value,0) * Miktar
);
end else begin
// reçetesi yok ona göre işle
sSQL := ' INSERT INTO ' + tmpRecete + ' (fisno , reckod, kod, miktar , birim , fisadet, recadet ) ' +
' VALUES ( ' + fisno + ',' +
Quotedstr(anakod) +',' +
Quotedstr(kod)+
ReplaceDot(FloatToStr(miktar)) +',' +
birim + ' ,'+
ReplaceDot(FloatToStr(anamiktar)) +',' +
ReplaceDot(FloatToStr(receteadet)) + ' ) ' ;
SQlServerQ(sSQL);
end;
Next;
Until Eof;
end;
FreeAndNil(adoRec);
end;
end;
|