Fórum Parar While quando achar o registro e prosseguir para o proximo! #379959
22/06/2010
0
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
Curtir tópico
+ 0Posts
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;
Gostei + 0
22/06/2010
Robson Morais
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;
Gostei + 0
22/06/2010
Miguel Oliveira
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;
Gostei + 0
23/06/2010
Wilson Junior
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.
Gostei + 0
23/06/2010
Emerson Nascimento
não seria melhor ter um índice pelo campo Codigo e efetuar a busca diretamente?
Gostei + 0
23/06/2010
Robson Morais
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 ??
Gostei + 0
24/06/2010
Emerson Nascimento
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)