PDA

Ver la Versión Completa : Cargar lista simple dentro de stringgrid


Neg90
01-07-2014, 01:02:14
Buenas tengo que pedirles ayuda a ver si alguien se da cuenta donde esta el error, ya hace rato que trato de solucionarlo y me cerré, tengo que desde una lista de números, (ISBN, este es un numero de una tabla Libro), hago una consulta sql y traigo datos, los cuales cargo en un stringGrid, y necesito hacer un botón "refrescar" lo que hace es borrar todo el stringGrid y cargar los datos que traigo del Query . Ahora el problema en si, si hago click en "refrescar" por ejemplo teniendo 4 Libros cargados en la lista y en el stringGrid, cuando vuelve a cargarlos solo me carga los 3 últimos, debo estar usando mal algo en stringGrid ya no me doy cuenta. No estoy pidiendo que nadie me resuelva el problema , y también aclaro que no es un programa que yo este vendiendo, eso solo un trabajo que estamos haciendo para la universidad . Muchas gracias.


procedure TFormCatalogoLibros.SpeedButton8Click(Sender: TObject);
var
cont1,cont,i:integer;
aux:Lista;
begin

Carrito.SQL.Text:='Select * From Libro where (ISBN =:Dato)'; //consulta de donde saco los datos
//Borrar todo de stringGrid
for cont :=0 to Stringgrid1.colcount-1 do
for cont1 :=0 to stringgrid1.rowcount-1 do
stringgrid1.Cells[cont,cont1] := '';
StringGrid1.Rowcount:=1;
//Cargo nuevamente el stringGrid con datos de la lista
Aux:=L; //L es la lista original que contiene los numeros , la paso a aux por si las dudas nada mas.
while (Aux <> Nil) do begin
Carrito.close;
Carrito.Parameters.ParamByName('Dato').Value:=aux.Datos;
Carrito.Active:=True;
Carrito.Open;
StringGrid1.Cells[0,StringGrid1.Row]:=Carrito.FieldByName('ISBN').AsString ;
StringGrid1.Cells[1,StringGrid1.Row]:=Carrito.FieldByName('Titulo').AsString ;
StringGrid1.Cells[2,StringGrid1.Row]:=Carrito.FieldByName('Autor').AsString;
StringGrid1.Cells[3,StringGrid1.Row]:=Carrito.FieldByName('Editorial').AsString;
StringGrid1.Cells[4,StringGrid1.Row]:=CurrToStr(Carrito.FieldByName('Precio').AsCurrency);
StringGrid1.Row:=StringGrid1.Rowcount - 1;
//Agranda la tabla con una fila mas
with StringGrid1 do
begin
RowCount := RowCount +1;
for i:= RowCount - 1 downto StringGrid1.Rowcount - 1 do
Rows[i]:= Rows[i-1];
Rows[StringGrid1.Rowcount - 1].Clear;
end;
Aux:=Aux^.sig;
end;

end;

ecfisa
01-07-2014, 04:26:41
Hola Neg90.

Según lo que te entendí, haría:

procedure TFormCatalogoLibros.SpeedButton0Click(Sender: TObject);
var
i: Integer;
begin
with StringGrid1 do
begin
// Limpiar datos previos
for i := 0 to RowCount - 1 do Rows[i].Clear;
Row:= 1;
// Obtener columnas, poner títulos
Carrito.Close;
Carrito.SQL.Text:= 'SELECT * FROM LIBRO';
Carrito.Open;
ColCount:= Carrito.FieldCount; // Nro columnas = Nro campos
FixedCols:= 0;
FixedRows:= 1;
// Poner títulos de columna
for i:= 0 to ColCount-1 do
Cells[i,0]:= Carrito.Fields[i].FieldName;
// Preparar consulta
Carrito.Close;
Carrito.SQL.Text:= 'SELECT * FROM LIBRO WHERE ISBN = :PISBN';
Carrito.Prepare;
while Lista <> nil do
begin
Carrito.Close;
Carrito.ParamByName('PISBN').AsString:= Lista.Dato;
Carrito.Open;
// Pasar registos a celdas
while not Carrito.Eof do
begin
for i:= 0 to ColCount-1 do Cells[i, Row]:= Carrito.Fields[i].AsString;
Carrito.Next;
Row:= Row + 1;
RowCount:= RowCount + 1;
end;
Lista:= Lista^.Sig;
end;
end;
end;


Saludos :)