Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error al Modificar Datos en un DB Grid (https://www.clubdelphi.com/foros/showthread.php?t=71749)

hondaalberto 07-01-2011 21:35:09

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.

Caral 07-01-2011 22:44:06

Hola
El error sucede cuando se quiere modificar algun dato de una consulta.
Si la consulta solo llama a ciertos campos, NO TODOS, entonces envia el error.
No se puede modificar un dato de esa forma, ose llama a toda la tabla o se hace un UpDate.
Saludos

hondaalberto 09-01-2011 20:17:36

Buenas tardes caral, pero en que parte debo hacer el Update, ya que el error me lo da cuando intento cambiar de una fila a otra...

Casimiro Noteví 09-01-2011 20:41:46

Cita:

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.
¿Has revisado el update?

hondaalberto 11-01-2011 21:56:54

Muchas Gracias amigos encontre el problema y era que a la Tabla TDetalleDiariosTemp le faltaba el indice...
Muchas Gracias a Todos por la ayuda.


La franja horaria es GMT +2. Ahora son las 03:58:59.

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