Queryde kendi fonksiyonumu nasıl kullanabilirim

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mmg
Üye
Mesajlar: 120
Kayıt: 20 Haz 2014 12:47

Queryde kendi fonksiyonumu nasıl kullanabilirim

Mesaj gönderen mmg »

Merhaba,

Update queryde kendi yazdığım fonksiyonu kullanmak istiyorum. SQL Stringi bir türlü doğru şekilde yazamadım, yardımcı olabilir misiniz.
Birinci kod blok çalışan mevcut kod bloğu. Ben ikinci kod blokta görüldüğü şekilde MyRound fonksiyonunu queryde kullanmak istiyorum. Ben MyRound fonksiyonumu kullanabilmek için bir çok yol denedim hepsinde hata aldım, ya derlerken ya da çalışma anında. Bu nedenle yazdığım kodları paylaşmadım sadece ikinci kod blokta görüldüğü şekilde bir query çalıştırmak istiyorum. Tablodaki HS_B ve HS_A alanlarının üzerine madde tablosundan gelen değerleri ekleyerek bu toplamı da kendi round fonksiyonumu kullanarak tabloya update etmek istiyorum.

Delphi 10.2, MSSQL EXPRESS ve ADO Connection kullanıyorum.

Kod: Tümünü seç

TB_FISBASLIK.Close;
TB_FISBASLIK.Sql.Clear;
TB_FISBASLIK.Sql.Add( 'UPDATE FISBASLIK SET HS_B= (HS_B + :vBORC),HS_A= (HS_A + :vALACAK)');
TB_FISBASLIK.Sql.Add( 'WHERE HS_NO=:vHS_NO');
TB_FISBASLIK.Parameters.ParamByName('vHS_NO').value:= TB_FISMADDEHS_NO.Value;
TB_FISBASLIK.Parameters.ParamByName('vBORC').DataType:= ftfloat;
TB_FISBASLIK.Parameters.ParamByName('vBORC').Value:= TB_FISMADDEBORC.Value;
TB_FISBASLIK.Parameters.ParamByName('vALACAK').DataType:= ftfloat;
TB_FISBASLIK.Parameters.ParamByName('vALACAK').Value:= TB_FISMADDEALACAK.Value;
TB_FISBASLIK.ExecSql;

Kod: Tümünü seç

TB_FISBASLIK.Close;
TB_FISBASLIK.Sql.Clear;
TB_FISBASLIK.Sql.Add( 'UPDATE FISBASLIK SET HS_B= MyRound(HS_B + :vBORC,2),HS_A= MyRound(HS_A + :vALACAK,2)');
TB_FISBASLIK.Sql.Add( 'WHERE HS_NO=:vHS_NO');
TB_FISBASLIK.Parameters.ParamByName('vHS_NO').value:= TB_FISMADDEHS_NO.Value;
TB_FISBASLIK.Parameters.ParamByName('vBORC').DataType:= ftfloat;
TB_FISBASLIK.Parameters.ParamByName('vBORC').Value:= TB_FISMADDEBORC.Value;
TB_FISBASLIK.Parameters.ParamByName('vALACAK').DataType:= ftfloat;
TB_FISBASLIK.Parameters.ParamByName('vALACAK').Value:= TB_FISMADDEALACAK.Value;
TB_FISBASLIK.ExecSql;
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Queryde kendi fonksiyonumu nasıl kullanabilirim

Mesaj gönderen mussimsek »

Merhaba,

Teorik olarak SQL Management Studio'da çalıştırabildiğiniz her şeyi, AdoQuery'de de çalıştırabilirsiniz. Biz pek çok fonksiyon kullanıyoruz.

Ancak kullanım şeklimiz parametrik değil, direk AdoQuery içine gömüyoruz.

Kod: Tümünü seç

TB_FISBASLIK.Sql.Add( 'UPDATE FISBASLIK SET HS_B= MyRound(HS_B +'+TB_FISMADDEBORC.AsString+' ,2),HS_A= MyRound(HS_A + '+TB_FISMADDEALACAK.AsString+',2)');
gibi. Bir denemenizde fayda var.

2. bir yol, bu update cümlesini Stored procedure yapıp, ona parametre geçerek çalıştırabilirsiniz. Daha esnek, daha hızlı, daha kolay olur.

Kolay gelsin.
mmg
Üye
Mesajlar: 120
Kayıt: 20 Haz 2014 12:47

Re: Queryde kendi fonksiyonumu nasıl kullanabilirim

Mesaj gönderen mmg »

Merhaba,

Denememi önerdiğiniz 1. yol maalesef hata veriyor. Hatayı aşağıda paylaşıyorum. Stored procedure hiç çalışmadım fakat deneyeceğim.

"MyRound" is not recognized built-in function name
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Queryde kendi fonksiyonumu nasıl kullanabilirim

Mesaj gönderen mussimsek »

Merhaba,

Hocam bu tarz durumlarda en güzeli, kodu önce management studio'da direk denemek. Oluşan kodu Showmessage ile ekrana basın. Ctrl + C ile kopyalayıp, Management Studio'da deneyin. Çalışıp, çalışmadığına bir bakın. Duruma göre devam edersiniz.

Bir de bağlandığınız veritabanını kontrol edin. "MyRound" fonksiyonunu bulamıyor da olabilir.

Kolay gelsin.
Cevapla