Repetir campos conforme pedido

Delphi

01/10/2005

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

Curtidas 0

Respostas

Beppe

Beppe

01/10/2005

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);


GOSTEI 0
Iniciante12345

Iniciante12345

01/10/2005

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.


GOSTEI 0
Bruno Belchior

Bruno Belchior

01/10/2005

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


GOSTEI 0
Iniciante12345

Iniciante12345

01/10/2005

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.


GOSTEI 0
Beppe

Beppe

01/10/2005

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.


GOSTEI 0
POSTAR