Ir para conteúdo
Fórum Script Brasil
  • 0

[resolvido] Fazer Autoincremento No Registro Pela Interface


mcsmarmcs

Pergunta

Alguém sabe como fazer um autoincremento pegando a informação do último registro e acrescentando +1.

Ex: Tenho um campo chamado ordem que é do tipo integer, preciso pegar o último registro desse campo e acrescentar +1. Mas não posso usar o MySQL pra fazer isso pois ele já está fazendo outro autoincremento nesta tabela. Preciso fazer isso na interface.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0
Ex: Tenho um campo chamado ordem que é do tipo integer, preciso pegar o último registro desse campo e acrescentar +1. Mas não posso usar o MySQL pra fazer isso pois ele já está fazendo outro autoincremento nesta tabela. Preciso fazer isso na interface.

mcsmarmcs, você pode fazer uma consulta nesta tabela pegando o MAX do campo e somando 1.

QryNumOrdem.SQL.Clear;
QryNumOrdem.SQL.Add('select MAX(ordem) ordem from nome_tabela');
QryNumOrdem.Open;
Edit1.Text := IntToStr(QryNumOrdem.FieldByName('ordem').AsInteger +1);

Mas, se este campo é incrementado automaticamente pelo banco, esse procedimento não é garantia de que será o valor que seu registro receberá ao ser gravado.

Vamos supor que dois usuários, cadastrando um novo item na tabela, ao mesmo tempo obtenham o código 1000 para mostrar em sua interface. O corre é que na hora que a informação for gravada, o primeiro que gravar irá receber o código 1000 (atribuído pelo banco) e o registro gravado pelo próximo usuário receberá o código 1001 (atribuído pelo banco) - o que é diferente do esperado (1000).

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Não estou conseguindo trabalhar com MAX.

O sistema pede outros campos também, mas não consigo resolver.

Estou usando MySQL, talvez os parâmetros sejam diferentes.

mcsmarmcs, hipótese improvável.

A sintax para uso do MAX, da forma proposta (apenas ele na cláusula SELECT), e exatamente esta para 99,99% dos bancos de dados. Apenas se houvessem outros campos, juntamente com a função de agregação - MAX, é que você deveria utilizar a sintax completa do GROUP BY. Veja documentação do MySQL (link), logo no início, na tabela tem um link para a função MAX() nesta condição.

O ideal seria você colocar aqui a mensagem exata que você recebe. Bem como a parte do código em que você monta a instrução.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

A mensagem de erro é: "Project Sistema.exe raised exception class EDatabaseError with message QRYfuturo: Field 'cod_empresa' not found".

O código está abaixo:

procedure TFRMfuturo.Button2Click(Sender: TObject);

begin

QRYfuturo.SQL.Clear;

QRYfuturo.SQL.Add('select MAX(ordem) ordem from futuro');

QRYfuturo.Open;

EDordem.Text := IntToStr(QRYfuturo.FieldByName('ordem').AsInteger +1);

end;

Link para o comentário
Compartilhar em outros sites

  • 0

"portas dos funfos..." essa foi boa Churc :)

Só completando o que você sugeriu, parece-me que o componente QRYfuturo tem outra aplicação no programa que não apenas ser utilizado para obter o MAX ou, por algum outro motivo, ela tem fields adicionados em design-time que não correspondem ao esperado.

Se a instrução utilizada (select max...) fosse adicionada em design-time, a adição dos fields deste TQuery resultaria apenas no field de nome Ordem - não é o caso. Dê uma verificada mcsmarmcs.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...