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

Codigo Automatico


Curinga

Pergunta

Olá pessoal, sou eu mais uma vez!!!!!

é, eu sei, to enchendo, mas são duvidas que eu tenho ceteza que pra vocês são bem simples.

É o seguinte:

O programa que eu estou fazendo, é um programa simples de cadastro e busca de clientes.

Nele a pessoa informa o CODIGO, NOME, RG, CPF, enfim, um programa comum, quando eu criei a tabela, do tipo PARADOX, no campo CODIGO, eu coloquei ele como chave primaria, e coloquei ele do tipo +-(autoincrement), pra que o codigo seja gerado automaticamente.

Dessa forma ele gera automaticamente o CODIGO, porém, a primeira vez que você vai cadastrar ele não da codigo nenhum, ou seja o Codigo fica em branco, quando você clica em SALVAR, salva tudo e o Proximo codigo fica sendo o 1. Só que esse não é o principal problema, quando você limpa a tabela, pode ser através do Databasedesktop mesmo, e vai registra um novo usuario, ele começa da onde paro, vou dar um exemplo:

To la cadastrando:

Codigo: 1

Nome: João da Silva

Codigo: 2

Nome: José dos Santos

Codigo: 3

Nome: Domingos da Costa

Pois bem, vou la no Databasedesktop, edito minha tabela, e apago todo mundo, ou seja, zero ela, OK!!!

Quando eu entro no meu programa pra fazer novos cadastros, ao invés dele começar do 1, ele começa do 4, é como se ele não tivesse zerado minha tabela.

porque ela não começa do 1?

onde ta errado?, qual a melhor forma de fazer com que o programa gere automaticamente o CODIGO?

pessoal, desculpa a perturbação, mas eis aqui um grande fã de Delphi, mas que não entende muito do assunto.

Fico grato mais uma vez pela atenção, e pelo espaço dado a nós, leigos no assunto!!!!

Um abraço...

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Bom, tem um jeito mais complicado de fazer isso, do campo Código você tira o +- (autoincrement) e faz o autoincrement por código, ou seja. No programa, toda hora de adicionar um usuário você ve o valor do campo Código anterior do que você vai adicionar, se tiver em branco ( ou seja, não tem campo ) você coloca 1 no campo código, mas se não tiver em branco, você soma o numero que tem la com 1, dando assim o campo seguinte. beleza?? Tp, você usa SQL para entrada e retirada de dados, se sim responde aqui que eu te passo o código de como fazer isso (SQL) falou

Link para o comentário
Compartilhar em outros sites

  • 0

Bom eu criei uma tabela do tipo PARADOX pra testar direitinho as rotinas que eu vou te passar, a tabela chama clientes.db, tem dois campos Cli_Codigo(codigo, que é o q eu vo fazer o auto-increment manual, ele é tipo integer) e Cli_Nome ( nome do cliente):

Ai vai a rotina pra pegar o ultimo código:

Query1.close;
Query1.Sql.Clear;
Query1.Sql.Add('SELECT MAX(Cli_Codigo) FROM Clientes');
Query1.Open;
Com esses comandos acima eu pego o valor do ultimo campo código existente. Você pode executar esse código ao a pessoa entrar no formulario de cadastro e depois que ela fizer mais um cadastro ( bom isso fica do seu jeito); Bom, pra pegar o proximo campo código é fazer o seguinte:
IntToStr(Query1.fields[0].AsInteger) +1
Dando assim o proximo código, bom, vamos supor que eu tenha guardado ele em uma variavel(tipo integer), então:
UltimoCdg := IntToStr(Query1.fields[0].AsInteger) +1
Na hora de adicionar alguém no cadastro eu faço a seguinte rotina:
Query1.close;
Query1.Sql.Clear;
Query1.Sql.Add('INSERT INTO Clientes (Cli_Codigo,Cli_Nome) VALUES (:pCodigo, "NomeDaPessoaASerAdicionado") ');
Query1.ParamByName('pCodigo').AsInteger:=UltimoCdg;
Query1.ExecSQL;

Tai, falou, qualquer coisa é so perguntar

Link para o comentário
Compartilhar em outros sites

  • 0

Tenho algumas duvidas:

essa rotina por exemplo, onde eu coloco ela?

UltimoCdg := IntToStr(Query1.fields[0].AsInteger) +1

O q vem a ser esse UltimoCdg?, o q ele faz?

e esse aki?

Query1.close;

Query1.Sql.Clear;

Query1.Sql.Add('INSERT INTO Clientes (Cli_Codigo,Cli_Nome) VALUES (:pCodigo, "NomeDaPessoaASerAdicionado") ');

Query1.ParamByName('pCodigo').AsInteger:=UltimoCdg;

Query1.ExecSQL;

Devo substituir esses itens pelo que?

* pCodigo (o q coloco no lugar desse item?)

* "NomeDaPessoaASerAdicionado" (o q coloco no lugar desse item?)

valeu...

Link para o comentário
Compartilhar em outros sites

  • 0

Tp, é assim: Agora vo usa o exemplo com o seu banco de dados. De acordo com vc , sua tabela paradox tem os campos Código, Nome, RG, CPF:

...CODIGO, NOME, RG, CPF, enfim...
e vamos supor que o nome dela seja clientes. Para não esquecer o tipo dos campos:

CODIGO -> integer;

NOME -> alpha ( mesma coisa q string)

RG -> integer;

CPF -> integer;

Então vo manter os nomes dos campos como os acima:

Primeiro defino uma variavel global com o nome UltCdg do tipo integer:

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  UltCdg: Integer; //eis a variavel citada acima

