Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   memo en dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=12618)

JoseQ 22-07-2004 10:01:10

memo en dbgrid
 
Buenas, tengo un campo memo en una tabla paradox, en mi programa tengo un dbgrid conectado a esa base de datos y con ese campo visible, mi problema es que no puedo ni editar ni ver el contenido del memo en el dbgrid, alguien sabe si no se puede ?gracias;

ruina 22-07-2004 10:21:29

no, no se puede, lo normal es poner un dbmemo aparte conectado a la misma tabla que muestre/edite el contenido del memo.


si realmente necesitas sacar ese contenido tipo Grid puedes optar por:
a) hacerte un campo calculado string que sean los xx primeros caracteres del memo

b) usar DBControlGrid para sacar varios memos

Yo optaria por la primera opción de solo ver el memo del registro activo, si andas maL de sitio en el formulario puedes usar botones de elipsis en el grid (propiedades de la columna, ButtonStyle -> cbsEllipsis) y si lo pulsan saltará el evento OnEditButtonClick del grid, puedes saber la columna sobre la que se ha pulsado (si tubieras varios memos en el mismo registro) mediante DBGrid1.SelectedField, entonces sacas otra ventana o un frame o lo que quieras con un DBMemo

no se si me he explicado bien....

JoseQ 22-07-2004 10:28:13

si, si te entiendo,eso es lo que se me habia ocurrido, supongo k seguire x ahi, gracias

judoboy 22-07-2004 10:41:17

Todo depende del tipo de base de datos que uses, yo con Interbase, si que puedo mostrar los MEMO en un DBGrid, haciendo, lo siguiente:

En los Eventos del correspondiente campo de tipo memo pon esto

En el OnGetText:

Text:= Trim (Sender.asString);

En el OnSetText:

Sender.AsString:=Text;

yo con esto consigo mostrar en un dbgrid un campo de tipo memo

Neftali [Germán.Estévez] 22-07-2004 10:50:50

Si redefines el evento de dibujar las celdas en el DBGrid sí se puede mostrar el contenido de un memo.

Se puede acceder al campo utilizando un BlobStream:
var
P: array [0..50] of char; {array size is number of
characters needed}
bs: TBlobStream; {from the memo field}
hStr: String;
begin
with (Sender as TDBGrid).Canvas do
begin {Table1_NombreCampo es el TMemoField}
bs := TBlobStream.Create(Table1_NombreCampo, bmRead);
FillChar(P,SizeOf(P),#0);
bs.Read(P, 50); {Carga los 50 primeros caracteres}
bs.Free;
hStr := StrPas(P);
{cambia saltos de carro y final de linea por espacios}
while Pos(#13, hStr) > 0 do
hStr[Pos(#13, hStr)] := ' ';
while Pos(#10, hStr) > 0 do
S[Pos(#10, hStr)] := ' ';
// limpia la celda
FillRect(Rect);
// pinta el texto
TextOut(Rect.Left, Rect.Top, hStr);
end;
end;

JoseQ 22-07-2004 10:58:10

mui buena, funciona mui bien, gracias

Neftali thanks a ti tb, aunk kreo k me kedo con la otra solucion, mas k nada x lo corto
xD
GRacias a los 3


La franja horaria es GMT +2. Ahora son las 10:45:13.

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