Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ] delphiden procedure çağırma
#1
Arkadaşlar selamlar

Daha önce yazılmış olan konuları takip ederek delphi içinden procedure çağırma işlemini yapmaya çalıştım ama başarılı olmadım.
Mysql de yazılı olan procedure şu şekilde :

CREATE DEFINER=`root`@`localhost` PROCEDURE `SPHesaplama`(IN `IN_TAG_ADI` varchar(30),IN `IN_TARIH1` datetime,IN `IN_TARIH2` datetime)
BEGIN
SELECT max(deger) as maxdeger, min(deger) as mindeger, (max(deger) - min(deger)) as deger 
FROM tagverileri 
where tagadi= IN_TAG_ADI and (zaman between IN_TARIH1 and IN_TARIH2);
END;

Bunu mysql den çalıştırdığımda çağırma şeklim şu :

CALL SPHesaplama('ALUMINYUM_MUD_tP','2019-11-15 06:00:00','2019-11-15 17:00:00');

Delphi de normal olarak çağırdığım sql kodum şu şekilde :

dm.qrytemphesaplama.SQL.text :='SELECT max(deger) as maxdeger, min(deger) as mindeger, (max(deger) - min(deger)) as deger FROM tagverileri_detay where tagadi='''+tagadi+''' and zaman between '+tarih+'';

Bu kodu procedure den çağırma için yazmam gereken kod nasıl olmalıdır? şu şekilde yazdım olmadı.
dm.qrytemphesaplama.SQL.text :='CALL SPHesaplama(:tagadi,:tarih)';

Yardımlarınızı rica ederim.
Cevapla
#2
Merhaba,

Select * from SPHesaplama(:tagadi,:tarih)

bu sekilde dener misiniz
Cevapla
#3
(20-12-2019, Saat: 10:50)wiseman Adlı Kullanıcıdan Alıntı: Arkadaşlar selamlar

Daha önce yazılmış olan konuları takip ederek delphi içinden procedure çağırma işlemini yapmaya çalıştım ama başarılı olmadım.
Mysql de yazılı olan procedure şu şekilde :

CREATE DEFINER=`root`@`localhost` PROCEDURE `SPHesaplama`(IN `IN_TAG_ADI` varchar(30),IN `IN_TARIH1` datetime,IN `IN_TARIH2` datetime)
BEGIN
SELECT max(deger) as maxdeger, min(deger) as mindeger, (max(deger) - min(deger)) as deger 
FROM tagverileri 
where tagadi= IN_TAG_ADI and (zaman between IN_TARIH1 and IN_TARIH2);
END;

Bunu mysql den çalıştırdığımda çağırma şeklim şu :

CALL SPHesaplama('ALUMINYUM_MUD_tP','2019-11-15 06:00:00','2019-11-15 17:00:00');

Delphi de normal olarak çağırdığım sql kodum şu şekilde :

dm.qrytemphesaplama.SQL.text :='SELECT max(deger) as maxdeger, min(deger) as mindeger, (max(deger) - min(deger)) as deger FROM tagverileri_detay where tagadi='''+tagadi+''' and zaman between '+tarih+'';

Bu kodu procedure den çağırma için yazmam gereken kod nasıl olmalıdır? şu şekilde yazdım olmadı.
dm.qrytemphesaplama.SQL.text :='CALL SPHesaplama(:tagadi,:tarih)';

Yardımlarınızı rica ederim.

Merhabalar,

Deneme şansım şuan için yok ama aşağıdaki şekilde deneyin lütfen.
Hangi bileşen ile bağlantı sağlıyorsun.


dm.qrytemphesaplama.Close;
dm.qrytemphesaplama.SQL.text :='CALL SPHesaplama(:tagadi, :tarih1, :tarih2);';

dm.qrytemphesaplama.Params[0].DataType:=ftString;
dm.qrytemphesaplama.Params[1].DataType:=ftDateTime;
dm.qrytemphesaplama.Params[2].DataType:=ftDateTime;

dm.qrytemphesaplama.Params[0].AsString:='TAG ID GONDERİN';
dm.qrytemphesaplama.Params[1].AsDateTime:=Now-1;  <<- tarih1
dm.qrytemphesaplama.Params[2].AsDateTime:=Now+1;  <<- tarih2


dm.qrytemphesaplama.Open;



Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#4
(20-12-2019, Saat: 11:13)hi_selamlar Adlı Kullanıcıdan Alıntı:
(20-12-2019, Saat: 10:50)wiseman Adlı Kullanıcıdan Alıntı: Arkadaşlar selamlar

Daha önce yazılmış olan konuları takip ederek delphi içinden procedure çağırma işlemini yapmaya çalıştım ama başarılı olmadım.
Mysql de yazılı olan procedure şu şekilde :

CREATE DEFINER=`root`@`localhost` PROCEDURE `SPHesaplama`(IN `IN_TAG_ADI` varchar(30),IN `IN_TARIH1` datetime,IN `IN_TARIH2` datetime)
BEGIN
SELECT max(deger) as maxdeger, min(deger) as mindeger, (max(deger) - min(deger)) as deger 
FROM tagverileri 
where tagadi= IN_TAG_ADI and (zaman between IN_TARIH1 and IN_TARIH2);
END;

Bunu mysql den çalıştırdığımda çağırma şeklim şu :

CALL SPHesaplama('ALUMINYUM_MUD_tP','2019-11-15 06:00:00','2019-11-15 17:00:00');

Delphi de normal olarak çağırdığım sql kodum şu şekilde :

dm.qrytemphesaplama.SQL.text :='SELECT max(deger) as maxdeger, min(deger) as mindeger, (max(deger) - min(deger)) as deger FROM tagverileri_detay where tagadi='''+tagadi+''' and zaman between '+tarih+'';

Bu kodu procedure den çağırma için yazmam gereken kod nasıl olmalıdır? şu şekilde yazdım olmadı.
dm.qrytemphesaplama.SQL.text :='CALL SPHesaplama(:tagadi,:tarih)';

Yardımlarınızı rica ederim.

Merhabalar,

Deneme şansım şuan için yok ama aşağıdaki şekilde deneyin lütfen.
Hangi bileşen ile bağlantı sağlıyorsun.


dm.qrytemphesaplama.Close;
dm.qrytemphesaplama.SQL.text :='CALL SPHesaplama(:tagadi, :tarih1, :tarih2);';

dm.qrytemphesaplama.Params[0].DataType:=ftString;
dm.qrytemphesaplama.Params[1].DataType:=ftDateTime;
dm.qrytemphesaplama.Params[2].DataType:=ftDateTime;

dm.qrytemphesaplama.Params[0].AsString:='TAG ID GONDERİN';
dm.qrytemphesaplama.Params[1].AsDateTime:=Now-1;  <<- tarih1
dm.qrytemphesaplama.Params[2].AsDateTime:=Now+1;  <<- tarih2


dm.qrytemphesaplama.Open;



Kolay gelsin.

Firedac ile bağlantı sağlıyorum.
Cevapla
#5
(20-12-2019, Saat: 11:34)wiseman Adlı Kullanıcıdan Alıntı:
(20-12-2019, Saat: 11:13)hi_selamlar Adlı Kullanıcıdan Alıntı: Merhabalar,

Deneme şansım şuan için yok ama aşağıdaki şekilde deneyin lütfen.
Hangi bileşen ile bağlantı sağlıyorsun.


dm.qrytemphesaplama.Close;
dm.qrytemphesaplama.SQL.text :='CALL SPHesaplama(:tagadi, :tarih1, :tarih2);';

dm.qrytemphesaplama.Params[0].DataType:=ftString;
dm.qrytemphesaplama.Params[1].DataType:=ftDateTime;
dm.qrytemphesaplama.Params[2].DataType:=ftDateTime;

dm.qrytemphesaplama.Params[0].AsString:='TAG ID GONDERİN';
dm.qrytemphesaplama.Params[1].AsDateTime:=Now-1;  <<- tarih1
dm.qrytemphesaplama.Params[2].AsDateTime:=Now+1;  <<- tarih2


dm.qrytemphesaplama.Open;



Kolay gelsin.

Firedac ile bağlantı sağlıyorum.

Merhaba,

Yukarıda ki örneği denediniz mi?

FireDac kullanıyorsanız neden kendi bileşenini FDStoredProc kullanmıyorsunuz?

   


FDStoredProc1.StoredProcName := 'MY_PROC';
FDStoredProc1.Prepare;
FDStoredProc1.Params[0].Value := 100;
FDStoredProc1.Params[1].Value := 'audi';
FDStoredProc1.ExecProc;

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#6
selamlar. delphide sorun oluştuğu için yeniden kuruyorum. işlemler biter bitmez haber vereceğim. ilginize çok teşekkür ederim.
Cevapla
#7
tekrar selamlar
@hi_selamlar ın yazmış olduğu çözümü uygulayarak, FDStoredProc ekledim. Parametreleri gönderdim. Ama bundan çıkan output değerini delphi içinde bir text e, nasıl alacağımı bulamadım bir türlü. Sad
Cevapla
#8
(26-12-2019, Saat: 11:54)wiseman Adlı Kullanıcıdan Alıntı: tekrar selamlar
@hi_selamlar  ın yazmış olduğu çözümü uygulayarak, FDStoredProc ekledim. Parametreleri gönderdim. Ama bundan çıkan output değerini delphi içinde bir text e, nasıl alacağımı bulamadım bir türlü. Sad

Merhabalar,

Deneme imkanım yok şuan, aşağıdaki gibi bir kod çalışması gerekli.

Edit1.Text:=FDStoredProc1.FieldByName('maxdeger').AsString;

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  çözüldü-lazarusda md5 işlemi hk. sadikacar60 3 106 06-04-2020, Saat: 22:13
Son Yorum: ihalilcoban
  çözüldü-screenshot yapmak hk. sadikacar60 8 489 27-03-2020, Saat: 21:11
Son Yorum: sadikacar60
  çözüldü-IdTrivialFTP1 ve IdTrivialFTPServer1 kompenantları hk. sadikacar60 28 1.023 26-03-2020, Saat: 10:48
Son Yorum: Bay_Y
  [ÇÖZÜLDÜ-SOLVED] StringGrid Satır Taşıma(Move Row) 3ddark 7 378 23-03-2020, Saat: 13:08
Son Yorum: 3ddark
  ÇÖZÜLDÜ-random un istediğimz sayıdan başlaması mümkün mü? sadikacar60 7 433 16-03-2020, Saat: 23:31
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi