PDA

Ver la Versión Completa : Mostrar columna del dbgrid en un dbmemo


exequielmatias1
22-08-2013, 02:01:12
Hola! tengo la siguiente pregunta
Necesito mostrar en un dbmemo en forma de lista una columna de un dbgrid que es el resultado de una consulta anterior..

ecfisa
22-08-2013, 02:31:43
Hola.

Me parece mas simple mostrarlo en el Memo directamente desde una consulta.

Por ejemplo:

procedure EncolumnarMemo(const ColName:string; aQuery: TADOQuery; aMemo: TMemo);
begin
aMemo.Lines.BeginUpdate;
aMemo.Clear;
try
with aQuery do
begin
Close;
SQL.Text := 'SELECT ' + ColName + ' FROM TU_TABLA';
Open;
while not Eof do
begin
aMemo.Lines.Add(FieldByName(ColName).AsString);
Next;
end;
Close;
end;
finally
aMemo.Lines.EndUpdate;
end;
end;


Ejemplo del uso:

EncolumnarMemo('NOMBRE_DEL_CAMPO', ADOQuery1, Memo1);


Saludos. :)

exequielmatias1
22-08-2013, 18:16:19
Hola ecfisa, antes que nada muchas gracias! siempre muy atento..
este codigo me funciono! pero me muestra toda la columna de la tabla, yo necesito mostrar en el memo, sólo el resultado de una consulta hecha anteriormente que se muestra en un dbgrid. Es decir pasar los campos mostrados en el dbgrid a un memo
Al ejecutar este codigo me borra el resultado anterior...

ecfisa
22-08-2013, 19:08:49
este codigo me funciono! pero me muestra toda la columna de la tabla, yo necesito mostrar en el memo, sólo el resultado de una consulta hecha anteriormente que se muestra en un dbgrid. Es decir pasar los campos mostrados en el dbgrid a un memo

Hola.

Esa consulta fué un ejemplo, en la práctica deberías repetir la consulta que utilizaste para mostrar la información en el DBGrid, por ejemplo:

...
SQL.Text := 'SELECT ' + ColName + ' FROM TU_TABLA WHERE OTRO_CAMPO BETWEEN 1 AND 50';
...

Al ejecutar este codigo me borra el resultado anterior...
Lo ideal es usar otro componente query para enviarle a la función.


Es decir pasar los campos mostrados en el dbgrid a un memo
Directamente desde el DBGrid sería:

procedure TForm1.EncolumnarMemo(const aFieldName: string);
var
BM: Pointer;
begin
Memo1.Lines.Clear;
with DBGrid1.DataSource.DataSet do
begin
DisableControls;
BM := GetBookmark;
try
while not Eof do
begin
Memo1.Lines.Add(FieldValues[aFieldName]);
Next;
end;
finally
GotoBookmark(BM);
FreeBookmark(BM);
EnableControls;
end;
end;
end;

En ese caso estamos trabajando con el TDataSet que alimenta al DBGrid, por lo que debemos guardar la posición del registro actual antes de recorrerlo para luego dejarlo en su posición original.

Saludos. :)