Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
key violation

Me da ahora un error que se llama key violation. Como puedo solventar este error.


el codigo que utilizo es este:

Código Delphi [-]
unit Unit8;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, DB, DBTables,
   RoundButton, Mask, DBCtrls;
 
 type
   TForm8 = class(TForm)
     Table1: TTable;
     DataSource1: TDataSource;
     DBGrid1: TDBGrid;
     Label1: TLabel;
     Panel1: TPanel;
     Label2: TLabel;
     Label3: TLabel;
     Label4: TLabel;
     Label5: TLabel;
     RoundButton2: TRoundButton;
     RoundButton1: TRoundButton;
     Label6: TLabel;
     Label7: TLabel;
     Label8: TLabel;
     Label9: TLabel;
     Label10: TLabel;
     DBEdit1: TDBEdit;
     DBEdit2: TDBEdit;
     DBEdit3: TDBEdit;
     DBEdit4: TDBEdit;
     DBEdit5: TDBEdit;
     Table2: TTable;
     DataSource2: TDataSource;
     DBEdit6: TDBEdit;
     Label11: TLabel;
     procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
     procedure RoundButton2Click(Sender: TObject);
     procedure RoundButton1Click(Sender: TObject);
     procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form8: TForm8;
 
 implementation
 
 uses
   Unit2, unit9;
 
 {$R *.dfm}
 
 procedure TForm8.DBGrid1KeyPress(Sender: TObject; var Key: Char);
 begin
   If Key = #13 then
   begin
     Table1.Edit;
     if Dbgrid1.Fields[0].Value<>Null then
     begin
       Form2.Table1.IndexFieldNames:='Ser_PRO';
       if Form2.Table1.FindKey([Dbgrid1.Fields[0]])=True then
       begin
         Dbgrid1.Fields[2].AsString:=Form2.Table1.FieldbyName('des_PRO').AsString;
         Dbgrid1.Fields[5].Ascurrency:= Dbgrid1.Fields[4].Ascurrency * (14/100)* Dbgrid1.Fields[3].Asfloat;
         Dbgrid1.Fields[6].Ascurrency:= Dbgrid1.Fields[3].Asfloat * Dbgrid1.Fields[4].Ascurrency
           + Dbgrid1.Fields[5].Ascurrency;
         Dbgrid1.Fields[0].FocusControl;
         Table1.First;
         Label3.Caption := '0';
         Table1.First;
         while Table1.Eof = false do
         Begin
           Label3.Caption := FloatToStr(Table1.FieldByName('costo/total').AsFloat + StrToFloat(Label3.Caption));
           Label5.Caption := floattostr(table1.fieldbyname('IVA').ascurrency+ StrToFloat(Label5.Caption));
           table1.edit;
           TABLE1.POST;
           TABLE1.NEXT;
         end;
       end
       else
         ShowMessage('Producto no encontrado');
       Dbgrid1.Fields[0].FocusControl;
     end;
   end;
 end;
 
 procedure TForm8.RoundButton2Click(Sender: TObject);
 begin
   table1.edit;
   TABLE1.first;
   while table1.eof = false do
     table1.Delete;
   label3.caption:= '0';
   label5.Caption:= '0';
   dbgrid1.Fields[0].FocusControl;
 end;
 
 procedure TForm8.RoundButton1Click(Sender: TObject);
 begin
   table1.first;
   while table1.Eof=false do
   begin
     form2.Table1.FindKey([table1.fieldbyname('serial').asinteger]);
     form2.Table1.edit;
     form2.Table1.fieldbyname('exi_PRO').asfloat := form2.Table1.fieldbyname('exi_pro').asfloat
       + dbgrid1.Fields[3].asfloat;
     form2.Table1.FieldByName('iva_PRO').ascurrency:= form2.Table1.fieldbyname('prv_pro').AsCurrency * (14/100);
     form2.Table1.fieldbyname('prV_PRO').AsCurrency:= dbgrid1.Fields[4].ascurrency * (40/100)
       + dbgrid1.Fields[4].ascurrency;
     form2.Table1.Post;
     /// REGISTRO EN LA TABLA DE COMPRAS
     TABLE2.INSERT;
     table2.fieldbyname('fec_COM').asdatetime := date;
     table2.fieldbyname('ser_COM').asinteger := dbgrid1.Fields[0].AsInteger;
     table2.fieldbyname('Nro_fac').Asstring := dbgrid1.Fields[1].Asstring;
     table2.fieldbyname('Des_com').asstring := dbgrid1.Fields[2].Asstring;
     table2.fieldbyname('Can_com').asfloat := dbgrid1.Fields[3].Asfloat;
     table2.fieldbyname('Cun_com').ascurrency := dbgrid1.Fields[4].Ascurrency;
     table2.fieldbyname('IVA_com').ascurrency := dbgrid1.Fields[5].Ascurrency;
     table2.fieldbyname('Cot_com').ascurrency := dbgrid1.Fields[6].Ascurrency;
     table2.fieldbyname('RIF_com').asstring := dbedit1.Field.AsString;
     table2.fieldbyname('nom_com').asstring := dbedit2.Field.AsString;
     table2.fieldbyname('nit_com').asinteger := dbedit3.Field.Asinteger;
     table2.fieldbyname('dir_com').asstring := dbedit4.field.AsString;
     table2.fieldbyname('tel_com').asstring := dbedit5.Field.AsString;
     table2.post;
     table1.Next;
   end;
 END;
 
 procedure TForm8.DBEdit1KeyPress(Sender: TObject; var Key: Char);
 begin
   If Key = #13 then
   begin
     TABLE1.EDIT;
     if dbedit1.Field.Value<>Null then
     begin
       Form9.Table1.IndexFieldNames:='rif_prv';
       if Form9.Table1.FindKey([Dbedit1.Field])=TRUE then
       begin
         Dbedit2.Field.AsString:=Form9.Table1.FieldbyName('nom_prv').AsString;
         Dbedit3.Field.Asinteger:=Form9.Table1.FieldbyName('Nit_prv').Asinteger;
         Dbedit4.Field.Asstring:=Form9.Table1.FieldbyName('Dir_prv').asstring;
         Dbedit5.Field.AsString:=Form9.Table1.FieldbyName('tel_prv').AsString;
         Dbedit1.Field.FocusControl;
       end;
     end;
   end;
 end;
 
 end.

