Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Grid Index out of range (https://www.clubdelphi.com/foros/showthread.php?t=68306)

chino150 07-06-2010 17:38:01

Grid Index out of range
 
Saludos a todos,

mi consulta es la seguiente tengo delphi 7, mysql 5.0, Zeos 6.0 cuando guardo un nuevo registro y luego navego al ultimo registro me da el siguiente error Grid Index out of range cual es la causa de este error y como es la solución.


Gracias de ante manos!!!!

Faust 07-06-2010 17:58:34

Puedes detallar más tu problema, parece que el error se trata de un componente visual ya que dice Grid Index out of range, ¿qué componentes viusales usas? y si podrías poner en que parte de tu codigo da el error.

chino150 08-06-2010 15:09:36

Cita:

Empezado por Faust (Mensaje 366425)
Puedes detallar más tu problema, parece que el error se trata de un componente visual ya que dice Grid Index out of range, ¿qué componentes viusales usas? y si podrías poner en que parte de tu codigo da el error.

El componente es dbGrid no es el código que marca el error todo fa bien el guarda las modificaciones es cuando le hago click al boton de sigiente o se mueve el siguiente registro que marca el error de todas forma este es el código
Código Delphi [-]
procedure TfrmGAportacion.btnAceptarClick(Sender: TObject);
begin
    if txtRecibo.Text = '' then
        begin
        MessageDlg ('El campo Recibo debe tener un valor.', mtWarning, [mbok], 0);
        txtRecibo.setfocus;
        end;
     if txtNombre.Text = '' then
        begin
        MessageDlg ('El campo Nombre debe tener un valor.', mtWarning, [mbok], 0);
        txtNombre.SetFocus;
        end;
     if txtAporte.Text = '' then
        begin
        MessageDlg ('El campo Aporte debe tener un valor.', mtWarning, [mbok], 0);
        txtAporte.SetFocus;
        end;
     if dblTransac.Text = '' then
        begin
        MessageDlg ('El campo Transacción debe tener un valor.', mtWarning, [mbok], 0);
        txtAporte.SetFocus;
        end;
     if md.qryAportaciones.State in [dsinsert, dsedit] then
        begin
          try
           md.qryAportaciones.Post;
           md.qryAportaciones.Insert;
           except
             txtNombre.setfocus;
          raise;
       end;
    end;
       txtRecibo.SetFocus
end;
end.

Gracias Faust

Faust 08-06-2010 17:28:57

Va...

Este código no me dice mucho...

Si estás haciendo la edición sobre un dbGrid y después pulsas el botón Aceptar del que me pones el código... pues no es necesario hacer un Post, pues al terminar de editar o insertar registros en un dbGrid, el post se hace solito al salir del control, saltar a otra fila o llegar al final de tu captura y dar enter, en caso de querer cancelarla tienes que pulsar ESC, este manejo lo hace solito el dbGrid.

¿cuál es el objetivo de este código?

Primero haces una comprobación si se encuentra en modo de inserción o modificación, si se encuentra en cualquiera de estos modos haces Post (que sirve para guardar solamente datos que estás modificando o insertando) y enseguida haces un Insert (lo que indica que estás a punto de insertar un nuevo registro y tu query se pondrá en state=dsInsert) y finalmente dejas la tabla en modo Insert si es que no ha saltado una excepción (perdón pero no he probado el código).

La manera correcta de realizar inserciones o ediciones sin un dbGrid es la siguiente:


Código Delphi [-]
// Suponiendo que tu query está abierto y mostrando registros existentes

with Query do
begin
  Edit;              // Pones en modo de inserción el registro actual
  FieldByName('Recibo').AsString:= txtRecibo.Text;
....  // Editas el valor de cada campo que requieras cambiar
  FieldByName('Transac').AsString:= txtTransac.Text;
  Post;            // Al terminar haces un Post para guardar los datos
end;

Y para Insertar solo cambias el Edit por un Insert, pero el Post se queda...

Te recomiendo cheques el libro gratuito de La Cara Oculta de Delphi 4, disponible en el FTP del Club, aquí encontrarás detalles sobre estas operaciones que por prisa no las he puesto, pero te podrían ayudar más.

Saludos

chino150 09-06-2010 20:02:31

Cita:

Empezado por Faust (Mensaje 366583)
Va...

Este código no me dice mucho...

Si estás haciendo la edición sobre un dbGrid y después pulsas el botón Aceptar del que me pones el código... pues no es necesario hacer un Post, pues al terminar de editar o insertar registros en un dbGrid, el post se hace solito al salir del control, saltar a otra fila o llegar al final de tu captura y dar enter, en caso de querer cancelarla tienes que pulsar ESC, este manejo lo hace solito el dbGrid.

¿cuál es el objetivo de este código?

Primero haces una comprobación si se encuentra en modo de inserción o modificación, si se encuentra en cualquiera de estos modos haces Post (que sirve para guardar solamente datos que estás modificando o insertando) y enseguida haces un Insert (lo que indica que estás a punto de insertar un nuevo registro y tu query se pondrá en state=dsInsert) y finalmente dejas la tabla en modo Insert si es que no ha saltado una excepción (perdón pero no he probado el código).

La manera correcta de realizar inserciones o ediciones sin un dbGrid es la siguiente:



Código Delphi [-]
// Suponiendo que tu query está abierto y mostrando registros existentes

with Query do
begin
Edit; // Pones en modo de inserción el registro actual
FieldByName('Recibo').AsString:= txtRecibo.Text;
.... // Editas el valor de cada campo que requieras cambiar
FieldByName('Transac').AsString:= txtTransac.Text;
Post; // Al terminar haces un Post para guardar los datos
end;





Y para Insertar solo cambias el Edit por un Insert, pero el Post se queda...

Te recomiendo cheques el libro gratuito de La Cara Oculta de Delphi 4, disponible en el FTP del Club, aquí encontrarás detalles sobre estas operaciones que por prisa no las he puesto, pero te podrían ayudar más.

Saludos

el post se hace desde otro formulario es despues que cierra este formulario cuando hago click sobre el navagador me da ese error

Faust 10-06-2010 02:14:19

A ver me perdí...

¿entonces me puedes decir como lo estás haciendo? es que creo que no estoy captando :(


La franja horaria es GMT +2. Ahora son las 12:12:37.

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