implementation

{$R *.dfm}
Esta variavel vai servir pra mim colocar o valor do ultimo campo CODIGO +1. Ou seja com o comando SQL que eu vou executar abaixo, que vai ser quando a pessoa abrir o formulário. Esta rotina abaixo vai pegar da sua tabela paradox o ultimo valor do campo CODIGO, assim somando a mais um, eu tenho o valor do proximo campo CODIGO.
Query1.close;
Query1.Sql.Clear;
Query1.Sql.Add('SELECT MAX(CODIGO) FROM Clientes');
{com o comando SQl acima eu seleciono o ultimo valor do campo CODIGO
da tabela clientes}
Query1.Open;
UltCdg := IntToStr(Query1.fields[0].AsInteger) +1
{aqui eu defino a nossa variavel de tipo integer como o ultimo valor
do campo CODIGO e somando 1, ou seja, assim eu consigo o próximo
código a ser adicionado.
Se Não tiver nenhum cadastro anterior retornara 0. Que
somando a 1, dara 1 ou seja, o primeiro cadastro da tabela.
Se você cadastra 5 pessoas, vai ficar em ordem(1,2,3,4,5)
se você deletar, ele vai começar do zero novamente
Entende, so que por enquanto a variavel so ta definida, vamos
usa-la mais na frente para adicionar dados na tabela.
}
Vamos supor que você usou esta rotina no OnShow do form, Então ta esperano que cadastrem algum usuário Como você tem 4 Campos na sua tabela, mas só tres em que os usuários podem alterar ( NOME, RG, CPF ) Então o form vai ter uma label mostrando o código do cadastro ( o valor da variavel UltCdg ) e tres edits, uma pra cada campo e o principal uma botão para cadastrar. ta agora vamos na rotina do botão de cadastro: Sendo edit1 -> valor a ser adicionado ao campo NOME edit2 -> valor a ser adicionado ao campo RG edit3 -> valor a ser adicionado ao campo CPF
Query1.close;
Query1.Sql.Clear;
Query1.Sql.Add('INSERT INTO Clientes (CODIGO,NOME,RG,CPF) VALUES 
(:pCodigo, :pNome, :pRg, :pCpf) ');
//comando SQL para inserir
Query1.ParamByName('pCodigo').AsInteger:=UltCdg;
//aqui você define um tipo de um atalho SQl para o valor da variavel UltCdg
Query1.ParamByName('pNome').AsString:=Edit1.text;
//aqui você define um tipo de um atalho SQl para o edit1 ( nome )
Query1.ParamByName('pRg').AsInteger:=strtoint(Edit2.text);
//aqui você define um tipo de um atalho SQl para o edit2 ( rg )
Query1.ParamByName('pCpf').AsInteger:=strtoint(Edit3.text);
//aqui você define um tipo de um atalho SQl para o edit3 ( cpf )
Query1.ExecSQL;
//executa o codigo sql

Pronto, assim, acima, você adiciona os dados na sua PARADOX, mas existe outro modo de fazer isso sem a variavel, em vez de você mandar o ultimo valor do campo codigo pra uma variavel mande pra um label.

Link para o comentário
Compartilhar em outros sites

  • 0

Olha o erro que da dando:

o erro ta nessa linha

UltCdg := IntTostr(Query1.Fields[0].AsInteger)+1;

o erro é o seguinte:

[Error] Cadastro_U.pas(134): Incompatible types: 'String' and 'Integer'

e eu declarei a variavel UltCdg como você mando, do tipo Inteiro, se tira o IntToStr ele roda, porem da pau, da erro, acho q eu to fazendo alguma coisa errada!!!

Esses codigos que voce me passo são colocados em q evento?: Todos eles são no evento de inicialização do Form, ou não?

Desculpa o incomodo, mas a coisa ta dificil d+

Link para o comentário
Compartilhar em outros sites

  • 0

cara tem um jeito que eu uso e sempre da certo .....não sei se vale pra você ai.....

mais eu do um last na tabela e adiciono +1.....muito simples e facil de criar ......eu vo da uma olhada aki e te passo o codigo feito e detalhado beleza.......

falou e t+++++++++++++++++++++

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Curinga -

Consegui faze o codigo automatico, porem ainda tem o problema, quando eu zero minha tabela, ele continua do ultimo, e como eu faço, caso eu apague por exemplo um codigo q não esta no fim, mas sim no começo, da proxima vez q eu cadastrar, tem como ele ir nesse codigo q ficou aberto.

falow at +

Link para o comentário
Compartilhar em outros sites

  • 0

Cara eu tinha esse mesmo problema, pois enquanto estamos desenvolvendo o programa inserimos muitos registros na tabela para testar e quando terminamos o programa e limpamos a tabela ela não começa a contar de novo a partir do 1.

Bem cara não sei se você já conseguiu fazer o autoincremento via Delphi...

Mas caso você ainda queira usar o autoincrement do Database Desktop e gostaria que quando limpasse a tabela ela voltasse a marcar a aprtir do 1.

Bem ai vai a dica

Abra o database desktop

Abra sua tabela

Limpe todos os registros

Clique em RESTRUCTURE

Mude o campo do codigo para Numerico (Number)

Salve essa nova estrutura

Depois você vai em restructure de novo (na mesma tabela)

E volta o campo para Autoincrement (+-)

Salva sua tabela de novo com essa estrutura...

Pronto, sua tabela voltará a incrementar os códigos a partir do 1 de novo...

Agora não sei se tem uma maneira mais simples de fazer isso, essa foi a meneira que eu achei e que funcionou!!!!!

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...