Última edición por dec fecha: 01-10-2005 a las 22:20:43. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #2  
Antiguo 01-10-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

El código se me hace un poco difícil de leer.

En que parte del código te da el error.

Usa las etiquetas [delphi] [ /delphi]por favor.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 01-10-2005
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
Key Violation, quiere decir que estás repitiendo un campo clave, es decir que el registro que estás dando de alta ya existe en la clave primaria que tiene esa tabla.

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
  #4  
Antiguo 03-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
problema con dbgrid.

Ok. Marcos el problema se origina de la siguiente manera:



Cuando marco con asterico cualquier campo de la tabla ventas, me da ese error. Cuando no coloco ningun campo clave en la tabla no me lo da.

Como hago para exigir una referencia integral en el database desktop, si la tabla ventas no le puedo colocar un campo clave.

Por ejemplo en la tabla inventario tengo el campo Ser_pro que es el serial del producto marcado como clave primaria.

en la tabla ventas tengo el campo ser_ven que es el serial del producto a vender y este no lo puedo marcar como clave primaria porque me da el key violation.


Gracias...
Responder Con Cita
  #5  
Antiguo 03-10-2005
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
Por lo que deduzco tienes la tabla y además datos y ahora pretentendes establecer ciertas reglas, claves....

El asunto es que esto debe de hacerse con las tablas vacias para evitar que exista alguna incoerencia en los datos y nos impidan poner las reglas, que precisamente son para evitar éstas.

Sino estoy deduciendo mal, lo que tienes que hacer antes de intentar poner una clave única es una consulta de valores repetidos para eliminarlos ya que sino te va a ser imposible establecer la clave.

Por otra parte cuando ningún campo pueda ser cadidato a clave primaria, se crea uno a dichos efectos, que aunque no es lo más aconsejable puede ser un autoincrementado.

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
  #6  
Antiguo 04-10-2005
aurbano aurbano is offline
Miembro
 
Registrado: abr 2004
Posts: 20
Poder: 0
aurbano Va por buen camino
problema con dbgrid

Ok. marcos si me puedes explicar como haria para establecer una consulta de valores repetidos, para despues de establecer la clave.


Gracias y disculpa.
Responder Con Cita
  #7  
Antiguo 04-10-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Con sentencias SQL
Código SQL [-]
select distinct campo
FROM tabla WHERE campo In (SELECT campo FROM 
tabla As Tmp GROUP BY campo HAVING Count(*)>1)
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 13:27:27.


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