 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
CarneiroDelphi Experiente

Registrado: Sexta-Feira, 5 de Agosto de 2005 Mensagens: 417
|
Enviada: Sex Mar 21, 2008 9:14 pm Assunto: "Key Violation." após o segundo post; |
|
|
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 |
|
 |
provirtua Novato


Registrado: Quarta-Feira, 22 de Novembro de 2006 Mensagens: 62
|
Enviada: Sex Mar 21, 2008 10:16 pm Assunto: Re: "Key Violation." após o segundo post; |
|
|
| 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 |
|
 |
DonOctavioDelFlores Colaborador

Registrado: Quarta-Feira, 12 de Setembro de 2007 Mensagens: 2630 Localização: Pra lá de Bagda
|
Enviada: Sex Mar 21, 2008 10:56 pm Assunto: |
|
|
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 |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
CarneiroDelphi Experiente

Registrado: Sexta-Feira, 5 de Agosto de 2005 Mensagens: 417
|
Enviada: Sáb Mar 22, 2008 1:14 pm Assunto: |
|
|
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 |
|
 |
provirtua Novato


Registrado: Quarta-Feira, 22 de Novembro de 2006 Mensagens: 62
|
Enviada: Dom Mar 23, 2008 10:21 am Assunto: |
|
|
| 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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|