[firebase-br] Deveria retornar NULL mas não

Carlos H. Cantu listas em warmboot.com.br
Seg Jan 21 08:24:01 -03 2013


Se o select em TmpCb não retornar qualquer registro, então o "into" do
select não será executado, afinal, não houve registros recuperados.
Portanto, é sempre bom inicializar as variáveis antes.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

MR> Boas,

MR> Estou a usar o FB2.5+WIN7(+Delphi7), mas para o que me tras chega falar do
MR> FB2.5 segundo penso. É assim:

MR> Numa "Store Procedure" estou a ler um ficheiro ordenado por TipoRegisto +
MR> NoSocio, através de um cursor (While !Eof) e dentro deste tenho um segundo
MR> While coluna "Socio"=Variavel "WSocio" e !Eof durante o qual analiso: 
MR> Se coluna "StErro"='00'(S/Erro) carrego um ficheiro temporário senão actualizo
MR> o meu ficheiro de "Cobranças" assinalando apenas a coluna com o Status do erro
MR> (de 01-a-30).

MR> Porém, quando rebenta este 2.º ciclo(interno) faço 

MR> bloco-1.
MR>   WTotVlr=NULL;
MR>   WStErro=NULL;

MR> bloco-2.
MR>  Select Sum(TmpCb.Vlr), TmpCb.StErro From TmpCb Into :WTotVlr, :WStErro,
MR> seguido de:
MR>  
MR> bloco-3.
MR>    If (:WTotVlr>0) Then
MR>     begin
MR>       GeraRecibo...
MR>       If (Sucesso) Then
MR>        For Select TmpCb...
MR>         begin
MR>          UpDate Cobrancas Set...
MR>             
MR>         end 
MR>     end /* WTotVlr>0 */

MR> Ora, caso apanhe um único registo em Erro não chego a carregar qualquer
MR> registo no ficheiro Tmp. Então, ao executar o comando do bloco 2, pela lógica,
MR> acreditava que a variaveis  :WTotVlr e :WStErro fossem afectadas com NULL, mas
MR> não. 
MR> Depois de alguma luta percebi que o bloco 1 é obrigatório, porque se o
MR> ficheiro estiver vazio as variáveis não são reinicializadas.

MR> A minha questão é saber se isto é só assim no FB2.5 porque tanto quando me
MR> recordo no MS-Sql Server e PostgreSql, nestes casos, as variáveis são sempre
MR> reafectadas.

MR> Agradeço qualquer esclarecimento.

MR> Obrigado

MR> Mário





Mais detalhes sobre a lista de discussão lista