[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