GARANTIR DESCONTO

Fórum Parar While quando achar o registro e prosseguir para o proximo! #379959

22/06/2010

0

Pessoal estou fazendo um while e dentro dele eu verifico se o Codigo é igual ao CodBairro, isso por dentro de outro while, o que eu quero é que quando

 if QryBai.FieldByName('Codigo').AsInteger = QryEnd.FieldByName('CodBairro').AsInteger then

for igual ao outro parar o while do QryBai e ai partir para o proximo registro do QryEnd e ai voltar dentro do while do QryBai se ele achar o registro igual ele deve sair do while do QryBai e pular pra proxima linha do while do QryEnd e volta novamente no QryBai, sempre quando ele volta no QryBai ele começa do primeiro registro....estou precisando de ajuda nisso.....



  while not QryEnd.Eof do
    begin

      QryBai.First;

      while not QryBai.Eof do
        begin

          if QryBai.FieldByName('Codigo').AsInteger = QryEnd.FieldByName('CodBairro').AsInteger then
            begin

                with TblUniao do
                  begin
                    insert;
                    TblUniaoCep.AsString         := QryEnd.FieldByName('Cep').AsString;
                    TblUniaoLogradouro.AsString  := QryEnd.FieldByName('Logradouro').AsString;
                    TblUniaoNumero.AsString      := QryEnd.FieldByName('Numero').AsString;
                    TblUniaoBairro.AsString      := QryBai.FieldByName('Bairro').AsString;
                    TblUniaoComplemento.AsString := QryEnd.FieldByName('Complemento').AsString;
                    TblUniaoCodCidade.AsString   := QryBai.FieldByName('CodCidade').AsString;
                    post;
                  end;

            end;

          QryBai.Next;
        end;


      QryEnd.Next;
    end;
Robson Morais

Robson Morais

Responder

Posts

22/06/2010

Robson Morais

while not QryEnd.Eof do
    begin

      QryBai.First;

      while not QryBai.Eof do
        begin

          if QryBai.FieldByName('Codigo').AsInteger = QryEnd.FieldByName('CodBairro').AsInteger then
            begin

                with TblUniao do
                  begin
                    insert;
                    TblUniaoCep.AsString         := QryEnd.FieldByName('Cep').AsString;
                    TblUniaoLogradouro.AsString  := QryEnd.FieldByName('Logradouro').AsString;
                    TblUniaoNumero.AsString      := QryEnd.FieldByName('Numero').AsString;
                    TblUniaoBairro.AsString      := QryBai.FieldByName('Bairro').AsString;
                    TblUniaoComplemento.AsString := QryEnd.FieldByName('Complemento').AsString;
                    TblUniaoCodCidade.AsString   := QryBai.FieldByName('CodCidade').AsString;
                    post;
                  end;

            end;

          QryBai.Next;
        end;


      QryEnd.Next;
    end;

Responder

Gostei + 0

22/06/2010

Robson Morais

while not QryEnd.Eof do
    begin

      QryBai.First;

      while not QryBai.Eof do
        begin

          if QryBai.FieldByName('Codigo').AsInteger = QryEnd.FieldByName('CodBairro').AsInteger then
            begin

                with TblUniao do
                  begin
                    insert;
                    TblUniaoCep.AsString         := QryEnd.FieldByName('Cep').AsString;
                    TblUniaoLogradouro.AsString  := QryEnd.FieldByName('Logradouro').AsString;
                    TblUniaoNumero.AsString      := QryEnd.FieldByName('Numero').AsString;
                    TblUniaoBairro.AsString      := QryBai.FieldByName('Bairro').AsString;
                    TblUniaoComplemento.AsString := QryEnd.FieldByName('Complemento').AsString;
                    TblUniaoCodCidade.AsString   := QryBai.FieldByName('CodCidade').AsString;
                    post;
                  end;

            end;

          QryBai.Next;
        end;


      QryEnd.Next;
    end;
Responder

Gostei + 0

22/06/2010

Miguel Oliveira

Olá RobinhoCne   Veja se os códigos abaixo iram resolver seu problema.   Alterei seu código de duas maneiras você pode utilizar qual achar melhor   while not QryEnd.Eof do
    begin       QryBai.First;       while (not QryBai.Eof) and
            (QryBai.FieldByName('Codigo').AsInteger <> QryEnd.FieldByName('CodBairro').AsInteger)
      do
      begin
        with TblUniao do
        begin
          insert;
          TblUniaoCep.AsString         := QryEnd.FieldByName('Cep').AsString;
          TblUniaoLogradouro.AsString  := QryEnd.FieldByName('Logradouro').AsString;
          TblUniaoNumero.AsString      := QryEnd.FieldByName('Numero').AsString;
          TblUniaoBairro.AsString      := QryBai.FieldByName('Bairro').AsString;
          TblUniaoComplemento.AsString := QryEnd.FieldByName('Complemento').AsString;
          TblUniaoCodCidade.AsString   := QryBai.FieldByName('CodCidade').AsString;
          post;
        end;
        QryBai.Next;
      end;
      QryEnd.Next;
    end;
