Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2009
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
list index (2) out of bounds ----dbgrid

Perdon por volver a preguntar, pero ya estoy desesperado y no encuentro solucion.
Resumiendo:
un dbgrid y un edit
Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
begin
sqlquery1.Close;
 sqlquery1.sql.Clear;
   sqlquery1.SQL.text:='select nombre,telefono1 from contactos where nombre like '+quotedstr('%'+edit1.text+'%');
  sqlquery1.Open;
end;
En el edit pongo lo que quiero ir filtrando y me lo va mostrando hasta que pongo algo que no existe y es cuando me devuelve el error en el dbgrid cuando se actualizan los datos automaticamente.
Hay forma de evitar esto?.

Ya no se que mas hacer.
Responder Con Cita
  #2  
Antiguo 16-11-2009
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Quizás con un IF

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
begin
  sqlquery1.Close;
  sqlquery1.sql.Clear;
  if (edit1.text > ' ') then
    sqlquery1.SQL.text:='select nombre,telefono1 from contactos where nombre like '+quotedstr('%'+edit1.text+'%')
  else
    sqlquery1.SQL.text:='select nombre,telefono1 from contactos ');
  sqlquery1.Open;
end;

o utilizando parámetros

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var 
   p : string;
begin
  if (edit1.text > ' ') then
     p := '%'+edit1.text+'%';

  sqlquery1.Close;
  sqlquery1.sql.Clear;
  sqlquery1.SQL.text:='select nombre,telefono1 from contactos where nombre like arte_de_nombre');
  Params.ByName['parte_de_nombre'].AsString := p;
  sqlquery1.Open;
end;
Responder Con Cita
  #3  
Antiguo 16-11-2009
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
De todos modos, no debe estar el error en el Query que haces.
Supongo que el error está en aglún procedimiento que depende del open.

Debes tener algún procedimiento en el query que genera el error.
Before/AfterOpen
Before/AfterScroll

O puede estár en alguno de los campos
OnChange, por ejemplo

O puede que por DataSource haya un detalle (de un maestro-detalle) que haga scroll o close-open y que tenga algún procedimiento como los anteriores.
Responder Con Cita
  #4  
Antiguo 16-11-2009
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
prueba de usar sqlquery.DisableControls y sqlquery.EnableControls antes y despues de trabajar con el query:

Código Delphi [-]
   sqlquery.DisableControls;
...
   sqlquery.Open;
   sqlquery.EnableControls;

PD: no nos indicas que base de datos ni componentes usas. Personalmente tuve errores parecidos (por un bug en el reposicionamiento del cursor en las query, usando BDE), que finalmente se solucionaron migrando a ADO. Un saludo.
Responder Con Cita
  #5  
Antiguo 16-11-2009
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
[solucionado]

estoy trabajando con sqlite3 y usando filtrado por nombre, de hecho si uso un locate va bien si me lo encuentra sino lo encuentra se bloquea.
gracias la verdad es que es duro que pase esto apenas estoy usando algo sencillo.
os pongo el codigo que tengo completo a ver si por ahi hay algo, porque el disablecontrols no hace nada (que yo sepa)
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  sqlite3connection1.DatabaseName:='agenda.db3';
  sqlite3connection1.Connected:=true;
  sqlquery1.Active:=true;
 sqlquery1.IndexFieldNames:='nombre';
 sqlquery1.Filter:='nombre';
 sqlquery1.filtered:=true;


end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 edit1.Text:='';
sqlquery1.active:=false;
  sqlquery1.filtered:=false;
  sqlquery1.Indexfieldnames:=combobox1.Items[combobox1.itemindex];
  sqlquery1.Filter:=combobox1.Items[combobox1.itemindex];
  sqlquery1.Active:=true;

  sqlquery1.filtered:=true;


end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  form2.ShowModal;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  sqlquery1.Close;
  sqlite3connection1.Close;
  close;

end;

procedure TForm1.Edit1Change(Sender: TObject);
var
pr:string;
begin
//sqlquery1.DisableControls;
begin
sqlquery1.Close;
sqlquery1.sql.Clear;

sqlquery1.SQL.text:='select nombre,telefono1,telefono2,celular,contacto from contactos where '+ combobox1.Items[combobox1.itemindex]+' like '+quotedstr('%'+edit1.text+'%');
sqlquery1.Open;
//sqlquery1.EnableControls;
end

end;
Ya me funciona, parece que tuve un problema en el formcreate y no puse filtered, eso creo, pero ya funciona.
Cuando cambio el indexfieldbyname, tengo que borrar lo que hay en el edit porque sino si me da otravez el error, pero con limpiarlo cada vez que cambio ya lo tengo resuelto.

gracias amigos

Última edición por anubis fecha: 16-11-2009 a las 21:45:05.
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
List Index Out of Bounds(7) Paulao Varios 3 04-07-2008 03:45:14
List Index Out of Bounds(1) Paulao Varios 4 22-05-2008 07:55:26
List Index out of bounds (10) sostro Firebird e Interbase 5 19-05-2005 16:18:06
List Index out of bounds (10)... sostro Conexión con bases de datos 3 17-05-2005 17:00:39
List Index out of Bounds(0) Esau Conexión con bases de datos 3 04-11-2004 10:27:36


La franja horaria es GMT +2. Ahora son las 11:55:57.


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