Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
Grid index out of range

Buenas,

Cuando estoy ( en un DBDrid ) posicionado en el último registro y quiero añadir un nuevo registro (dándole a la flecha para abajo) me aparece el mensage: "Grid index out of range".

Lo curioso es que no siempre da el error.

¿ a qué es debido?
Responder Con Cita
  #2  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
tienes algun codigo relacionado??

es lo mas seguro, colocalo y te podremos ayudar con el error.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
Código Delphi [-]
procedure TEdOfertaFrm.PzDsDataChange(Sender: TObject; Field: TField);
begin
 if (trim(PzOfertas.FieldByName('TIPOM').AsString)<>'') then
     if (PzOfertas.FieldByName('VCORTE').AsFloat<>0) or
        (PzOfertas.FieldByName('VPz').AsFloat<>0) then
        DbGrid1.Columns[5].Readonly := true
     else
        DbGrid1.Columns[5].Readonly := false
  else
     DbGrid1.Columns[5].Readonly := false ;
end;
procedure TEdOfertaFrm.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (DbGrid1.SelectedField.FieldName='VEXTRAS') and (key=VK_RIGHT) then begin
     DbGrid1.SelectedField:= OfertasFrm.PzofertasVPU;
     key := 0
 end;
 if (DbGrid1.SelectedField.FieldName='VPU') and (key=VK_Left) then begin
     DbGrid1.SelectedField:= OfertasFrm.PzofertasVEXTRAS;
     key := 0
 end;
 if (DbGrid1.SelectedField.FieldName='VPU') and (key=VK_RIGHT) or
    (DbGrid1.SelectedField.FieldName='REF') and (key=VK_LEFT) then
     key := 0;
 if (key=VK_HOME) then begin
    DbGrid1.SelectedField:= OfertasFrm.PzofertasREF;
    key := 0
 end;
 if (key=VK_END) then begin
    DbGrid1.SelectedField := OfertasFrm.PzofertasVPU;
    key := 0
 end;
 if (key=VK_DELETE) and (Shift=[ssCtrl]) then
    Key := 0;
if (key=VK_INSERT) then
    if (Shift<>[ssShift]) and (Shift<>[ssCtrl]) then
    Key := 0;
 if ((key=VK_F3) and (
     (DbGrid1.Selectedfield.FieldName = 'VPZ')      or
     (DbGrid1.Selectedfield.FieldName = 'VCORTE' )  or
     (DbGrid1.Selectedfield.FieldName = 'VTRATMTO') or
     (DbGrid1.Selectedfield.FieldName = 'VEXTRAS'))) then
    DBGrid1EditButtonClick(nil);
end;
 
 
procedure TOfertasFrm.PzOfertasAfterScroll(DataSet: TDataSet);
begin
   Aceptar1.Enabled := not PzOfertas.IsEmpty and (PzOfertasACEPTADA.AsString <>'S')
end;
procedure TOfertasFrm.PzOfertasCalcFields(DataSet: TDataSet);
begin
  PzOfertasACEPTADACALC.AsString   := CompletaSiNo(PzOfertasACEPTADA.AsString);
  //PzOfertasPIEZAVERSION.AsString   := PzOfertasREF.AsString+'   '+PzOfertasC_VR.AsString;
  try
    PzOfertasImporte.AsFloat         := PzOfertasVPU.AsFloat * PzOfertasQPZ.AsInteger;
    PzOfertasImporteMaterial.AsFloat := PzOfertasVPz.AsFloat * PzOfertasQPZ.AsInteger;
  except
  end;
  try
     OfertasCANT.Value := PzOfertasTOTAL.Value
  except
  end;
end;
procedure TOfertasFrm.PzOfertasBeforePost(DataSet: TDataSet);
begin
   if not modGestor.MaterialValido(PzOfertasTIPOM.AsString) then
      if PzOfertas.State in [dsEdit,dsInsert] then
         PzOfertas.Cancel;
end;
procedure TOfertasFrm.PzOfertasAfterPost(DataSet: TDataSet);
begin
   try
     OfertasCANT.Value := PzOfertasTOTAL.Value
   except
   end;
end;
Responder Con Cita
  #4  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