ou
  while not QryEnd.Eof do
    begin       QryBai.First;       while not QryBai.Eof do
        begin           if QryBai.FieldByName('Codigo').AsInteger = QryEnd.FieldByName('CodBairro').AsInteger then
            begin                 with TblUniao do
                  begin
                    insert;
                    TblUniaoCep.AsString         := QryEnd.FieldByName('Cep').AsString;
                    TblUniaoLogradouro.AsString  := QryEnd.FieldByName('Logradouro').AsString;
                    TblUniaoNumero.AsString      := QryEnd.FieldByName('Numero').AsString;
                    TblUniaoBairro.AsString      := QryBai.FieldByName('Bairro').AsString;
                    TblUniaoComplemento.AsString := QryEnd.FieldByName('Complemento').AsString;
                    TblUniaoCodCidade.AsString   := QryBai.FieldByName('CodCidade').AsString;
                    post;
                  end;
              Break ;
            end
            else 
              QryBai.Next;
        end;
      QryEnd.Next;
    end;
Responder

Gostei + 0

23/06/2010

Wilson Junior

Utilize o comando Break.

  while not QryEnd.Eof do
    begin

      QryBai.First;

      while not QryBai.Eof do
        begin

          if QryBai.FieldByName('Codigo').AsInteger = QryEnd.FieldByName('CodBairro').AsInteger then
            begin

                with TblUniao do
                  begin
                    insert;
                    TblUniaoCep.AsString         := QryEnd.FieldByName('Cep').AsString;
                    TblUniaoLogradouro.AsString  := QryEnd.FieldByName('Logradouro').AsString;
                    TblUniaoNumero.AsString      := QryEnd.FieldByName('Numero').AsString;
                    TblUniaoBairro.AsString      := QryBai.FieldByName('Bairro').AsString;
                    TblUniaoComplemento.AsString := QryEnd.FieldByName('Complemento').AsString;
                    TblUniaoCodCidade.AsString   := QryBai.FieldByName('CodCidade').AsString;
                    post;
                  end;

                Break; { Irá parar o segundo laço de repetição }
            end;

          QryBai.Next;
        end;


      QryEnd.Next;
    end;


Espero ter colaborado.
Responder

Gostei + 0

23/06/2010

Emerson Nascimento

colega, porque um while para varrer a tabela de bairros?

não seria melhor ter um índice pelo campo Codigo e efetuar a busca diretamente?

Responder

Gostei + 0

23/06/2010

Robson Morais

Então Emerson eu não sei fazer assim não, por isso que estou fazendo pelo while, mas mesmo assim ainda estou tendo demoras....para fazer o while......

porque é assim.....

achei o codigo na linha 1500 ai o proximo 1600...ai ele fica varrendo toda a linha ....

queria melhorar isso...

tipo sei que quando cheguei na linha 1600....nao vou ter mais codigo parecidos com ele...para fazer a uniao.....ai nao precisaria iniciar da linha 1 para chegar até na 1601.....entendeu ??


Responder

Gostei + 0

24/06/2010

Emerson Nascimento

você pode fazer de várias formas; duas delas:

assim:
while not QryEnd.Eof do
begin
  QryBai.First;

  QryBai.Close;
  QryBai.SQL.Text := 'SELECT * FROM BAIRROS WHERE CODIGO = ' + IntToStr(QryEnd.FieldByName('CodBairro').AsInteger);
  QryBai.Open;

  if not QryBai.IsEmpty then // encontrou o registro
  with TblUniao do
  begin
    insert;
    TblUniaoCep.AsString         := QryEnd.FieldByName('Cep').AsString;
    TblUniaoLogradouro.AsString  := QryEnd.FieldByName('Logradouro').AsString;
    TblUniaoNumero.AsString      := QryEnd.FieldByName('Numero').AsString;
    TblUniaoBairro.AsString      := QryBai.FieldByName('Bairro').AsString;
    TblUniaoComplemento.AsString := QryEnd.FieldByName('Complemento').AsString;
    TblUniaoCodCidade.AsString   := QryBai.FieldByName('CodCidade').AsString;
    post;
  end;

  QryEnd.Next;
end;


ou somente assim, eliminando qualquer varredura (while) nas tabelas:
  QryUniaoCep.Close;
  QryUniaoCep.SQL.Text :=
    'insert into UNIAO (CEP, LOGRADOURO, NUMERO, BAIRRO, COMPLEMENTO, CODCIDADE) '+
    'select log.CEP, log.LOGRADOURO, log.NUMERO, bai.BAIRRO, '+
    'log.COMPLEMENTO, bai.CODCIDADE '+
    'from ENDERECO log '+
    'inner join BAIRROS bai on bai.CODIGO = log.CODBAIRRO ';
  QryUniaoCep.Execute;

assim todos os registros serão incluídos simultâneamente e automaticamente. note que nesta última opção pode ser necessário adicionar uma condicional, para que não sejam incluídos registros repetidos.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar