Fórum Repetir campos conforme pedido #298046

01/10/2005

0

Tenho um formulário de cadastro e coloquei uma edit chamada, quantidade. Por exemplo, se ele dizer 4 na edit de quantidade, terá que repetir aquele cadastro 4 vezes com todas informações iguais apenas mudando o código que é autoincremento (através do generator).

Bom, uso firebird, palheta interbase, usando querys.


Obrigado


Iniciante12345

Iniciante12345

Responder

Posts

01/10/2005

Beppe

Uma solução:

for I := 1 to Quantidade - 1 do
begin
  INSERT INTO Cadastro
      SELECT * FROM Cadastro WHERE Codigo = gen_id(Gerador, 0)
end;


Assumindo que Cadastro possui uma trigger after insert que sempre seta o campo Codigo = gen_id(Gerador, 1);


Responder

Gostei + 0

19/10/2005

Iniciante12345

Não consegui usar o código, porque de certo o Delphi não aceita em uma unit o código:

INSERT INTO Cadastro
SELECT * FROM Cadastro WHERE Codigo = gen_id(Gerador, 0)


Onde tenho que usar esse código que me passaram? Há outra forma de fazer o que quero? Por favor, me ajudem com os passos certos.

Agradeço.


Responder

Gostei + 0

19/10/2005

Bruno Belchior

mas esse código q o amigo passou vai ter de ser inserido em uma Query e não diretamente no código...


Responder

Gostei + 0

20/10/2005

Iniciante12345

Uhm. Sim. Aí, eu tenho que colocar ele numa Query? E como eu posso criar essa trigger? Quais os passos? Eu preciso dar um comando no código fonte unit pra chamar o código da Query (SQL né)?

Obrigado. Grato.


Responder

Gostei + 0

22/10/2005

Beppe

Execute isto no banco:
set term ^ ;

create generator GEN_Cadastro ^

create trigger TRG_CadastroAfterInsert for Cadastro as
begin
    new.Codigo = gen_id(GEN_Cadastro, 1);
end;


Insira isto no seu programa:
Query.SQL.Text := ´select gen_id(GEN_Cadastro, 0) from RDB$DATABASE´;
Query.Open;
ID := Query.Fields[0].AsInteger;
Query.Close;

Query.SQL.Text := ´INSERT INTO Cadastro SELECT * FROM Cadastro WHERE Codigo = ´ + IntToStr(ID);
for I := 1 to Quantidade - 1 do
  Query.ExecSQL;


Depois de escrever isto, pensei ser mais interessante usar uma tabela de ´lançamento´ para facilitar o processo. Mas tente isto e repasse seus resultados.


Responder

Gostei + 0

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

Aceitar