Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MySQL 8 - Incorrect number of arguments for PROCEDURE
#1
Exclamation 
Merhabalar,

@Tuğrul HELVACI bey'in bu kadar "Önermiyorum!" başlıklarından sonra bu tarz bir soru sormak
beni de üzdü ama inanın başvuracağım başka bir yol kalmadı. Blush

MySQL 8 'e Unidac ile bağlantı yapıyor. DB'de Stored Procedure ile bir INSERT işlemi yaptım.
Fakat bir türlü bu sorunu aşamadım.

Verdiği hata mesajı :
#42000Incorrect number of arguments for PROCEDURE sp_Insert; expected 9, got 10

Tanımladığım SP'de 9 adet IN parametresi var. Gelen verileri INSERT ile tabloya yazdırıyorum.
Delphi tarafında da kontrol ettiğimde 9 parametre var ve 9 parametre gönderiyorum. Kesinlikle buna eminim.

Bir çok deneme yaptım;
1- SP silip yeniden yazdım.
2- UnidacSP Comp. silip yeniden ekleyip bağlantı yaptım.
3- Parametreleri ParamByName ve Params[0] şeklinde gönderdim. ( USP1.Params[0].Value  -  USP1.ParamByName('tarih') )
fakat yine başarılı olamadım.

Yardımcı DB uygulaması ile SP çalıştırıp veri INSERT edebiliyorum. Fakat delphi de ne yaptı isem INSERT işlemi yaptıramadım.

Bu konu hakkında bilgi ve tecrübesi olan, yönlendirecek ve fikir paylaşacak arkadaşların yardımlarına ihtiyacım var.

Şimdiden herkese teşekkür ederim.

USP1.ParamByName('tarih').Value:=DateEdit2.Date;
USP1.ParamByName('idn').Value:=TextEdit6.Text;
USP1.ParamByName('aciklama').Value:=cxTextEdit2.Text;
USP1.ParamByName('idc').Value:=cariID.Value;
USP1.ParamByName('toplam_tutar').Value:=CurrencyEdit1.Value;
USP1.ParamByName('adet').Value:=CurrencyEdit2.Value;
USP1.ParamByName('gun_toplami').Value:=CurrencyEdit3.Value;
USP1.ParamByName('tarih1').Value:=DateEdit1.Date;
USP1.ParamByName('tipi').Value:=1;


DELIMITER |

CREATE DEFINER = 'root'@'localhost' PROCEDURE sp_Insert 
(
IN tarih date,
IN idn varchar(20),
IN aciklama varchar(200),
IN idc int,
IN toplam_tutar float,
IN adet int,
IN gun_toplami int,
IN tarih1 date,
IN tipi int
)
 MODIFIES SQL DATA
BEGIN

INSERT INTO tablo_deneme
 (
      tarih, idn, aciklama, idc, toplam_tutar, adet, gun_toplami, ortalama_vadesi, tipi
 )
 value (
       tarih, idn, aciklama, idc, toplam_tutar, adet, gun_toplami, ortalama_vadesi, tipi
 );
 
END|
DELIMITER ;

Saygılar.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#2
Hocam SP niz çalışıyor mu?
Yani bir SQL manager uygulamasında bu SP nin bu şekilde çalıştığını test ettiniz mi?
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#3
(07-01-2019, Saat: 23:40)mcuyan Adlı Kullanıcıdan Alıntı: Hocam SP niz çalışıyor mu?
Yani bir SQL manager uygulamasında bu SP nin bu şekilde çalıştığını test ettiniz mi?

Merhabalar,

Evet SP' bir aracı uygulama ile test ettim. Çalışıyor sorunsuz. Ama delphi de aktarma yapınca hata veriyor.
Şimdi en baştan tek tek tekrar bakıyorum. Sad

Mesaj için teşekkürler.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#4
1- Tablo alan isimlerinde id, no gibi rezerv kelimeler kullanmayın.
2- SP lerde Input alanların başına i_xxxx, output ların başına o_xxx yazarsanız kod karmaşanız olmaz..

CREATE DEFINER=`root`@`%` PROCEDURE `sp_insert`(IN i_ma_m_id VARCHAR(20),
IN i_ma_ad VARCHAR(20),
IN i_ma_ip VARCHAR(15))
BEGIN
INSERT INTO magazalar (ma_m_id,ma_ad,ma_ip)
VALUE ( i_ma_m_id,i_ma_ad,i_ma_ip);
END;

