FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
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;
|
#2
|
||||
|
||||
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.... |
#3
|
|||
|
|||
si, si te entiendo,eso es lo que se me habia ocurrido, supongo k seguire x ahi, gracias
|
#4
|
|||
|
|||
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 |
#5
|
||||
|
||||
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;
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
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 |
|
|
|