Pegar numero do autoincremento no FB para gravar nas tabelas relacionadas.Como?
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
Post 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
Mais Posts
11/09/2017
Eduardo Tavares
obrigado
11/09/2017
Eduardo Tavares
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.
11/09/2017
Eduardo Jr
obrigado
11/09/2017
Eduardo Jr
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;
11/09/2017
Eduardo Jr
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.
12/09/2017
Eduardo Jr
obrigado
Clique aqui para fazer login e interagir na Comunidade :)