Ir para conteúdo
Fórum Script Brasil
  • 0

Query do MySQL mostra "memo" em troca do conteúdo correto.


paulobergo

Pergunta

Olá pessoal... Não intrepretem, por favor, como sendo um tópico exclusivamente para o Delphi (até poderia ser...)

Observei um problema em obter um resultado a partir de uma query usando BDE e ODBC MySQL.

No servidor, no banco MySQL 5.0.27, existe uma função que 'traduz' a situação de uma duplicata... A função recebe a data de vencimento da duplicata, a data da liquidação e a situação (liquidada ou não) e retorna:

- Se a duplicata não foi liquidada ainda, irá retornar

"vencida" se estiver atrasada,

"vence hoje" se estiver vencendo exatamente na data de hoje e

"a vencer" se vencerá de amanhã em diante...

- Se a duplicata foi liquidada, irá retornar, simplesmente, a data em que foi liquidada.

Então, é uma função que manipula datas e retorna sempre uma string (char)... A função é esta:

DROP FUNCTION IF EXISTS `MyDataPG`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `MyDataPG`(in_vencimento date, in_data_pg date, in_pago tinyint) RETURNS varchar(10) CHARSET latin1
    NO SQL
begin
  declare resultado varchar(10) default '';
  if in_pago=0 then
    if in_vencimento<now() then
      set resultado = 'vencida   ';
    else
      if in_vencimento=now() then
        set resultado = 'vence hoje';
      else
        set resultado = 'a vencer  ';
      end if;
    end if;
  else
    set resultado = cast(in_data_pg as char(10));
    set resultado = concat(substring(resultado, 9, 2), '/',
                           substring(resultado, 6, 2), '/',
                       substring(resultado, 1, 4));
  end if;
  return resultado;
end $$
DELIMITER;
Bom, tendo os campos vencimento e data_baixa como sendo do tipo Date e o campo pago sendo do tipo TinyInt, a query a seguir:
select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao
from conta_ar
where mydatapg(vencimento, data_baixa, pago)="vencida"

union

select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao
from conta_ar
where mydatapg(vencimento, data_baixa, pago)="vence hoje"

union

select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao
from conta_ar
where mydatapg(vencimento, data_baixa, pago)="a vencer"

union

select vencimento, data_baixa, pago, mydatapg(vencimento, data_baixa, pago) as situacao
from conta_ar
where pago=1
  and data_baixa between "2011/04/01" and "2011/04/05"
Irá retornar:
+------------+------------+------+------------+
| vencimento | data_baixa | pago | situacao   |
+------------+------------+------+------------+
| 2011-01-02 | 2011-01-02 |    0 | vencida    |
| 2011-01-01 | 2011-01-01 |    0 | vencida    |
| 2011-01-03 | 2011-01-03 |    0 | vencida    |
| 2011-01-04 | 2011-01-04 |    0 | vencida    |
| 2011-01-07 | 2011-01-07 |    0 | vencida    |
| 2011-01-10 | 2011-01-10 |    0 | vencida    |
| 2011-01-12 | 2011-01-12 |    0 | vencida    |
| 2011-01-13 | 2011-01-13 |    0 | vencida    |
| 2011-01-14 | 2011-01-14 |    0 | vencida    |
| 2011-04-14 | 2011-04-25 |    0 | vence hoje |
| 2011-04-28 | 2011-04-28 |    0 | a vencer   |
| 2011-04-29 | 2011-04-29 |    0 | a vencer   |
| 2011-04-30 | 2011-04-30 |    0 | a vencer   |
| 2011-04-26 | 2011-04-26 |    0 | a vencer   |
| 2011-04-27 | 2011-04-27 |    0 | a vencer   |
| 2011-04-04 | 2011-04-05 |    1 | 05/04/2011 |
| 2011-04-01 | 2011-04-02 |    1 | 02/04/2011 |
| 2011-03-19 | 2011-04-05 |    1 | 05/04/2011 |
| 2011-04-03 | 2011-04-05 |    1 | 05/04/2011 |
| 2011-04-02 | 2011-04-05 |    1 | 05/04/2011 |
| 2011-02-23 | 2011-04-02 |    1 | 02/04/2011 |
| 2011-03-23 | 2011-04-01 |    1 | 01/04/2011 |
| 2011-03-31 | 2011-04-01 |    1 | 01/04/2011 |
| 2011-04-14 | 2011-04-01 |    1 | 01/04/2011 |
| 2011-04-21 | 2011-04-05 |    1 | 05/04/2011 |
| 2011-03-31 | 2011-04-05 |    1 | 05/04/2011 |
| 2011-03-31 | 2011-04-02 |    1 | 02/04/2011 |
+------------+------------+------+------------+
Esta query vem funcionando desde que existe a versão 5.0 do MySQL... (nem sei precisar desde quando)... E sempre funcionou tanto via BDE/ODBC, localmente ou remotamente, e também pelo ZeosBDO, PHP, PHPMyAdmin, MySQLNavigator... sem problemas... Mas, desde terça feira, uma máquina, num universo de não sei tantas outras, passou a mostrar, no lugar da coluna da situação, a palavra (MEMO) em troca do conteúdo correto... Assim...

Clicando-se no campo memo exibido, aparece o conteúdo correto... O problema acontece somente nas conexões

feitas através da dupla BDE/ODBC Conector... e desinstalar/reinstalar ambos não resolveu...

Alguém já passou por isso ou viu algo similar?

Grato por qualquer colaboração...

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, 'paulobergo'

Eu uso o Delphi com MySQL.

Você definiu o campo situação como TEXT?

Se sim, tem como redefini-lo para varchar?

Você mudou o sistema operacional da máquina ou algo novo foi instalado?

Se sim, Já experimentou instalar uma versão mais nova do MyODBC?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...