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
public
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;
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.