Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
stored procedure
#1
arkadaşlar bi ricam var
aşağıdaki  stored procedure ve delphi kodlarıma bakıp hatayı nerede yaptığımı söyleyebilir misiniz?
delphiden aldığım hata kodu şu: "uygulama geçerli işlem için yanlış türde bir değer kullanıyor"

mssql server'dai stored procedure. 
ALTER PROC [dbo].[urun_alis](

@urunid int,
@depoid int, 
@sinifid int,
@sertif_kur varchar(50),
@sertif_tar date,
@sertif_no varchar(25),
@stk_miktar int,
@bel_turc char,
@bel_tarc date,
@bel_noc varchar(30),
@bel_tutc int,
@bel_turs char,
@bel_tars date,
@bel_nos varchar(30),
@bel_tuts money,
@ode_tur char,
@ode_tut money,
@musid int,
@al_mus int,
@al_urn int,
@al_snf int,
@al_dep int,
@al_birfiy money,
@al_kdv int,
@al_hamal money,
@al_nak money,
@al_diggid money,
@mik int,
@al_tar date,
@islid int,
@ode_tar date,
@kasa_toplam money
)as 

if exists(select * from stok_tbl where stok_urunID=@urunid AND stok_sinifID=@sinifid)  
 UPDATE stok_tbl SET stok_miktar=@stk_miktar where stok_urunID=@urunid AND stok_sinifID=@sinifid    
else  
 INSERT stok_tbl (stok_urunID, stok_depoID,stok_sinifID,urun_sertifika_kur,urun_sertifika_tarih,urun_sertifika_no,stok_miktar) VALUES (@urunid,@depoid,@sinifid,@sertif_kur,@sertif_tar,@sertif_no,@stk_miktar)
set @islid=(select MAX(alisID) FROM alis_tbl)+1

if LEN(@bel_turc) > 0 AND LEN(@bel_turs) < 0
begin
INSERT belge_tbl (belge_tur,belge_tarih,belge_no,odeme_tur,odeme_tutar,odeme_tarih,musteriID,islemID) VALUES (@bel_turc,getdate(),@bel_noc,@ode_tur,@bel_tutc,@bel_tarc,@musid,@islid)
end
if LEN(@bel_turs) > 0  AND LEN(@bel_turc) < 0
begin
INSERT belge_tbl (belge_tur,belge_tarih,belge_no,odeme_tur,odeme_tutar,odeme_tarih,musteriID,islemID) VALUES (@bel_turs,getdate(),@bel_nos,@ode_tur,@bel_tuts,@bel_tars,@musid,@islid)
end
if LEN(@bel_turs) > 0  AND LEN(@bel_turc) > 0
begin
INSERT belge_tbl (belge_tur,belge_tarih,belge_no,odeme_tur,odeme_tutar,odeme_tarih,musteriID,islemID) VALUES (@bel_turs,getdate(),@bel_nos,@bel_tuts,@ode_tut,@bel_tars,@musid,@islid),(@bel_turc,getdate(),@bel_noc,@ode_tur,@bel_tutc,@bel_tarc,@musid,@islid) 
end
set @kasa_toplam=(select SUM(kasa_cari) from kasa)-@ode_tut
insert kasa (kasa_islem, kasa_islem_tutar, kasa_cari,kasa_islemID) VALUES ('0',@ode_tut, @kasa_toplam,@islid)
INSERT alis_tbl (alis_musteriID,alis_urunID,alis_sinifID,alis_depoID,alis_birim_fiyat,alis_kdv,alis_hamaliye,alis_nakliye,alis_diger_gider,miktar,alis_tarih_saat) VALUES (@al_mus,@al_urn,@al_snf,@al_dep,@al_birfiy,@al_kdv,@al_hamal,@al_nak,@al_diggid,@mik,getdate())


Delphi Kodlarım:
procedure TForm1.BitBtn15Click(Sender: TObject);

var
ck,sn:string;
begin
  if cek_box.Checked then
   begin
     ck:='C';
   end
  else
   begin
     ck:='';
   end;
  if snt_box.Checked then
   begin
     sn:='S';
   end
  else
   begin
     sn:='';
   end;
