Fórum Como fazer um while e insert apos o select no IbExpert #380834

06/07/2010

0

Olá pessoal,

estou querendo fazer assim no IbExpert....


Select * From Adm_Cad_Endereco E, Adm_Cad_Bairro B
where E.CodBairro = B.Codigo and (B.Codigo >= :Cod1) and (B.Codigo <= :Cod2)
order by B.Codigo



e ai apos o select rodar um while desse select e ai vai comparando....e dentro do while vou colocar um insert...
pois hoje eu faço isso tudo no delphi.....mas está demorando um pouco...qero mais agilidade....
Robson Morais

Robson Morais

Responder

Post mais votado

07/07/2010

você pode fazer numa única instrução:

Insert Into Adm_Cad_Cep (Cep, Logradouro, Numero, Bairro, CodCidade, Complemento)
Select E.Cep, E.Logradouro, E.Numero, E.Bairro, B.CodCidade, E.Complemento)
From Adm_Cad_Endereco E, Adm_Cad_Bairro B
where E.CodBairro = B.Codigo and (B.Codigo >= :Cod1) and (B.Codigo <= :Cod2)

outra forma é como o colega Daniel Tavares sugeriu, usando uma stored procedure:

create procedure CADENDERECO (
    cod1 integer,
    cod2 integer)
as
declare variable cep varchar(8);
declare variable logradouro varchar(80);
declare variable numero varchar(5);
declare variable bairro varchar(50);
declare variable codcidade integer;
declare variable complemento varchar(30);
begin
  for
    select E.Cep, E.Logradouro, E.Numero, B.Bairro, B.CodCidade, E.Complemento
    from Adm_Cad_Endereco E, Adm_Cad_Bairro B
    where E.CodBairro = B.Codigo and (B.Codigo >= :cod1) and (B.Codigo <= :cod2)
    order by B.Codigo
  into
    :cep, :logradouro, :Numero, :Bairro, :CodCidade, :Complemento
  do
    insert into Adm_Cad_Cep (Cep, Logradouro, Numero, Bairro, CodCidade, Complemento)
    values (:cep, :logradouro, :Numero, :Bairro, :CodCidade, :Complemento);
end

e, para executá-la:

EXECUTE PROCEDURE CADENDERECO(1, 1000)

note que em nenhum dos exemplos acima é passado um valor para o campo Codigo. para fazer desta forma esse campo deve estar como NOT NULL e ter um generator e uma trigger ligados à ele.

eis a instrução para criação do generator:

CREATE GENERATOR GEN_ADM_CAD_CEP_ID;

e da trigger:

CREATE OR ALTER TRIGGER ADM_CAD_CEP_BI FOR ADM_CAD_CEP
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.codigo is null) then
    new.codigo = gen_id(gen_adm_cad_cep_id,1);
end

note também que você não está fazendo qualquer verificação de existência do registro na tabela destino. isso não é perigoso? a cada vez que a stored procedure for executada, os registros serão multiplicados.




Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 1

Mais Posts

06/07/2010

Daniel Oliveira

vamo ver se eu entendo seu problema...

CRIE UMA STORED PROCEDURE

...
For Select * From Adm_Cad_Endereco E, Adm_Cad_Bairro B
    Where E.CodBairro = B.Codigo and (B.Codigo >= :Cod1) and (B.Codigo <= :Cod2)
    Order by B.Codigo
Into
  :nome
  :endereco
  :cidade
  etc
do
begin
/*faça o q for necessario aki, esse espaço sera executado em cada repeticao do for*/
end

...

espero ter ajudado
Responder

Gostei + 0

06/07/2010

Robson Morais

ixi cara....agora que fiquei maluco aqui....

você tem algum exemplo ai para me ajudar.......
vou explicar atraves do delphi como eu faço;..;;


faço um select.....


  with QryEnd do
    begin
      close;
      sql.Clear;
      sql.Add('Select * From Adm_Cad_Endereco E, Adm_Cad_Bairro B where E.CodBairro = B.Codigo and (B.Codigo >= :Cod1) and (B.Codigo <= :Cod2) order by B.Codigo');
      ParamByName('Cod1').AsString := Edit5.Text;
      ParamByName('Cod2').AsString := Edit6.Text;
      open;
    end;




e o que está dentro da IbQuery (QryEnd) quue obtem atraves do select eu faço esse procedimento para gravar.....



   while not QryEnd.Eof do
     begin

       Codigo := Codigo + 1;
       a := a + 1;
       with QryCep do
         begin
           close;
           sql.Clear;
           sql.Add('Insert Into Adm_Cad_Cep (Codigo, Cep, Logradouro, Numero, Bairro, CodCidade, Complemento) Values ('+
                   #39 + IntToStr(Codigo) + #39 +
                   ',' + #39 + QryEnd.FieldByName('Cep').AsString + #39 +
                   ',' + #39 + QryEnd.FieldByName('Logradouro').AsString + #39 +
                   ',' + #39 + QryEnd.FieldByName('Numero').AsString + #39 +
                   ',' + #39 + QryEnd.FieldByName('Bairro').AsString + #39 +
                   ',' + #39 + QryEnd.FieldByName('CodCidade').AsString + #39 +
                   ',' + #39 + QryEnd.FieldByName('Complemento').AsString + #39 + ')' );
           ExecSQL;
         end;

       QryEnd.Next;
     end;




ai eu vou gravando os dados que tive em outra tabela...

o problema meu é que está demorando demais para gravar isso atraves do delphi.....ai queria saber se eu fazendo um script no IbExpert nao vai ser melhor ??


e tbem não consegui fazer como procedure...alguém poderia me ajudar :::???
Responder

Gostei + 0

15/07/2010

Pedro Saraiva.

Programa com códigos fontes Ola pessoal, você programador que quer um aplicativo exemplo para fins comerciais, tenho uma dica, compre o WinPhar que vem com todos os códigos fontes e faça um programa baseado nele, sim ele também vêm com todos os componentes para instalar, voce além de ganhar um programa complidao, ganha tb os seus códigos fontes e seus componentes. O programa foi desenvolvido em Delphi 7 com banco de dados paradox, e custa apenas 20,00 reais
deem uma olhadinha ai no produto
http://produto.mercadolivre.com.br/MLB-149256966-winphar-2008-sistema-para-farmacias-e-drogarias-_JM
e ente em contato pelo e-mail pedroluissaraiva@yahoo.com.br.!  
Responder

Gostei + 0

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

Aceitar