Buenas tardes Amigos, ojala y alguno de ustedes me pueda dar una mano con la siguiente situacion:
estoy desarrollando una Pequeña aplicación Contable utilizando base de datos en Acces, y todo va bien hasta el punto que escribo en el DBGrid un ID de Cuenta y en el DBGRId me aparece el Numero de Cuenta y la Descripcion, pero mi problema esta si luego quiero cambiar alguna cuenta que ya esta digitada en el dbgrid me devuelve el siguiente error:
Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleException with message 'Key column information is insufficient or incorrect. Too many rows were affected by update'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
|
Tengo una tabla llamada Plan de Cuentas la Cual tiene los Siguientes Campos:
1)Id
2)Cuenta_No
3)Descripcion
4)Tipo Clasificacion
5)Grupo
6)Dimension
7) Bloqueado
8) Fecha_Modificacion
Tambien tengo otra tabla llamada TDetalleDiariosTemp que es la que utilizo para poner los datos que escribo en el DBGRid con los siguientes campos:
1)Id_Cuenta
2)Fecha
3)Descripcion
4)Cuenta_no
5)Seccion
6)Concepto
7)Ed_No
8)Debito
9)Credito
y Codigo que tengo es este:
Código Delphi
[-]var
FEntradasdeDiario: TFEntradasdeDiario;
implementation
Uses UMenuPrincipal,UMantPlanCuentas, UBuscarCuenta, Funciones;
{$R *.dfm}
procedure TFEntradasdeDiario.FormActivate(Sender: TObject);
begin
TDetalleDiariosTemp.Active:=True;
QCuentas.Active:= False;
end;
procedure TFEntradasdeDiario.CerrarClick(Sender: TObject);
begin
If Application.MessageBox('Esto le hara salir del formulario' +#13+'Seguro que desea salir?',
'Salida del Formulario Para Entradas de Diario', MB_IconQuestion+MB_OkCancel)= IDOK then Close;
end;
procedure TFEntradasdeDiario.BCalculadoraClick(Sender: TObject);
begin
WinExec('Calc.Exe',0);
end;
procedure TFEntradasdeDiario.DBGDatosDblClick(Sender: TObject);
begin
vidCuenta := 0;
QCuentas.DisableControls;
QCuentas.Active:=True;;
If (QCuentas.IsEmpty) Then
Begin
Showmessage('No hay ninguna Cuenta Registrado');
QCuentas.Active:= False;
exit;
End;
FBuscarCuenta:= TFBuscarCuenta.Create(Self);
FBuscarCuenta.showmodal;
If (VidCuenta>0) Then
Begin
If Not QCuentas.Locate('Id',VidCuenta,[]) Then
Begin
ShowMessage('La Cuenta Indicada no existe!');
QCuentas.Active:=False;
Exit;
End
Else
Begin
With TDetalleDiariosTemp Do
Begin
TDetalleDiariosTemp.Edit;
TDetalleDiariosTempCuenta_No.Value := QCuentas.FieldByName('Cuenta_No').AsString;
TDetalleDiariosTempDescripcion.Value := QCuentas.FieldByName('Descripcion').AsString;
End;
End;
End;
tstringgrid(DBGDatos).Refresh;
end;
procedure TFEntradasdeDiario.DBGDatosColExit(Sender: TObject);
begin
If Not QCuentas.Active Then
QCuentas.Active := True;
If (ActiveControl Is TDBGrid) Then With TDBGrid(ActiveControl) Do Begin
DBGDatos.DataSource.DataSet.Edit; If (SelectedIndex =0) Then Begin vidCuenta := DBGDatos.DataSource.DataSet.FieldByName('Id').Asinteger;
If (vidCuenta=0) Then
begin DBGDatosDblClick(Sender);
End;
If Not QCuentas.Locate('Id',vidCuenta,[]) Then
Begin
Showmessage('La Cuenta XXX '+InttoStr(vidCuenta)+' No Existe!');
DBGDatos.SelectedField.AsString:= ''; End
Else
with tstringgrid(DBGDatos) do begin
DBGDatos.DataSource.DataSet.Edit;
TDetalleDiariosTempCuenta_No.Value := QCuentas.FieldByName('Cuenta_No').AsString;
TDetalleDiariosTempDescripcion.Value := QCuentas.FieldByName('Descripcion').AsString;
end;
End; End; end;
end.
Gracias de Antemano y Feliz Año Nuevo para todos.