Delphi Can

Orjinalini görmek için tıklayınız: stored procedure
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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;
Bütün parametrelere değer atamayı deneyin. Belki atladığınız bir parametre yüzünden sorun çıkıyor olabilir.
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.
Merhaba
- Parametrelerden 1 tanesinin değerine atama yaparken parametrenin beklediği veri türü ile atama yapılan veri türü eşleşmiyor.
(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.
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.
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;
(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.
aynen dediğin gibi oluyormuş
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