Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

admendes

Insert com contador

Recommended Posts

Bom dia pessoal, segue a minha duvida:

 

Tenho uma tabela sms_form nela tenho o id_form e int_numero(numero do relatorio), que deve ser gerado igual ao id_form, estava lendo e vi que não posso ter 2 chaves primarias na mesma tabela e também não consigo deixar esse campo auto_increment, alguem tem uma ideia se tem como fazer um contador para que o int_numero seja igual ao id_form sempre?

desde ja agradecido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não disse qual o banco de dados está utilizando. Se você MySql claro que tem sim (e acredito que todos os bancos aceitem criar mais de uma chave primária.

 

DROP TABLE IF EXISTS acrescimos;
create table acrescimos(
   codigo int not null auto_increment,
   acrescimo varchar(80),
   status char(1) not null,
   primary key(codigo,staus));

Onde codigo e status são chaves primárias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo, eu uso Mysql, não esta aceitando o autoincremento o campo esta como INT e não VARCHAR tem alguma coisa a ver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo sabendo disso tudo tem como fazer essa função que o contador INT_NUMERO seja sempre igual ao IF_FORM abraçosssss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que no script que te passei o campo codigo é int auto increment e o status é char. Você não está esquecendo de colocar NOT NULL nos campos que são PK (chave primária)?

 

Se sim, passa o script que você está tentando criar a tabela.

 

Cara, não estou entendendo uma coisa, porque na mesma tabela você precisaria ter 2 campos sempre com os mesmos valores? Se eles sempre forem iguais não tem lógica você utilizar espaço para 2 variáveis que têm o mesmo valor. Eu não consegui entender o porque!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Gera o seguinte erro:

 

SQL: INCORRECT TABLE DEFINITION; THERE CAN BE ONLY ONE AUTO COLUMN AND IT MUST BE DEFINED AS A KEY

 

é esse erro que apresenta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE TABLE NOME_TABELA
(
   ID_FORM INT(4) AUTO_INCREMENT PRIMARY KEY NOT NULL,
   INT_NUMERO AUTO_INCREMENT NOT NULL,
)

Nao precisa ser duas chaves primárias para ser auto numeração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei tudo o que vocês disseram a meu abnco é MyISAM e o erro persiste...

 

 

Campo auto_increment, vai ser um só. Agora vem a pergunta: Dois campos com valores iguais? Qual o motivo disso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque tu precisa de dois campos com o mesmo valor no banco? O.o

 

Abraço.

 

At.,

Leandro Barral.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Mudei tudo o que vocês disseram a meu abnco é MyISAM e o erro persiste...

 

 

Campo auto_increment, vai ser um só. Agora vem a pergunta: Dois campos com valores iguais? Qual o motivo disso?

 

 

Um campo será o ID_FORM para Manipulação dos dados, ele só servira para o programador o outro INT_NUMERO será para o controle do usuario...

Então não posso usar 2 auto_incremento

 

Tem como eu fazer uma função para que um contador gere o mesmo numero da cheve primaria ID_FORM no caso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um campo será o ID_FORM para Manipulação dos dados, ele só servira para o programador o outro INT_NUMERO será para o controle do usuario...

Então não posso usar 2 auto_incremento

 

Tem como eu fazer uma função para que um contador gere o mesmo numero da cheve primaria ID_FORM no caso?

Esse valor poderá ser editado futuramente por um dos dois?

Explique melhor o que fará com esses dados, as vezes tem uma forma mais simples de manipular tais dados.

 

Abraço.

 

At.,

Leandro Barral.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um campo será o ID_FORM para Manipulação dos dados, ele só servira para o programador o outro INT_NUMERO será para o controle do usuario...

Então não posso usar 2 auto_incremento

 

Tem como eu fazer uma função para que um contador gere o mesmo numero da cheve primaria ID_FORM no caso?

Esse valor poderá ser editado futuramente por um dos dois?

Explique melhor o que fará com esses dados, as vezes tem uma forma mais simples de manipular tais dados.

 

Abraço.

 

At.,

Leandro Barral.

 

Leandro bom dia!

 

Bem tem o ID_FORM para que eu possa manipular editar etc... (não visivel ao usuario)

ja o INT_NUMERO será um numero de controle do usuario relatorio, fornecedores, clientes.....( visivel a ele ) e esse dos numeros tem que ser iguais para ficar mais correto o sistema

o Usuario abre um Relatorio Gera um numero para seu controle e também gera o id_formulario para o controle do programador

 

entendeu senão eu tento expçlicar de outra forma abraçosss

Compartilhar este post


Link para o post
Compartilhar em outros sites

admendes, Bom dia.

 

Pelo o que eu entendi os numeros serão sempre iguais, a cada alteração o número de um deverá "espelhar" o do outro. Nesse caso você não precisa de dois numero iguais na mesma tabela.

 

Tu deve estar estruturando erroneamente seu sistema.

Use o mesmo campo para o controle dos dois.

 

(Desculpe mas ainda não vi a necessidade de ter dois dados iguais na mesma tabela.)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, posta aí o script (CREATE TABLE) que você está usando para criar a tabela que está dando aquele erro e depois veremos esse seu caso aí dos 2 campos com os mesmos valores. Como o pessoal disse, realmente não há necessidade. Agora, se o usuário poderá alterá-lo eles não serão iguais, ou quando o usuário alterar o campo dele o sistema terá que alterar o seu campo também?

 

Só vendo o seu create table para te falar ao certo o que tá acontecendo. Daquele jeito era para funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dois auto increment na mesma tabela não sei se é possivel.

 

Shrek, foi como eu disse, se um for SEMPRE espelho do outro não precisa dos dois campos, mas se em determinado momento esses valores puderem ficar diferentes aí veremos uma solução para o nosso amigo.

 

Abraço.

 

At.,

Leandro Barral.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, posta aí o script (CREATE TABLE) que você está usando para criar a tabela que está dando aquele erro e depois veremos esse seu caso aí dos 2 campos com os mesmos valores. Como o pessoal disse, realmente não há necessidade. Agora, se o usuário poderá alterá-lo eles não serão iguais, ou quando o usuário alterar o campo dele o sistema terá que alterar o seu campo também?

 

Só vendo o seu create table para te falar ao certo o que tá acontecendo. Daquele jeito era para funcionar.

 

Amigo essa tabela foi criada pelo HEIDISQL, não foi criada manualmente...

 

Dois auto increment na mesma tabela não sei se é possivel.

 

Shrek, foi como eu disse, se um for SEMPRE espelho do outro não precisa dos dois campos, mas se em determinado momento esses valores puderem ficar diferentes aí veremos uma solução para o nosso amigo.

 

Abraço.

 

At.,

Leandro Barral.

 

 

é + ou - isso, mas um seria para a minha manipulação e outra para a manipulação do usuario tem alguma função para fazer isso, sem ter que mexer na estrutura do banco? grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo se o valor é o mesmo qual o problema em tu e o usuario compartilharem da mesma informação?

 

Bom... Eu não conheço nenhuma função nativa que pegue o valor incremental e automatico do ultimo registro feito.

Uma idéia (gambiarra) é deixar o segundo campo (que contera O MESMO valor do incremental) como null (aceitando estar vazio), tu cadastrar o formulario na tabela, depois tu faz um select com where em algum campo que tu tenha controle, obtenha o valor incremental e dê um update na tabela. Pode tambem selecionar TODOS os registros, jogar num array e pegar o ultimo indice do array e consequentemento o valor e dar o update (o que acarretaria em queda drastica de performance).

 

E tem uma função do próprio mysql que se chama last_insert_id(), você poderia usar da seguinte forma, mais ou menos..

 

insert into minha_tabela values ('form1', last_insert_id(nome-campo+1), 'descrição do form')

 

onde nome-campo é o nome do campo no banco que é incremental e automatico.

 

Espero estar ajudando.

 

Abraço.

 

At.,

Leandro Barral.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim,sim Leandro ajudou e muito eu entendi o que você quis diezer eu vo testar aqui e retorno o resultado abraçoss e obrigado pela força...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.