Fórum Como fazer um while e insert apos o select no IbExpert #380834
06/07/2010
0
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
Curtir tópico
+ 0Post mais votado
07/07/2010
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
Gostei + 1
Mais Posts
06/07/2010
Daniel Oliveira
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
Gostei + 0
06/07/2010
Robson Morais
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 :::???
Gostei + 0
15/07/2010
Pedro Saraiva.
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.!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)