ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

"Key Violation." após o segundo post;

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
CarneiroDelphi
Experiente
Experiente


Registrado: Sexta-Feira, 5 de Agosto de 2005
Mensagens: 417

MensagemEnviada: Sex Mar 21, 2008 9:14 pm    Assunto: "Key Violation." após o segundo post; Responder com Citação

Olá Pessoal.

Toda vez que tento inserir um registro após o outro, ao momento que dou um post, recebo uma mensagem de erro dizendo: "Key Violation.".

Por exemplo: Seu eu dou um insert; digito meus dados e dou um post, logo em seguida um novo insert; insiro mais dados e depois post novamente, no segundo post, recebo a mensagem.

Mais se eu inserir um registro, em seguida eu der um post; um ApplyUpdates(0) e um Refresh; e der um insert; para inserir um novo registro, e em seguida novamente, eu der um post; ApplyUpdates(0); e Refresh; funciona normalmente.


Como faço por exemplo, um pedido que necessite do lançamento de n itens se não consigo dar o post a partir do segundo registro ?

Preciso ter a possibilidade de inserir vários registros, e só por fim, enviar todos eles ao banco de dados.

Uso MySQL, DBExpress, com o trio.
SQLDataSet -> DataSetProvider -> ClientDataSet
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
provirtua
Novato
Novato


Registrado: Quarta-Feira, 22 de Novembro de 2006
Mensagens: 62

MensagemEnviada: Sex Mar 21, 2008 10:16 pm    Assunto: Re: "Key Violation." após o segundo post; Responder com Citação

CarneiroDelphi escreveu:
Olá Pessoal.

Toda vez que tento inserir um registro após o outro, ao momento que dou um post, recebo uma mensagem de erro dizendo: "Key Violation.".

Por exemplo: Seu eu dou um insert; digito meus dados e dou um post, logo em seguida um novo insert; insiro mais dados e depois post novamente, no segundo post, recebo a mensagem.

Mais se eu inserir um registro, em seguida eu der um post; um ApplyUpdates(0) e um Refresh; e der um insert; para inserir um novo registro, e em seguida novamente, eu der um post; ApplyUpdates(0); e Refresh; funciona normalmente.


Como faço por exemplo, um pedido que necessite do lançamento de n itens se não consigo dar o post a partir do segundo registro ?

Preciso ter a possibilidade de inserir vários registros, e só por fim, enviar todos eles ao banco de dados.

Uso MySQL, DBExpress, com o trio.
SQLDataSet -> DataSetProvider -> ClientDataSet


Olá caro amigo não entendi sua dúvida o que vc realmente quer fazer?

pelo que deu para entender vc está tentando inserir registros e não está conseguindo?
Gostaria de saber o porque vc da refresh após cada inserção acredito que isso não seja necessário.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
DonOctavioDelFlores
Colaborador
Colaborador


Registrado: Quarta-Feira, 12 de Setembro de 2007
Mensagens: 2630
Localização: Pra lá de Bagda

MensagemEnviada: Sex Mar 21, 2008 10:56 pm    Assunto: Responder com Citação

quando vi o titulo pensei... "é CDS"

com certeza é configuracao de alguma flag... para o autoincremento...
_________________
“The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sáb Mar 22, 2008 11:50 am    Assunto: Responder com Citação

Key Violation pelo que diz siguinifica que vc violou a chave primaria PK, podendo neste caso ter um valor em duplicidade.

Exempo
ID (PK)
001 {Gravou}
001{Não grava no banco pq ja esta gravado esta ID e sendo um PK gera o Key Violation}
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
CarneiroDelphi
Experiente
Experiente


Registrado: Sexta-Feira, 5 de Agosto de 2005
Mensagens: 417

MensagemEnviada: Sáb Mar 22, 2008 1:14 pm    Assunto: Responder com Citação

Olá pessoal.
Obrigado pela atenção.