cek:= strtofloat(edit27.Text);
senet:=strtofloat(edit28.Text);
nakit:=nakit-(cek+senet);
  urnal_ados.Parameters.ParamByName('@urunid').Value:=urnid_label.Caption;
  urnal_ados.Parameters.ParamByName('@depoid').Value:=depid_label.Caption;
  urnal_ados.Parameters.ParamByName('@sinifid').Value:=snfid_label.Caption;
  urnal_ados.Parameters.ParamByName('@sertif_kur').Value:=edit68.text;
  urnal_ados.Parameters.ParamByName('@sertif_tar').Value:=sertifika_date.Date;
  urnal_ados.Parameters.ParamByName('@sertif_no').Value:=edit70.text;
  urnal_ados.Parameters.ParamByName('@stk_miktar').Value:=edit19.text;
  urnal_ados.Parameters.ParamByName('@bel_turc').Value:=ck;
  urnal_ados.Parameters.ParamByName('@bel_tarc').Value:=cek_date.Date;
  urnal_ados.Parameters.ParamByName('@bel_noc').Value:=edit8.text;
  urnal_ados.Parameters.ParamByName('@bel_tutc').Value:=edit27.Text;
  urnal_ados.Parameters.ParamByName('@bel_turs').Value:=sn;
  urnal_ados.Parameters.ParamByName('@bel_tars').Value:=snt_date.date;
  urnal_ados.Parameters.ParamByName('@bel_nos').Value:=edit30.text;
  urnal_ados.Parameters.ParamByName('@bel_tuts').Value:=edit29.text;
  urnal_ados.Parameters.ParamByName('@ode_tur').Value:='A';
  urnal_ados.Parameters.ParamByName('@ode_tut').Value:=edit26.text;
  urnal_ados.Parameters.ParamByName('@musid').Value:=mustid_label.caption;
  urnal_ados.Parameters.ParamByName('@al_mus').Value:=mustid_label.caption;
  urnal_ados.Parameters.ParamByName('@al_urn').Value:=urnid_label.caption;
  urnal_ados.Parameters.ParamByName('@al_snf').Value:=snfid_label.caption;
  urnal_ados.Parameters.ParamByName('@al_dep').Value:=depid_label.caption;
  urnal_ados.Parameters.ParamByName('@al_birfiy').Value:=edit18.text;
  urnal_ados.Parameters.ParamByName('@al_kdv').Value:=edit23.text;
  urnal_ados.Parameters.ParamByName('@al_hamal').Value:=edit22.text;
  urnal_ados.Parameters.ParamByName('@al_nak').Value:=edit21.text;
  urnal_ados.Parameters.ParamByName('@al_diggid').Value:=edit24.text;
  urnal_ados.Parameters.ParamByName('@mik').Value:=edit19.text;
    urnal_ados.ExecProc;
    urnal_ados.Active:=true;
end;
Cevapla
#2
Bütün parametrelere değer atamayı deneyin. Belki atladığınız bir parametre yüzünden sorun çıkıyor olabilir.
Cevapla
#3
fonksiyon tarafında @al_tar date,@islid int,@ode_tar date,@kasa_toplam money parametre olarak tanımlamışsınız.
Bunları içeride değer tanımladığınız için değişken olarak içeride tanımlanız gerekiyor.
Cevapla
#4
Merhaba
- Parametrelerden 1 tanesinin değerine atama yaparken parametrenin beklediği veri türü ile atama yapılan veri türü eşleşmiyor.
WWW
Cevapla
#5
(10-05-2019, Saat: 00:59)fatihablak Adlı Kullanıcıdan Alıntı: fonksiyon tarafında @al_tar date,@islid int,@ode_tar date,@kasa_toplam money parametre olarak tanımlamışsınız.
Bunları içeride değer tanımladığınız için değişken olarak içeride tanımlanız gerekiyor.

Bu şekilde çözülecek gibi görünüyor ama şu an tam sonuçlandıramadım. Ramazan dolayısıyla biraz ara verdim çalışmalara. Sonucu burada paylaşacağım.
Cevapla
#6
Aynen arkadaş dediği gibi senin gönderdiğin parametre saysı (Delphi tarafından) ve procedure içersindeki parametre sayısı yanlış ne tanımlarsan o kadar da göndermen lazım.
Cevapla
#7
Arkadaşlar şimdi de şöyle bir sorunum var dışardan bi gözle benim göremediğimi göreceğinizi düşünüyorum. aşağıdaki stored procedure ile alınan ürün stok tablosunda var ise stok miktarını arttırmayı yok ise yeni kayıt eklemeyi istiyorum. dediğim şekilde de yapıyor ama stok miktarını her ne hikmetse girilen miktarın 2 katı  olarak alıyor. miktar için (edit19.text\'e)  100 girilmişse benim program tabloya 200 ekliyor. hata nerede acaba bi bakar mısınız?

SQL_Stored Procedure:

ALTER PROC [dbo].[alis_stok](

@urunid int,
@depoid int, 
@sinifid int,
@sertif_kur varchar(50),
@sertif_tar date,
@sertif_no varchar(25),
@stk_miktar int,
@islid int
)as
 set @islid=(select MAX(alisID) FROM alis_tbl)+1
 if exists(select * from stok_tbl where stok_urunID=@urunid AND stok_sinifID=@sinifid) 
  UPDATE stok_tbl SET stok_miktar=stok_miktar+@stk_miktar where stok_urunID=@urunid AND stok_sinifID=@sinifid   
 else 
  INSERT stok_tbl (stok_urunID, stok_depoID,stok_sinifID,urun_sertifika_kur,urun_sertifika_tarih,urun_sertifika_no,stok_miktar) VALUES (@urunid,@depoid,@sinifid,@sertif_kur,@sertif_tar,@sertif_no,@stk_miktar)
set @islid=(select MAX(alisID) FROM alis_tbl)+1


Delphi Kodlarım:

cek:= strtofloat(edit27.Text);

senet:=strtofloat(edit28.Text);
nakit:=nakit-(cek+senet);
cek_tar:=datetostr(cek_date.Date);
snt_tar:=datetostr(snt_date.Date);
sert_tar:=datetostr(sertifika_date.Date);
miktar:=strtoint(edit19.Text);
kdv:=strtoint(edit23.Text);
tutcek:=strtofloat(edit27.Text);
tutsnt:=strtofloat(edit28.Text);
tutnkt:=strtofloat(edit26.Text);
birfiy:=strtofloat(edit18.Text);
hamal:=strtofloat(edit22.Text);
nakl:=strtofloat(edit21.Text);
diggid:=strtofloat(edit24.Text);
urnal_ados.Parameters.ParamByName('@urunid').Value:=urnid_label.Caption;
urnal_ados.Parameters.ParamByName('@depoid').Value:=depid_label.Caption;
urnal_ados.Parameters.ParamByName('@sinifid').Value:=snfid_label.Caption;
urnal_ados.Parameters.ParamByName('@sertif_kur').Value:=edit68.text;
urnal_ados.Parameters.ParamByName('@sertif_tar').Value:=sert_tar;
urnal_ados.Parameters.ParamByName('@sertif_no').Value:=edit70.text;
urnal_ados.Parameters.ParamByName('@stk_miktar').Value:=miktar;
urnal_ados.ExecProc;
urnal_ados.Active:=true;
Cevapla
#8
(17-05-2019, Saat: 03:37)harezmi Adlı Kullanıcıdan Alıntı: Arkadaşlar şimdi de şöyle bir sorunum var dışardan bi gözle benim göremediğimi göreceğinizi düşünüyorum. aşağıdaki stored procedure ile alınan ürün stok tablosunda var ise stok miktarını arttırmayı yok ise yeni kayıt eklemeyi istiyorum. dediğim şekilde de yapıyor ama stok miktarını her ne hikmetse girilen miktarın 2 katı  olarak alıyor. miktar için (edit19.text\'e)  100 girilmişse benim program tabloya 200 ekliyor. hata nerede acaba bi bakar mısınız?

SQL_Stored Procedure:

ALTER PROC [dbo].[alis_stok](

@urunid int,
@depoid int, 
@sinifid int,
@sertif_kur varchar(50),
@sertif_tar date,
@sertif_no varchar(25),
@stk_miktar int,
@islid int
)as
 set @islid=(select MAX(alisID) FROM alis_tbl)+1
 if exists(select * from stok_tbl where stok_urunID=@urunid AND stok_sinifID=@sinifid) 
  UPDATE stok_tbl SET stok_miktar=stok_miktar+@stk_miktar where stok_urunID=@urunid AND stok_sinifID=@sinifid   
 else 
  INSERT stok_tbl (stok_urunID, stok_depoID,stok_sinifID,urun_sertifika_kur,urun_sertifika_tarih,urun_sertifika_no,stok_miktar) VALUES (@urunid,@depoid,@sinifid,@sertif_kur,@sertif_tar,@sertif_no,@stk_miktar)
set @islid=(select MAX(alisID) FROM alis_tbl)+1


Delphi Kodlarım:

cek:= strtofloat(edit27.Text);

senet:=strtofloat(edit28.Text);
nakit:=nakit-(cek+senet);
cek_tar:=datetostr(cek_date.Date);
snt_tar:=datetostr(snt_date.Date);
sert_tar:=datetostr(sertifika_date.Date);
miktar:=strtoint(edit19.Text);
kdv:=strtoint(edit23.Text);
tutcek:=strtofloat(edit27.Text);
tutsnt:=strtofloat(edit28.Text);
tutnkt:=strtofloat(edit26.Text);
birfiy:=strtofloat(edit18.Text);
hamal:=strtofloat(edit22.Text);
nakl:=strtofloat(edit21.Text);
diggid:=strtofloat(edit24.Text);
urnal_ados.Parameters.ParamByName('@urunid').Value:=urnid_label.Caption;
urnal_ados.Parameters.ParamByName('@depoid').Value:=depid_label.Caption;
urnal_ados.Parameters.ParamByName('@sinifid').Value:=snfid_label.Caption;
urnal_ados.Parameters.ParamByName('@sertif_kur').Value:=edit68.text;
urnal_ados.Parameters.ParamByName('@sertif_tar').Value:=sert_tar;
urnal_ados.Parameters.ParamByName('@sertif_no').Value:=edit70.text;
urnal_ados.Parameters.ParamByName('@stk_miktar').Value:=miktar;
urnal_ados.ExecProc;
urnal_ados.Active:=true;

Merhabalar,

urnal_ados.ExecProc;
urnal_ados.Active:=true;

Sadece ExecProc yapıp denermisiniz.
Bir daha active etmeniz kodun 2 defa çalışmasına neden olacaktır diye düşünüyorum.

Deneme imkanım yok.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#9
aynen dediğin gibi oluyormuş
Cevapla
#10
Merhaba sorun cözülmüş ama yinde sorunun kaynağınmı belirtmek isterim
storedproc kodlarınız herhangı bır select ıfadesıyle gerıye dataset dondurmuyor.
bu durumda urnal_ados.Active:=true; yapmaznız hataya sebep oluyor.
urnal_ados.ExecProc ile sql kodlarının sadec işletilmesi gerekiyor
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Stored Procedure barissagir 1 677 07-12-2022, Saat: 16:59
Son Yorum: yhackup
  Stored Procedure Önceki gün devir. smokie 7 4.735 27-09-2020, Saat: 22:00
Son Yorum: anemos
  Maximum stored procedure, nesting level exceeded (limit 32) hatası Bay_Y 6 4.682 08-08-2018, Saat: 14:15
Son Yorum: Tuğrul HELVACI
  Store Procedure içinden hata alma Bay_Y 4 3.852 23-05-2018, Saat: 12:34
Son Yorum: Bay_Y
  Raporlamada hangisi daha performanslıdır View? Store Procedure? adelphiforumz 13 10.579 23-12-2017, Saat: 22:09
Son Yorum: FiRewaLL



Konuyu Okuyanlar: 1 Ziyaretçi