Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-11-2008
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 19
judit25 Va por buen camino
Question Error Key Violation

Buenas Noches a tod@s

Mi problema es el siguiente:

Estoy trabajando con delphi 7, access 2003 y Ado. La conexion esta en un Data Module y lo hago a traves de Microsoft.Jet.OLEDB.4.0.

Tengo un formulario que funciona como facturacion en el cual lo manejo con 2 TClientDataset; el problema es que al momento del ApplyUpdate(0) del primer ClientDataSet (el que hace referencia al encabezado de la factura) me da el error de "Project Sistema.exe raised exception class EDBClient with message 'Key violation.'. Process stopped. Use Step or Run to continue"

Antes de grabar le asigno los valores a este uno por uno. El codigo que empleo es este:

Código Delphi [-]
        CDS1.Append;
        CDS1Tipo_Doc.Value := 'F';
        CDS1Ano.Value := inttostr(Ano);
        CDS1Numero.Value := numerof;
        CDS1Fecha_Emision.Value := strtodate(edit39.Text);
        if DBLCB1.KeyValue <> null then
          begin
            CDS1Cod_Cliente.Value := dblcb1.KeyValue;
          end
        else
          begin
            CDS1Cod_Cliente.Value := 0;
          end;
        CDS1Forma_Pago.Value := DBRG1.Value;
        CDS1Tipo_Cliente.Value := '';
        if edsub.Text <> '' then
          CDS1SubTotal.Value := strtofloat(edsub.Text)
        else
          CDS1SubTotal.Value := 0;
        if eddesc.Text <> '' then
          CDS1Descuento.Value := strtofloat(eddesc.Text)
        else
          CDS1Descuento.Value := 0;
        If edimp.Text <> '' then
          begin
            CDS1Impuesto.Value := strtofloat(edimp.Text);
          end
        else
          CDS1Impuesto.Value := 0;
        If edtotal.Text <> '' then
          CDS1Total.Value := strtofloat(edtotal.Text)
        else
          CDS1Total.Value := 0;
        CDS1Fechacre.Value := dateOf(Now);
        CDS1Horacre.Value := Now;
        CDS1Userwcre.Value := String(Nombre);
        CDS1Estacioncre.Value := String(buffer);
        CDS1Estado.Value := 'A';        
        CDS1.ApplyUpdates(0);

La clave principal de mi tabla esta compuesta por el Tipo_Doc, Ano, Numero

Alguien sabe donde estoy fallando para que me de ese error?

Gracias anticipadas

Saludos
__________________
El hombre feliz no es el hombre que rie, sino aquel cuya alma llena de alegría y confianza se sobrepone y es superior a los acontecimientos.
Séneca
Responder Con Cita
  #2  
Antiguo 04-11-2008
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
El error significa que tienes un valor duplicado en la clave primaria, por lo tanto antes de grabar el documento deberías comprobar que no existe otro con el mismu número.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 04-11-2008
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 19
judit25 Va por buen camino
Cita:
Empezado por marcoszorrilla Ver Mensaje
El error significa que tienes un valor duplicado en la clave primaria, por lo tanto antes de grabar el documento deberías comprobar que no existe otro con el mismu número.

Un Saludo.
Gracias por responder.

Actualmente cuando presiono el boton de agregar, este me trae el ultimo numero de la tabla en el que guardo las facturas y le agrego uno, es decir que el numero del documento aun no existe. Es por eso que no se que podria ser lo que me esta causando el error .

Lo calculo de la siguiente manera:

Código Delphi [-]
if DM.QDocumento.Fields[0].IsNull then
  begin
    numerof := 1;
  end
else
  begin
    numerof := DM.QDocumento.Fields[0].AsInteger;
    numerof := numerof + 1;
  end;

Alguna otra sugerencia?

Gracias anticipadas
__________________
El hombre feliz no es el hombre que rie, sino aquel cuya alma llena de alegría y confianza se sobrepone y es superior a los acontecimientos.
Séneca
Responder Con Cita
  #4  
Antiguo 04-11-2008
Avatar de Ana María
Ana María Ana María is offline
Miembro
 
Registrado: ago 2008
Posts: 40
Poder: 0
Ana María Va por buen camino
Facturación?

Dices que estás haciendo algo de facturación, mi pregunta es si tienes otra tabla con los detalles de factura, de ser así es probable que la violación de clave no sea en la tabla maestra si no en la tabla de detalles.

saludos
Responder Con Cita
  #5  
Antiguo 04-11-2008
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 19
judit25 Va por buen camino
Cita:
Empezado por Ana María Ver Mensaje
Dices que estás haciendo algo de facturación, mi pregunta es si tienes otra tabla con los detalles de factura, de ser así es probable que la violación de clave no sea en la tabla maestra si no en la tabla de detalles.

saludos
Es en el momento que quiere hacer el ApplyUpdate(0) del TClientDataSet que hace referencia al encabezado. El ApplyUpdate(0) que hace referencia al detalle no me da ningun problema.

Gracias
__________________
El hombre feliz no es el hombre que rie, sino aquel cuya alma llena de alegría y confianza se sobrepone y es superior a los acontecimientos.
Séneca
Responder Con Cita
  #6  
Antiguo 05-11-2008
Avatar de Ana María
Ana María Ana María is offline
Miembro
 
Registrado: ago 2008
Posts: 40
Poder: 0
Ana María Va por buen camino
Me da la impresión que podría estar fallando el diseño de la aplicación en sí, en la manera como enlazas los componentes maestro detalles y en la forma como resuelven la relación los TDatasetProvider (porque personalmente con solo un ApplyUpdates , actualizo tanto detalles como encabezado, utilizando la propiedad DatasetField del TClientDataset para los detalles), si quieres sube un pequeño ejemplo de la aplicación donde se recree el problema y con mucho gusto la reviso a ver si encontramos solución.
Responder Con Cita
  #7  
Antiguo 05-11-2008
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 19
judit25 Va por buen camino
Cita:
Empezado por Ana María Ver Mensaje
Me da la impresión que podría estar fallando el diseño de la aplicación en sí, en la manera como enlazas los componentes maestro detalles y en la forma como resuelven la relación los TDatasetProvider (porque personalmente con solo un ApplyUpdates , actualizo tanto detalles como encabezado, utilizando la propiedad DatasetField del TClientDataset para los detalles), si quieres sube un pequeño ejemplo de la aplicación donde se recree el problema y con mucho gusto la reviso a ver si encontramos solución.
Que necesitas que te envie y como lo hago?

Gracias
__________________
El hombre feliz no es el hombre que rie, sino aquel cuya alma llena de alegría y confianza se sobrepone y es superior a los acontecimientos.
Séneca
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error Abstract Error y Access violation zvf OOP 33 08-09-2010 18:50:33
Error con Key violation adelaida Conexión con bases de datos 8 21-02-2007 19:40:40
Error Access Violation FGarcia Varios 1 13-06-2006 23:43:15
Error Violation Primary Key maui Conexión con bases de datos 16 11-05-2004 15:49:46
Error Access Violation samame Conexión con bases de datos 1 01-04-2004 10:48:10


La franja horaria es GMT +2. Ahora son las 02:42:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi