Ver Mensaje Individual
  #1  
Antiguo 07-01-2011
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Reputación: 16
hondaalberto Va por buen camino
Error al Modificar Datos en un DB Grid

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 //Si el Grid tiene el foco me
With TDBGrid(ActiveControl) Do // preparo para trabajar en el
Begin
DBGDatos.DataSource.DataSet.Edit; //POne la tabla en modo edicion
If (SelectedIndex =0) Then //Para trabajar con el IdCuenta
Begin // Columna 1
vidCuenta := DBGDatos.DataSource.DataSet.FieldByName('Id').Asinteger;
//Toma el valor digitado en la columna
If (vidCuenta=0) Then
begin //a buscar
DBGDatosDblClick(Sender);
End;
// Si el idgrupo escrito no existe en la tabla
// Envia un mensaje y deja el cursor en la columna actual
If Not QCuentas.Locate('Id',vidCuenta,[]) Then
Begin
Showmessage('La Cuenta XXX '+InttoStr(vidCuenta)+' No Existe!');
DBGDatos.SelectedField.AsString:= ''; //Limpia la columna
End
Else
with tstringgrid(DBGDatos) do //Si encontro el dato
begin
DBGDatos.DataSource.DataSet.Edit;
TDetalleDiariosTempCuenta_No.Value := QCuentas.FieldByName('Cuenta_No').AsString;
TDetalleDiariosTempDescripcion.Value := QCuentas.FieldByName('Descripcion').AsString;
end;
End; // del SelectIndex = 1
End; // Del With
end;

end.

Gracias de Antemano y Feliz Año Nuevo para todos.

Última edición por rgstuamigo fecha: 07-01-2011 a las 22:17:42.
Responder Con Cita