Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 28
Poder: 0
michal Va por buen camino
Problema con mostrar campo MEMO en DBGrid

Hola otra vez
Ahora estoy presentando otro problema
Tengo una base de datos en access y uso componentes ADO en C++Builder6, en algunas tablas tengo campos de tipo MEMO, y el DBGrid no me muestra su contenido, solo pone la palabra MEMO.
Cómo se puede solucionar ese problema??

Desde ya, muchas gracias.

Última edición por Neftali [Germán.Estévez] fecha: 05-03-2024 a las 08:25:51.
Responder Con Cita
  #2  
Antiguo 05-03-2024
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 72
Poder: 11
chenech Va por buen camino
Hasta donde yo se, no se puede mostrar con el DBGrid estándar que viene, si alguien con mas experiencia en Grid sabe yo me aprovecharia también :-).
Tendrías que usar otro, tipo TMS, DevExpress, etc.
Yo lo que hago es que si se que es una imagen o un PDF o lo que sea que guardo, pongo un cbsEllipsis o como se llame, que pone un button en el grid para que al pulsarlo abra el blob en una ventana mostrando la imagen, jpg, memo, etc. según lo que tenga guardado en el blob.
Responder Con Cita
  #3  
Antiguo 05-03-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 28
Poder: 0
michal Va por buen camino
No, no es nada raro, solo el contenido un un campo tipo texto(MEMO) en una bd access
Responder Con Cita
  #4  
Antiguo 05-03-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por michal Ver Mensaje
Tengo una base de datos en access y uso componentes ADO en C++Builder6, en algunas tablas tengo campos de tipo MEMO, y el DBGrid no me muestra su contenido, solo pone la palabra MEMO.
Cómo se puede solucionar ese problema??

No es necesario ningún componente externo.
Hay varias formas de hacerlo, pero una sencilla es utilizar los eventos del propio campo (TField) de tipo memo.

1) Pulsa click derecho sobre la Query o Tabla que estés usando para acceder a los Datos
2) Escoge "Fields Editor" y añádelos todos
3) Selecciona el campo de Tipo memo y en el evento OnGetText escribe lo siguiente:

Código Delphi [-]
Text := TField(Sender).AsString;

Con eso aparecerá en la celda el contenido del Memo.
Si tienes varias líneas y quieres que aparezcan correctamente, basta con sustituir los "saltos de línea" por espacios; Para ello utiliza esta:
Código Delphi [-]
Text := AnsiReplaceText(TField(Sender).AsString, #13#10, ' ');

Es código Delphi, pero creo que es sencillo de trasladar a C++Builder
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 05-03-2024 a las 09:09:27.
Responder Con Cita
  #5  
Antiguo 05-03-2024
michal michal is offline
Miembro
 
Registrado: feb 2015
Posts: 28
Poder: 0
michal Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
No es necesario ningún componente externo.
Hay varias formas de hacerlo, pero una sencilla es utilizar los eventos del propio campo (TField) de tipo memo.

1) Pulsa click derecho sobre la Query o Tabla que estés usando para acceder a los Datos
2) Escoge "Fields Editor" y añádelos todos
3) Selecciona el campo de Tipo memo y en el evento OnGetText escribe lo siguiente:

Código Delphi [-]Text := TField(Sender).AsString;


Con eso aparecerá en la celda el contenido del Memo.
Si tienes varias líneas y quieres que aparezcan correctamente, basta con sustituir los "saltos de línea" por espacios; Para ello utiliza esta:
Código Delphi [-]Text := AnsiReplaceText(TField(Sender).AsString, #13#10, ' ');


Es código Delphi, pero creo que es sencillo de trasladar a C++Builder
/////
Gracias por la solución.


El tema es que no puedo buscar los campos en el Field Editor porque mi consulta es creada mediante código, o sea, no está en la propiedad SQL del TADOQuery, y por supuesto, al intentar extraer los campos, me da error pq todavia no existe la consulta, me explico?


Entonces supongo que deberé hacer algo aprecido a cuando en un post anterior para el uso de DisplayFormat, tuve que usar castings porque igual tenia que acceder a un campo de una consulta, en tiempo de diseño, y no podia usar Field Editor porque en ese momento no existían esos campos aún, porque la consulta no habia sido ejecutada.


Pero gracias por la idea, lo haré y luego traduciré a C++Builder la idea que propones
Responder Con Cita
  #6  
Antiguo 05-03-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por michal Ver Mensaje
El tema es que no puedo buscar los campos en el Field Editor porque mi consulta es creada mediante código, o sea, no está en la propiedad SQL del TADOQuery, y por supuesto, al intentar extraer los campos, me da error pq todavia no existe la consulta, me explico?

Correcto.
Pues si la consulta la montas en ejecución, esto también lo montas en ejecución. Si funciona lo uno, también funciona lo otro.

Mantienes el procedimiento anterior para el evento y lo defines en la parte privada del form:

Código Delphi [-]
...
  private
    procedure ChangeMemoGetText(Sender: TField; var Text: string; DisplayText: Boolean);
...


Y luego después de asignar la SQL, creas las definiciones de campos y "enganchas" el evento.
A partir de ahí el funcionamiento es el mismo que si lo hubieras hecho en diseño.

Código Delphi [-]
...
var
  fd:TFieldDef;
  f:TField;
begin
  // ...  suponiendo que el campo se llame MEMO...
  if not ADOQuery1.Active then begin
    // Asigno la SQL en tiempo de ejecución
    ADOQuery1.SQL.Text := 'Select * from Tabla1';
    // Fuerzo el Update de las definiciones
    ADOQuery1.FieldDefs.Update;
    // Me aseguro de que la definición está
    fd := ADOQuery1.FieldDefs.Find('memo');
    if Assigned(fd) then begin
      // me "engancho" el evento igual que si lo asignara en visual
      ADOQuery1.FindField('memo').OnGetText := ChangeMemoGetText;
    end;

    ...
    Activo la query...
  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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mostrar campo memo en quickreport dtomeysoto Impresión 3 16-12-2009 15:04:58
Mostrar Memo en DBGrid, uso paradox y Delphi 6 Forest Tablas planas 2 01-09-2007 00:38:30
problema con campo memo en un dbgrid dcamp Conexión con bases de datos 3 24-10-2005 14:51:49
Mostrar un campo Memo en un Reporte rjsitruiz Impresión 5 10-07-2004 20:24:56
¿Como mostrar un campo Memo en un DBGrid de una Query? judoboy OOP 5 07-05-2003 04:36:19


La franja horaria es GMT +2. Ahora son las 10:51:54.


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
Copyright 1996-2007 Club Delphi