O que eu quero, é ter a possibilidade de inserir quantos registros eu quizer, e depois que fizer, enviar todos para o banco de dados de uma só vez.

Desse modo sempre funciona:
Código:

  cds.Insert;
    // Insiro meus dados
  cds.post;
  cds.applyUpdates(0);
  cds.refresh;
    // Aqui inicio outra inserção.
  cds.insert;
    // Insiro mais dados
  cds.post;
  cds.applyUpdates(0);
  cds.Refresh;

A questão que desse modo, conforme insiro um registro, ele já envia pro banco de dados. Não quero isso.

Mais se eu fizer dessa forma:
Código:

  cds.insert;
    // insiro meus dados
  cds.post;
    // Inicio outra inserção.
  cds.insert;
    // Insiro mais dados
  cds.post; // Aqui dá "Key Violation." -> Segundo post


Quando alcanço o segundo post, dá o "Key Violation."

Preciso inserir vários registros no grid, e quando tiver feito, enviar todos para o banco de dados de uma só vez, como se fosse um pedido ou uma fatura, onde se tem que lançar vários itens.

Não quero ter que lançar cada item, e já ir jogando no banco de dados, quero fazer isso para todos os itens de uma só vez.

Por exemplo:

Quando executo os comandos:
Código:

cds.ApplyUpdates(-1);
cds.refresh;

Ai ele envia todos os dados de uma só vez.

Resumindo, quero trabalhar com o cache do ClientDataSet.

Qualquer ajuda será muito bem vinda, pois já faz tempo que procuro a solução.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
provirtua
Novato
Novato


Registrado: Quarta-Feira, 22 de Novembro de 2006
Mensagens: 62

MensagemEnviada: Dom Mar 23, 2008 10:21 am    Assunto: Responder com Citação

CarneiroDelphi escreveu:
Olá pessoal.
Obrigado pela atenção.

O que eu quero, é ter a possibilidade de inserir quantos registros eu quizer, e depois que fizer, enviar todos para o banco de dados de uma só vez.

Desse modo sempre funciona:
Código:

  cds.Insert;
    // Insiro meus dados
  cds.post;
  cds.applyUpdates(0);
  cds.refresh;
    // Aqui inicio outra inserção.
  cds.insert;
    // Insiro mais dados
  cds.post;
  cds.applyUpdates(0);
  cds.Refresh;

A questão que desse modo, conforme insiro um registro, ele já envia pro banco de dados. Não quero isso.

Mais se eu fizer dessa forma:
Código:

  cds.insert;
    // insiro meus dados
  cds.post;
    // Inicio outra inserção.
  cds.insert;
    // Insiro mais dados
  cds.post; // Aqui dá "Key Violation." -> Segundo post


Quando alcanço o segundo post, dá o "Key Violation."

Preciso inserir vários registros no grid, e quando tiver feito, enviar todos para o banco de dados de uma só vez, como se fosse um pedido ou uma fatura, onde se tem que lançar vários itens.

Não quero ter que lançar cada item, e já ir jogando no banco de dados, quero fazer isso para todos os itens de uma só vez.

Por exemplo:

Quando executo os comandos:
Código:

cds.ApplyUpdates(-1);
cds.refresh;

Ai ele envia todos os dados de uma só vez.

Resumindo, quero trabalhar com o cache do ClientDataSet.

Qualquer ajuda será muito bem vinda, pois já faz tempo que procuro a solução.


Meu caro não sei se vc percebeu o que está fazendo, quando vc dá um insert vc abre a tabela para inserção dos dados e quando vc dá um post vc o grava no banco de dados e o Refresh atualiza os dados que vc acabou de gravar, acredito que o que vc queira fazer é inserir vários dados para depois grava-los de uma vez não é?

Então é o seguinte vc pode usar um DBGrid na tela para inserção e usar um laço para controlar o limite que quantos itens vc quer no grid e depois vc constroi outro laço para fazer a gravação dos mesmos dados.

Espero que eu tenha ajudado abraço.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB