[firebase-br] For Select 2 Ciclos e o mesmo Ficheiro
Mário Reis
mariodosreyx em gmail.com
Dom Out 27 13:25:19 -03 2013
Bom dia Boa Gente,
Primeiro desculpem mas há dias que estou tentando postar em resposta à
susgetões e não aparece nada na lista; dai o novo POST
Estou tentando por em pratica a sugestão do Júlio. Em vez de usar o Declare
CURSOR usar o FOR Select....Do Begin End. Que uso em centenas de outras
situações mormente Descendo um Ficheiro Mestre, exemplificando:
For Select campos M.A, M.B, M.C From FicheiroMestre M Into :wA, :wB, :wC
Do
Begin
For Select campos D, F, G From FicheiroDetalhe D where D.D=:wA
Into :wD, :wF, :wG
Do
Begin
Execute qualquer coisa....
End
-- Quando rebenta o ciclo interior tudo bem por a seguir vem o
próximo registo
-- do FicheiroMestre e assim por diante...
-- Sem crise....
End
Agora, neste caso tenho na mesma 2 ciclos, um exterior e outro interior mas
ambos sobre o mesmo ficheiro. E, quando saio do "ciclo interior" o ponteiro
ainda está no primeiro registo do ciclo exterior, assim:
IN_LIMITE=3;
For
Select campos A, B, C From TabelaX X
Where X.A=:IN_BANCO_ID
ORDER BY A, B, C Into :wA, :wB, :wC
Do
Begin
Contador = 1;
For Select campos A, B, C From TabelaX X1
Where X1.A=:IN_BANCO_ID AND X1.B=:WB
Order By A, B, C Into :wX, :wY, :wZ
Do
Begin
IF (Contador < In_Limite) Then
SUSPEND -- Só retorna 3 linhas
Contador=Contador+1;
End
-- Aqui, quando rebenta o ciclo interior, já andou 12 Linhas/Registos
-- Porém Ciclo Exterior ainda estou no 1.º Registo da mesma TabelaX
-- como se resolve isto????
-- Tentei com um Select First 1 Skip :Icount A, B, C From Tabela X
mas SKIP não suporta parâmetros.
--
End
Diferente do que fazemos no Delphi com
While Not TabelaX.Eof Do
Begin
Contador:=1;
WAux:=CampoA
While ( (TabelaXCampoA.AsString=WAux) And Not TabelaX.Eof) Do
Begin
If (Contador <=3) Then
Do_My_Display;
TabelaX.Next;
Inc(Contador);
End;
// Aqui o registo do ciclo exterior já está no próximo mesmo que o
Contador vá em 10/12. Com o For Select... não se consegue o mesmo?
End
•Aqui, com no For Select ...exterior o ponteiro(registo) não mexe junto com
o do ciclo interior?!
É que só quero os 1.ºs 3...4...5 ou 6 registos de um conjunto de 10, 20 ou
30.
Terei sido claro na exposição da dificuldade?
É com efeito assim, conforme conclui, ou estarei a fazer algo de errado(?)
com os For Select...
Alguém mais experiente que eu em Firebird já passou por isto?
Como resolveu? Como se resolve e pode ajudar-me?
Obrigado.
Mais detalhes sobre a lista de discussão lista