las columnas del grid son estaticas o dinamicas???
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
las columnas son dinamicas
Responder Con Cita
  #6  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
ese es el problema donde haces la referencia:

DbGrid1.Columns[5].Readonly := false;

en ese momento el grid no tiene las 6 columnas que necesitas por eso el error index out of range...

antes de hacer eso deberias verificar si el count de las columnas es mayor o igual de 6
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #7  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
he añadido el código y no va
Responder Con Cita
  #8  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
cual codigo añadistes y cual codigo no va???
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #9  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
Código Delphi [-]
procedure TEdOfertaFrm.PzDsDataChange(Sender: TObject; Field: TField);
begin
if DgBGrid1.Columns.Count>=6 then
 if (trim(PzOfertas.FieldByName('TIPOM').AsString)<>'') then
     if (PzOfertas.FieldByName('VCORTE').AsFloat<>0) or
        (PzOfertas.FieldByName('VPz').AsFloat<>0) then
        DbGrid1.Columns[5].Readonly := true
     else
        DbGrid1.Columns[5].Readonly := false
  else
     DbGrid1.Columns[5].Readonly := false ;
end;

está bien?
Responder Con Cita
  #10  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
eso esta bien dependiendo lo que quieras lograr, pero si deberia funcionar para controlar el error que dices te da
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #11  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
Si comento el codigo anterior, me sigue dando el error.
Estoy desesperado.
Responder Con Cita
  #12  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
sigo sin entender, podrias tomarte 5 minutos para explicar bien lo que sucede, porq comentas el codigo??
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #13  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
Lo Explico:

SOLO SUCEDE EN ALGUNOS CASOS.

Cuando intento añadir una nueva linea en el DbGrid a veces se llega a ejecutar :
Código Delphi [-]
procedure TEdOfertaFrm.PzOfertasNewRecord(DataSet: TDataSet);
var
  n : integer;
begin
  PzOfertas.FieldByName('OFERTA').AsString  := OfertasFrm.OfertasOFERTA.AsString;
  PzOfertas.FieldByName('ACEPTADA').AsString  := 'N';
  PzOfertas.FieldByName('PzasArea').AsInteger := 1;
  try
     n := PzOfertas.FieldByName('MaxPos').Value + 1
  except
     n := 1;
  end;
  PzOfertas.FieldByName('O_Oferta').AsString  := AddCeros(n,3);
  BorrarPieza.Enabled := true
end;
y todo va correcto.
Y otras veces me da el error: "Grid index out of range"

PzOfertas lo tengo declarado de la siguiente manera:
Código Delphi [-]
PzOfertas := OfertasFrm.PzOfertas;
ClientDataSet de otro formulario
Responder Con Cita
  #14  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
La verdad no veo la relacion, son dos codigos distintos lo que colocas, y el newrecord, se debe ejecutar siempre que agregas un registro
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #15  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
Antes de ejecutarse el Newrecord aparece el error.
Responder Con Cita
  #16  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
y cuando salta la excepcion podrias indicar la linea y el resto del codigo que marca delphi??
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #17  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
el problema es que al intentar añadir un nuevo registro no se que evento se está ejecutando ( antes del newrecord)
Responder Con Cita
  #18  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
¿ qué evento se ejecuta cuando intento añadir un nuevo registro en el dbGrid ? alguna veces funciona el OnNewRecord
Responder Con Cita
  #19  
Antiguo 19-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
pero te pregunto algo, cuando te genera esa excepcion delphi se detiene y te muestra la linea donde se detuvo, que linea te esta mostrando???
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #20  
Antiguo 19-10-2007
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
Aunque te cueste creerlo, no sé. El código me está mareando. Por qué no hace el OnNewRecord?

Lo siento por liarte
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Index is out of date... index table torito Conexión con bases de datos 7 10-12-2016 13:21:31
XSQLDA Index out of range RESP 3.0 Firebird e Interbase 5 15-12-2006 15:14:34
Grid Index out of range javicho_villa Varios 4 25-08-2006 16:30:19
Grid index out of range zugazua2001 Varios 5 22-06-2006 16:57:50
Range Error DarkFilter Varios 3 02-02-2004 17:07:31


La franja horaria es GMT +2. Ahora son las 00:14:38.


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