user variables and union querys

Discussion of open issues, suggestions and bugs regarding MyDAC (Data Access Components for MySQL) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
bumblebee
Posts: 6
Joined: Thu 29 Sep 2005 11:36

user variables and union querys

Post by bumblebee » Thu 15 Dec 2005 08:08

hi...

i use Mydac 3.55.022 and Delphi 7...

my stored function is :

CREATE FUNCTION `func_SafBakiye`(borclu double, alacakli double,sifirla Bool ) RETURNS double
BEGIN
declare pSatirBakiyeTipi Int default 0;
declare pSafBakiye double;
declare pBA char;

if sifirla=1 then
set @safBakiye=0;
set @BA='.';
END IF;

if not isnull(borclu) then set pSatirBakiyeTipi=1;
elseif not isnull(alacakli) then set pSatirBakiyeTipi=2;
else
set pSatirBakiyeTipi=0;
end if;


set @pi=psatirbakiyetipi;

if pSatirBakiyeTipi=1 then set pSafBakiye=ifnull(@SafBakiye,0)+ifnull(borclu,0)-ifnull(alacakli,0);end if;
if pSatirBakiyeTipi=2 then set pSafBakiye=ifnull(@SafBakiye,0)-ifnull(alacakli,0)+ifnull(borclu,0);end if;

set @SafBakiye=pSafBakiye;
set @SafBakiye=Cast(@SafBakiye as decimal(20,10));

case sign(@SafBakiye)
when 1 then set pBA='B';
when -1 then set pBA='A';
when 0 then set pBA='.';
end case;
set @BA=pBA;
return pSafBakiye;

END;

first query is :

select cari_id, entegrasyon.entegrasyon_id,entegrasyon.evraktarihi, evrakturu.evrakturu, entegrasyon.evrakno, entegrasyon.aciklama,entegrasyon.doviz_id, entegrasyon.doviz,entegrasyon.borc, entegrasyon.alacak, abs(if (STRCMP(@cari_id,CariDetay.cari_id), func_SafBakiye(borc,alacak,1),func_SafBakiye(borc,alacak,0))) as Bakiye, @BA as BA,
abs(if (STRCMP(@cari_id,CariDetay.cari_id), entegrasyon.tip_id, entegrasyon.uygulanacakkur, entegrasyon.kullaniciadi, entegrasyon.ozelislemkodu1_id, entegrasyon.ozelislemkodu2_id, vadetarihi, @cari_id:=caridetay.cari_id from caridetay inner join entegrasyon force index (inxBakiyesiralama) On (caridetay.entegrasyon_id=entegrasyon.entegrasyon_id) left join geneldb.evrakturu On (entegrasyon.evrakturu_id=evrakturu.evrakturu_id) where (Entegrasyon.evraktarihi between '2005-1-1' and '2005-12-31') And (CariDetay.cari_id = '009')

second query is :

select cari_id, entegrasyon.entegrasyon_id,entegrasyon.evraktarihi, evrakturu.evrakturu, entegrasyon.evrakno, entegrasyon.aciklama,entegrasyon.doviz_id, entegrasyon.doviz,entegrasyon.borc, entegrasyon.alacak, abs(if (STRCMP(@cari_id,CariDetay.cari_id), func_SafBakiye(borc,alacak,1),func_SafBakiye(borc,alacak,0))) as Bakiye, @BA as BA,
abs(if (STRCMP(@cari_id,CariDetay.cari_id), entegrasyon.tip_id, entegrasyon.uygulanacakkur, entegrasyon.kullaniciadi, entegrasyon.ozelislemkodu1_id, entegrasyon.ozelislemkodu2_id, vadetarihi, @cari_id:=caridetay.cari_id from caridetay inner join entegrasyon force index (inxBakiyesiralama) On (caridetay.entegrasyon_id=entegrasyon.entegrasyon_id) left join geneldb.evrakturu On (entegrasyon.evrakturu_id=evrakturu.evrakturu_id) where (Entegrasyon.evraktarihi between '2005-1-1' and '2005-12-31') And (CariDetay.cari_id = '001')
union
select cari_id, entegrasyon.entegrasyon_id,entegrasyon.evraktarihi, evrakturu.evrakturu, entegrasyon.evrakno, entegrasyon.aciklama,entegrasyon.doviz_id, entegrasyon.doviz,entegrasyon.borc, entegrasyon.alacak, abs(if (STRCMP(@cari_id,CariDetay.cari_id), func_SafBakiye(borc,alacak,1),func_SafBakiye(borc,alacak,0))) as Bakiye, @BA as BA,
abs(if (STRCMP(@cari_id,CariDetay.cari_id), entegrasyon.tip_id, entegrasyon.uygulanacakkur, entegrasyon.kullaniciadi, entegrasyon.ozelislemkodu1_id, entegrasyon.ozelislemkodu2_id, vadetarihi, @cari_id:=caridetay.cari_id from caridetay inner join entegrasyon force index (inxBakiyesiralama) On (caridetay.entegrasyon_id=entegrasyon.entegrasyon_id) left join geneldb.evrakturu On (entegrasyon.evrakturu_id=evrakturu.evrakturu_id) where (Entegrasyon.evraktarihi between '2005-1-1' and '2005-12-31') And (CariDetay.cari_id = '009')


@BA is my user variable.

when i run first query, @BA variable field DataType is ftString,
when i run second query, @BA variable field DataType is ftMemo.

and delphi throw exception "type mismatch for field 'BA' expecting : Memo actual : string" or "type mismatch for field 'BA' expecting : String actual : Memo..."

@BA variable is char data... But when i run union query (second query)
is @BA variable datatype is or ...

what i do?

Thanks for ALL...

Ikar
Posts: 1693
Joined: Thu 28 Oct 2004 13:56

Post by Ikar » Thu 15 Dec 2005 14:50

Try to change LongStrings property value. If problem persists then try converting explicitly this value to required type.

bumblebee
Posts: 6
Joined: Thu 29 Sep 2005 11:36

Post by bumblebee » Thu 15 Dec 2005 15:34

thanks Ikar...

that's OK... :)

Ikar
Posts: 1693
Joined: Thu 28 Oct 2004 13:56

Post by Ikar » Fri 16 Dec 2005 09:47

Have you tried to convert explicitly?

Post Reply