PDA

Ver la Versión Completa : Urgente!!


gonzabec
19-11-2012, 20:56:30
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;

ecfisa
19-11-2012, 21:12:33
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:

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:

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. :)

cloayza
19-11-2012, 23:37:43
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:

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

jpgonzalez
20-11-2012, 00:32:36
Si no es así...olvida lo que digo.

Un abrazo

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!

cloayza
20-11-2012, 01:01:43
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:


Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;


El ciclo se tornará infinito, ya que le estas agregando una nueva fila al grid...:confused:

ecfisa
20-11-2012, 02:13:28
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.


...
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.:)

jpgonzalez
20-11-2012, 14:03:49
Amigo lo que sucede es que al incluir la linea:


Listas.sgCanciones.RowCount:= Listas.sgCanciones.RowCount+1;


El ciclo se tornará infinito, ya que le estas agregando una nueva fila al grid...:confused:

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!