icaro_ 0 Denunciar post Postado Agosto 15, 2011 Olá boa tarde! Outro probleminha aqui,,hehe Bom vou fazer um insert em um banco de dados na tabela de clientes, porém estou com dificuldades em buscar o ultimo codigo do cliente,que é um auto-incremento. Minha duvida é, como buscar o ultimo codigo e colocar em uma variavel, Não sei se fui claro,qualquer coisa eu tento explicar melhor , desde já agradeço. Galera,fiz um teste aqui e retornou o valor esperado. ficou assim Qcadcli.close; Qcadcli.SQL.Clear; Qcadcli.SQL.Text:= 'select coalesce( max (cod_cli ),0 )from cliente'; Qcadcli.Open; codigo muito simples tava me matando hehe até + Compartilhar este post Link para o post Compartilhar em outros sites
leoc 0 Denunciar post Postado Agosto 24, 2011 É isso ai mesmo só não precisa do coalesce. Se você usou um componente Query para consultar o código, o retorno está nele mesmo, exemplo: qy.Close; qy.SQL.Text := 'SELECT (MAX(cod_cli) + 1) AS cod_cli FROM Cliente'; qy.Open; ShowMessage('Novo código: ' + IntToStr(qy.FieldByName('cod_cli').AsInteger); Compartilhar este post Link para o post Compartilhar em outros sites
EterNoEstudante 0 Denunciar post Postado Setembro 12, 2011 E para quem não pretende ter a tabela de Clientes aberta, ou pretende obter o código antes de impor a query de inserção de um novo cliente, também serviria o código: qy.Close; qy.SQL.Text := 'SELECT gen_ID(gn_cliente, 0) AS ultimo_cod_cli FROM RDB$Database'; qy.Open; ShowMessage('Último código: ' + IntToStr(qy.FieldByName('ultimo_cod_cli').AsString); Isso se o RDB for FireBird: "gen_id(" é a função que excita generators, "gn_cliente," é o generator de Id's para a tabela, "0)" é o fator de adição para geração de próximos Ids (e é zero pois que não queremos a alterar o conteúdo do generator agora, somente queremos saber o valor que lá está no momento. Se quiser o valor para o próximo código a ser usado, troque o zero por 1) e "RDB$Database" é a tabela de sistema que recebe queries órfãs contra o banco (o que em Oracle seria a "Dual"). Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Setembro 12, 2011 Boa dica :D Compartilhar este post Link para o post Compartilhar em outros sites
Leonardo Gazio 0 Denunciar post Postado Setembro 18, 2011 "É isso ai mesmo só não precisa do coalesce" Mas eu acho que sei porque ele tá usando o coalesce, porque quando a tabela tá vazia sem registro nenhum, em alguns bancos o max retorna null ainda que você dê max(campo) +1 . e "RDB$Database" é a tabela de sistema que recebe queries órfãs contra o banco (o que em Oracle seria a "Dual") E o "gen_ID(gn_cliente, 0)" seria "SEQUENCE.CURRVAL", no Oracle usamos os sequences, se quiser incrementar basta trocar o CURRVAL pelo NEXTVAL, mas eu particularmente não importa o banco que eu esteja usando prefiro automatizar esse procedimento dentro de um trigger, fazer dentro do código só se não tiver jeito mesmo, se estiver trabalhando com banco Access, ou outras tranqueiras que não permitem trabalhar as lógicas de negócios dentro do banco de dados... Compartilhar este post Link para o post Compartilhar em outros sites