[firebase-br] SP travando

Kleber Caneva kdcc em terra.com.br
Ter Set 23 17:25:51 -03 2008


Agora entendi...

A um bom tempo atrás peguei um tb em Dialeto 1 e BDE....Converti, mas até 
hoje tenho pesadelos com essa migração..rs

[]´s

Kléber Caneva

----- Original Message ----- 
From: "Kelver Merlotti" <kmerlotti em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, September 23, 2008 5:12 PM
Subject: Re: [firebase-br] SP travando


herança... "herdei" um sistema pra tomar conta e nem me arrisco a
migrar a base nessa altura do campeonato.. rsrs
é mais fácil lhe dar com as limitações do dialeto do que arriscar a
mudança.. :-)
Abraços!

2008/9/23 Kleber Caneva <kdcc em terra.com.br>:
> Só por curiosidade, porque você está usando o Dilateo 1 ?
>
> []´s
>
> Kléber Caneva
>
> ----- Original Message -----
> From: "Kelver Merlotti" <kmerlotti em gmail.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Tuesday, September 23, 2008 3:22 PM
> Subject: Re: [firebase-br] SP travando
>
>
> Salve galera.. a solução foi a seguinte:
>
> SleepUdf.dll -> feita em delphi
> -- #####
> function DoSleep(var i: Integer): Integer; cdecl; export;
> begin
>  try
>    Sleep(i);
>  finally
>    result := 0;
>  end;
> end;
>
> Exports
>  DoSleep;
> -- #####
>
> No banco:
> -- #####
> DECLARE EXTERNAL FUNCTION DOSLEEP
>    INTEGER
> RETURNS INTEGER BY VALUE
> ENTRY_POINT 'DoSleep' MODULE_NAME 'SleepUdf'
> -- #####
>
> Dessa maneira, agora eu consigo dentro da minha procedure aguardar N
> segundos antes de continuar. E pra confirmar a sobre o retorno do
> CURRENT_TIMESTAMP ou do CAST('NOW' as TIMESTAMP) dentro de uma
> procedure, fiz o seguinte teste:
>
> CREATE PROCEDURE PROC_TESTE_SLEEP
> returns (
>    endnow date,
>    endtime date)
> as
> declare variable i integer;
> begin
>  I = 0;
>  WHILE (I < 10) DO
>  BEGIN
>    ENDTIME = CURRENT_TIMESTAMP;
>    ENDNOW  = CAST('NOW' AS TIMESTAMP);
>    I = I + 1;
>    DOSLEEP(1000);
>    SUSPEND;
>  END
>  SUSPEND;
> end
>
> Ao executá-la, tive o seguinte retorno em 10 segundos:
>
> ENDTIME                 ENDNOW
> 23/09/2008 15:27:17 23/09/2008 15:27:17
> 23/09/2008 15:27:17 23/09/2008 15:27:18
> 23/09/2008 15:27:17 23/09/2008 15:27:19
> 23/09/2008 15:27:17 23/09/2008 15:27:20
> 23/09/2008 15:27:17 23/09/2008 15:27:21
> 23/09/2008 15:27:17 23/09/2008 15:27:22
> 23/09/2008 15:27:17 23/09/2008 15:27:23
> 23/09/2008 15:27:17 23/09/2008 15:27:24
> 23/09/2008 15:27:17 23/09/2008 15:27:25
> 23/09/2008 15:27:17 23/09/2008 15:27:26
> 23/09/2008 15:27:17 23/09/2008 15:27:26
>
> Conclusão: Conforme nossos amigos Adriano e Eduardo falaram,
> CAST('NOW' AS TIMESTAMP) retornou o horário correto de cada instante
> em que foi chamado, já o CURRENT_TIMESTAMP retornou em todos os
> momentos o horário em que a SP foi disparada.
>
> Só pra complementar, o ambiente é Windows, com FB21 e BD no dialeto 1.
> Fica aí a dica.
>
> Obrigado a todos e um forte abraço!!
>
> 2008/9/23 Eduardo Pelizzari de Andrade <eduardoandrade em persoft.com.br>:
>> mas continua com problema, inserindo os parentes e usando o 'now'?
>>
>> Se continuar com problema, depure ele da seguinte forma, crie uma
>> tabela, com os campos que estão sendo comparados e faça um insert a cada
>> loop. Adicione um contador e coloque ele no teste do while de forma a
>> garantir a saída do loop e analise o resultado da tabela.
>>
>> Eduardo Pelizzari de Andrade
>> Persoft Softwares Aplicativos
>>
>>
>>
>>
>> Kelver Merlotti escreveu:
>>> boa Edu.. pelos testes que fiz, não houve problemas até então em usar
>>> o 24/60/60, até porque são os mesmos operadores e possuem a mesma
>>> precedência. De qualquer forma, é sempre bom evitar surpresas..
>>> adotarei a técnica dos parenteses..
>>> obrigado e até mais!!
>>>
>>> 2008/9/23 Eduardo Pelizzari de Andrade <eduardoandrade em persoft.com.br>:
>>>
>>>> kelver, Eu não tenho certeza como será calculado 1/24/60/60, se ele 
>>>> fará
>>>> o calculo da esquerda para direita ou da direita para a esquerda, isto
>>>> faria diferença, experimente usar 1 / (24*360) e como sugerio o magno
>>>> tente cast('now' as timestamp) no lugar de current_timestamp.
>>>>
>>>> Eduardo Pelizzari de Andrade
>>>> Persoft Softwares Aplicativos
>>>>
>>>>
>>>>
>>>>
>>>> Kelver Merlotti escreveu:
>>>>
>>>>> captei.. valew!!
>>>>> to trabalhando numa solução aqui e assim que terminar compartilho com 
>>>>> a
>>>>> galera..
>>>>> abraços!
>>>>>
>>>>> 2008/9/23 Adriano dos Santos Fernandes <adrianosf em uol.com.br>:
>>>>>
>>>>>
>>>>>> Kelver Merlotti escreveu:
>>>>>>
>>>>>>
>>>>>>> Realmente Eduardo, da primeira forma não funcionaria, mas conforme
>>>>>>> postei novamente - já corrigido - ainda não funcionou:
>>>>>>>
>>>>>>> Magno.. fiz como o sugerido e infelizmente continua travando se
>>>>>>> executo ela via select.. o fb para de responder.. depurando ela roda
>>>>>>> normalex! já num select * from mysleep(10000) ela nunca mais
>>>>>>> retorna..
>>>>>>> Veja como ficou:
>>>>>>>
>>>>>>> CREATE PROCEDURE MYSLEEP (
>>>>>>>    ms integer)
>>>>>>> returns (
>>>>>>>    endtime date)
>>>>>>> as
>>>>>>> declare variable tmp date;
>>>>>>> begin
>>>>>>>  ENDTIME = CURRENT_TIMESTAMP;
>>>>>>>  TMP = ENDTIME + (MS / 1000) * (1/24/60/60);
>>>>>>>  WHILE (ENDTIME < TMP) DO
>>>>>>>    ENDTIME = CURRENT_TIMESTAMP;
>>>>>>>
>>>>>>>
>>>>>> De acordo com o padrão SQL, CURRENT_TIMESTAMP deve retornar o horário
>>>>>> que a procedure foi iniciada. E é por isso o loop infinito.
>>>>>>
>>>>>> Achei que a constante TIMESTAMP 'NOW' resolveria o problema mas 
>>>>>> parece
>>>>>> que não. Acho que vc vai precisar de uma UDF que retorne a hora real
>>>>>> atual.
>>>>>>
>>>>>>
>>>>>> Adriano
>>>>>>
>>>>>>
>>>>>> ______________________________________________
>>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>>
>>>>> No virus found in this incoming message.
>>>>> Checked by AVG - http://www.avg.com
>>>>> Version: 8.0.169 / Virus Database: 270.7.1/1686 - Release Date:
>>>>> 23/09/2008 07:38
>>>>>
>>>>>
>>>>>
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>>
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>>
>>> No virus found in this incoming message.
>>> Checked by AVG - http://www.avg.com
>>> Version: 8.0.169 / Virus Database: 270.7.1/1686 - Release Date:
>>> 23/09/2008 07:38
>>>
>>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>
>
>
> --
> Kelver Merlotti
> Coordenador Editorial do Portal www.ActiveDelphi.com.br
> Contato: kelver em activedelphi.com.br
> Google: kmerlotti em gmail.com
> Msn: kmerlotti em hotmail.com
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> E-mail verificado pelo Terra Anti-Spam.
> Para classificar esta mensagem como spam ou não spam, visite
> http://mail.terra.com.br/cgi-bin/reportspam.cgi?+_d=SCY0NDU0NzM0I3Blcm0hdGVycmEmMSwxMjIyMTk0MjA0LjYxMjQzMy44MTM1LnRyaWJ1bmUudGVycmEuY29tLDk4NzY=
> Verifique periodicamente a pasta Spam para garantir que apenas mensagens
> indesejadas sejam classificadas como Spam.
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Kelver Merlotti
Coordenador Editorial do Portal www.ActiveDelphi.com.br
Contato: kelver em activedelphi.com.br
Google: kmerlotti em gmail.com
Msn: kmerlotti em hotmail.com

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa

E-mail verificado pelo Terra Anti-Spam.
Para classificar esta mensagem como spam ou não spam, visite
http://mail.terra.com.br/cgi-bin/reportspam.cgi?+_d=SCY0NDU0NzM0I3Blcm0hdGVycmEmMSwxMjIyMjAwODIwLjc5NTkyMC40NzgyLmJvcHJlLnRlcnJhLmNvbSwxMjAyOA==
Verifique periodicamente a pasta Spam para garantir que apenas mensagens
indesejadas sejam classificadas como Spam.






Mais detalhes sobre a lista de discussão lista