Fórum Pegar numero do autoincremento no FB para gravar nas tabelas relacionadas.Como? #585707
11/09/2017
0
Tenho uma tabela trocaCheques e outra Cheques...Para cada transacao na tabela trocaCheques eu quero gravar varios cheques na tabela cheques.So que eu preciso pegar o valor novo do campo TrocaID pra gravar na tabela Cheques...Como eu faria isso se o valor de TrocaID so é gerado depois que eu gravar na tabela trocaCheques minha transacao? Se eu dou um append na tabela trocaCheque ele so gera o autoincremnt do FB depois que eu salvo a transacao e como eu faria pra gravar pra cada cheque que eu quiser gravar na tabela cheques?
eu estava dando um append e um post ja de cara no botao adicionar depois no botao salvar eu procurava por este registro que tinha sido inserido ao clicar em adicionar( eu inseria um texto e no botao salvar fazia um if locate ) mas pra trabalhar em rede nao funciona gera key violation se 2 pessoas tiverem inserindo dados.
como eu faria isso por favor?
obrigado
Eduardo Tavares
Curtir tópico
+ 0Post mais votado
11/09/2017
function InsertSQL: String;
begin
Result := 'INSERT INTO TROCACHEQUES (TROCAID, NUMEROCHEQUE, VALOR) VALUES (GEN_ID(ID_TROCACHEQUE), 1),
:NUMEROCHEQUE, :VALOR) RETURNING TROCAID';
end;
procedure InsertTrocaCheques;
var
Query: TSQLQuery;
IdTrocaCheque: Integer;
begin
Query := TSQLQuery.Create(nil);
try
Query.SQLConnection := SuaConexao; //sua conexão que estará definida de alguma forma
Query.SQL.Add(InsertSQL);
Query.ParamByName('NUMEROCHEQUE').AsString := '123456';
Query.ParamByName('VALOR').AsCurrency := 123,80;
Query.Open;
IdTrocaCheque := Query.FieldByName('TROCAID').AsInteger;
//Insira seus métodos de controles aqui pra trabalhar com o IdTrocaCheque
finally
Query.Close; //é bom fechar querys abertas mesmo que vá destruir o objeto na sequência
FreeAndNil(Query);
end;
end;
Não coloquei o restante do código inserindo na tabela CHEQUES por que acho que você irá entender o restante da lógica, no entanto, qualquer coisa estou a disposição, abraços.
Rafael Bosco
Gostei + 1
Mais Posts
11/09/2017
Eduardo Tavares
obrigado
Gostei + 0
11/09/2017
Eduardo Tavares
Gostei + 0
11/09/2017
Rafael Bosco
Você quer gravar primeiro na tabela TROCACHEQUES correto? Depois de gravado você precisa do campo ID desta tabela para gravar na tabela CHEQUES correto?
O meu exemplo faz justamente isso, ele da um INSERT na tabela TROCACHEQUES e já me retorna qual foi o ID deste insert (que com ele você vai utilizar para gravar na tabela CHEQUES).
A estrutura ficaria assim:
1. INSERT NA TABELA TROCACHEQUES RETORNANDO O ID.
2. INSERT NA TABELA CHEQUES COM O ID RETORNADO DO PASSO 1.
Gostei + 1
11/09/2017
Eduardo Jr
obrigado
Gostei + 0
11/09/2017
Eduardo Jr
Gostei + 0
11/09/2017
Eduardo Jr
With DM.sqlQuery1 do
Begin
SQL.Clear;
SQL.Add('INSERT INTO ENTRADAS(ENTRADA_ID,DETALHE_ENTRADA) VALUES(GEN_ID(GEN_ENTRADAS_ID,1),:DET_ENT) RETURNING ENTRADA_ID');
ParambyName('DET_ENT').AsString := 'INSERINDO';
Open;
End;
eID := DM.sqlQuery1.FieldByName('ENTRADA_ID').AsInteger;
Gostei + 0
11/09/2017
Eduardo Jr
Gostei + 0
12/09/2017
Rafael Bosco
Meu amigo, minha dica é você usar o FB 2.5, não só por causa do returning... o 1.5 está quase obsoleto, o 2.5 é mais seguro e há mais funcionalidades para você trabalhar com o seu DB.
Gostei + 1
12/09/2017
Eduardo Jr
obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)