Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-11-2012
gonzabec gonzabec is offline
Registrado
NULL
 
Registrado: sep 2012
Posts: 6
Poder: 0
gonzabec Va por buen camino
Urgente!!

Buenas! Tengo un problema que no se como solucionar. Estoy trabajando con base de datos en delphi, y lo que me pasa es que se me clava el .exe cuando ejecuto con este codigo. Lo componentes que trabajo son TTable, DBGrid y DataSource, si alguien me pudiera decir, porq este codigo rompe el programa.
Lo que hago es pasar todo el contenido a Strin Grid y despues trato de recorrer y buscar similitud con TEdit.
Muchas Gracias.
Saludos.

encontrado:=false;
i:=1;
while not (encontrado) and (i <= Listas.sgCanciones.RowCount -1) do
if (Listas.sgCanciones.Cells[0,i] = txtBuscador.Text) then begin
encontrado:=True;
Listas.sgCanciones.RowCount:=Listas.sgCanciones.RowCount+1;
end;
end
end;
Responder Con Cita
  #2  
Antiguo 19-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gonzabec.

Título, falta de etiquetas, falta de detalles,... has roto casi todas las normas de Club Delphi en un solo mensaje!

A ver si primero podemos aclarar el código:
Código Delphi [-]
var
  encontrado: Boolean;
  i: Integer;
begin
  encontrado:=false;
  i:= 1;
  L
  while not (encontrado) and (i <= Listas.sgCanciones.RowCount -1) do
  begin
    if (Listas.sgCanciones.Cells[0,i] = txtBuscador.Text) then
    begin
      encontrado := True;
      Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;
    end;
  end
end;

Si lo acomodé correctamente, lo primero que veo es que no incrementas el valor de 'i', por lo que no salis del ciclo while:
Código Delphi [-]
var
  encontrado: Boolean;
  i: Integer;
begin
  encontrado:=false;
  i:= 1;
  while not encontrado and (i <= Listas.sgCanciones.RowCount -1) do
  begin
    if (Listas.sgCanciones.Cells[0,i] = txtBuscador.Text) then
    begin
      encontrado := True;
      Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;
    end;
    Inc(i); // <=== por ejemplo aquí
  end
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 19-11-2012
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Hola gonzabec.

Si lo acomodé correctamente, lo primero que veo es que no incrementas el valor de 'i', por lo que no salis del ciclo while:
Código Delphi [-]
var
  encontrado: Boolean;
  i: Integer;
begin
  encontrado:=false;
  i:= 1;
  while (i <= Listas.sgCanciones.RowCount -1) do
  begin
    if (Listas.sgCanciones.Cells[0,i] = txtBuscador.Text) then
    begin
          encontrado := True;
          break;
    end;
      //Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1; Para que aumentar el número de filas del Grid...?

    Inc(i); // <=== por ejemplo aquí
  end
  //Creo interpretar que cuando lo encuentra debe posicionarse en la fila correspondiente...
 
  if encontrado then
     Listas.sgCanciones.Row:=i;
end;

Saludos.
Si no es así...olvida lo que digo.

Un abrazo
Responder Con Cita
  #4  
Antiguo 20-11-2012
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Si no es así...olvida lo que digo.

Un abrazo
Código Delphi [-]
if (Listas.sgCanciones.Cells[0,i] = txtBuscador.Text) then begin
   encontrado := True;
   break;
end
else begin
    Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;   // si lo que hace es pasar al siguiente, debe estar en el else 
end;

Por lo que entendi de tu codigo, estas pasando al siguiente de la lista cuando lo encuentras, en lugar de pasar al siguiente si no lo haces.
Abrazo!
Responder Con Cita
  #5  
Antiguo 20-11-2012
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 916
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por jpgonzalez Ver Mensaje
Código Delphi [-]
if (Listas.sgCanciones.Cells[0,i] = txtBuscador.Text) then begin
   encontrado := True;
   break;
end
else begin
    Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;   // si lo que hace es pasar al siguiente, debe estar en el else 
end;

Por lo que entendi de tu codigo, estas pasando al siguiente de la lista cuando lo encuentras, en lugar de pasar al siguiente si no lo haces.
Abrazo!
Amigo lo que sucede es que al incluir la linea:

Código Delphi [-]
 Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;

El ciclo se tornará infinito, ya que le estas agregando una nueva fila al grid...
Responder Con Cita
  #6  
Antiguo 20-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Yo tampoco entiendo el por que de esa línea, pero según lo veo, sólo agrega una fila y es cuando halla una igualdad con la propiedad Text del Edit.

Es decir si Cells[0, i] <> txtBuscador.Text, no se agrega ninguna columna.

Y s iCells[0, i] = txtBuscador.Text, :
  • Pone en verdadero a 'encontrado'.
  • Agrega una línea al StringGrid. (no sé por que motivo).
  • Incrementa a 'i'.
  • Sale del ciclo while ya que 'encontrado' es verdadero.
Código Delphi [-]
...
 encontrado:=false;
  i:= 1;
  while not encontrado and (i <= Listas.sgCanciones.RowCount -1) do
  begin
    if (Listas.sgCanciones.Cells[0,i] = txtBuscador.Text) then
    begin
      encontrado := True;
      Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;
    end;
    Inc(i); // <=== por ejemplo aquí
  end
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 20-11-2012
jpgonzalez jpgonzalez is offline
Miembro
 
Registrado: feb 2010
Posts: 121
Poder: 15
jpgonzalez Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Amigo lo que sucede es que al incluir la linea:

Código Delphi [-]
 Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;

El ciclo se tornará infinito, ya que le estas agregando una nueva fila al grid...
Ok, es cierto lo que dices... de todas maneras, creo que el error esta en que NUNCA incrementa el valor de la variable "i", por lo cual siempre va a valer 1.

Abrazo!
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
urgente!!!! oytelstar@gmail PHP 1 07-12-2005 23:32:34
Urgente!!!!! hanna33 Conexión con bases de datos 1 05-03-2005 00:14:54
Urgente luisperez Varios 6 18-02-2004 19:01:13
urgente! Rata Maligna Internet 2 11-12-2003 15:18:04
Urgente!!!!!! Robert Impresión 1 10-12-2003 18:31:20


La franja horaria es GMT +2. Ahora son las 04:08:10.


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