call sp_insert(1,'a','a');

Ben Unidac kullanarak bu şekilde çalıştırabildim.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#5
(07-01-2019, Saat: 23:45)mcuyan Adlı Kullanıcıdan Alıntı: 1- Tablo alan isimlerinde id, no gibi rezerv kelimeler kullanmayın.
2- SP lerde Input alanların başına i_xxxx, output ların başına o_xxx yazarsanız kar karmaşanız olmaz..

CREATE DEFINER=`root`@`%` PROCEDURE `sp_insert`(IN i_ma_m_id VARCHAR(20),
IN i_ma_ad VARCHAR(20),
IN i_ma_ip VARCHAR(15))
BEGIN
INSERT INTO magazalar (ma_m_id,ma_ad,ma_ip)
VALUE ( i_ma_m_id,i_ma_ad,i_ma_ip);
END;

call sp_insert(1,'a','a');

Hatalı yazım söz konusu. İlk mesajı düzeltiyorum.

Teşekkürler.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#6
bu arada SP IN de tarih1 kullanmışsınız, Fakat Values de ortalama_vade ..

Bir hata daha:
USP1.ParamByName('tarih1').Value:=DateEdit1.Date; yerine
USP1.ParamByName('tarih1').Asdate:=DateEdit1.Date; kullanın... Pc deki Tarih formatı ve Mysql deki büyük ihtimalle farklı olacaktır..
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#7
(07-01-2019, Saat: 23:50)mcuyan Adlı Kullanıcıdan Alıntı: bu arada SP IN de tarih1 kullanmışsınız, Fakat Values de ortalama_vade ..

Bir hata daha:
USP1.ParamByName('tarih1').Value:=DateEdit1.Date; yerine
USP1.ParamByName('tarih1').Asdate:=DateEdit1.Date;  kullanın... Pc deki Tarih formatı ve Mysql deki büyük ihtimalle farklı olacaktır..

Öncelikle bu saatte yardımlarınızdan ötürü çok teşekkür ederim size.

Bir hata yakaladım onu test ediyorum. İnşallah bir sonuç çıkacak gibi hemen paylaşımda bulunacağım tekrar.

Saygılar.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#8
rica ederim. İyi çalışmalar
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#9
(07-01-2019, Saat: 23:54)mcuyan Adlı Kullanıcıdan Alıntı: rica ederim. İyi çalışmalar

Çok teşekkür ederim.


Hata Sebebi!   

Kullanmış olduğum bir bişen setinin (CurrencyEdit) hesaplamadan sonra aktarılan değeri (Double/Float/Currency) olarak yazması.
Ama SP SQL de aktarma yaparken ben ekranda int değer görüyorum fakat aslında bileşende yazılı değer 32,75 ekranda 33
SP aktarımı arada ",  virgül" karakterini gördüğü için gönderilen parametre sayısının 9 değil 10 olarak algılıyor!
Aktarımda tip dönüşüm hatası vermediği içinde hatanın kaynağını bir türlü bulamamıştım.
Incompatible types: 'Integer' and 'Double' > ParamByName('sayi').AsInteger;

Yani burada ki hata benden kaynaklı!

Başka arkadaşlara tecrübe sağlar umarım.

Tekrar teşekkürler.

Saygılar.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MySQL - Sql-mode only_full_group_by hatası. hi_selamlar 5 1.682 25-12-2022, Saat: 10:43
Son Yorum: hi_selamlar
  MySQL Bağlantı Sorunu - MEB akıllı tahta Frrst 6 1.386 10-11-2022, Saat: 23:16
Son Yorum: mcuyan
  Mysql Farklı bir autoinc mcuyan 11 1.919 09-11-2022, Saat: 23:05
Son Yorum: mcuyan
  Delphi 7 MySql DAC Nasıl Kurulur mahone 1 604 08-10-2022, Saat: 22:09
Son Yorum: mcuyan
  mysql trigger subquery returns more than 1 row hatası cvheneburi 5 1.998 28-08-2022, Saat: 01:04
Son Yorum: cvheneburi



Konuyu Okuyanlar: 2 Ziyaretçi