Si está desarrollando aplicaciones de bases de datos con tablas que contienen campos MEMO, notará que, por defecto, el componente TDBGrid no muestra el contenido de un campo MEMO dentro de una celda DBGrid.
Este artículo proporciona una idea de cómo resolver el problema de este TMemoField (con algunos trucos más) ...
Los campos de notas se utilizan para representar texto extenso o combinaciones de texto y números. Al crear aplicaciones de bases de datos con Delphi, el objeto TMemoField se usa para representar un campo memo en un conjunto de datos. TMemoField encapsula el comportamiento fundamental común a los campos que contienen datos de texto o longitud arbitraria. En la mayoría de las bases de datos, el tamaño del campo Memo está limitado por el tamaño de la base de datos..
Si bien puede mostrar el contenido de un campo MEMO en un componente TDBMemo, por diseño, TDBGrid solo mostrará "(Memo)" para el contenido de dichos campos.
Para mostrar realmente algo de texto (del campo MEMO) en la celda DBGrid apropiada, solo necesitará agregar una línea simple de código ...
Para el propósito de la próxima discusión, supongamos que tiene una tabla de base de datos llamada "TestTable" con al menos un campo MEMO llamado "Datos".
Para mostrar el contenido de un campo MEMO en DBGrid, debe adjuntar una línea simple de código en el campo OnGetText evento. La forma más fácil de crear el controlador de eventos OnGetText es utilizar el editor de campos en tiempo de diseño para crear un componente de campo persistente para el campo memo:
Agregue la siguiente línea de código (en cursiva a continuación):
procedimiento TForm1.DBTableDataGetText (
Remitente: TField;
var Texto: Cadena;
DisplayText: Boolean);
empezar
Texto: = Copiar (DBTableData.AsString, 1, 50);
Nota: el objeto del conjunto de datos se llama "DBTable", el campo MEMO se llama "DATA" y, por lo tanto, el TMemoField conectado al campo de la base de datos MEMO se llama "DBTableData". Asignando DBTableData.AsString al Texto parámetro del evento OnGetText, le decimos a Delphi que muestre TODO el texto del campo MEMO en una celda DBGrid.
También puede adaptar el ancho de pantalla del campo memo a un valor más apropiado.
Nota: dado que los campos MEMO pueden ser bastante GRANDES, es una buena idea mostrar solo una parte de ellos. En el código anterior, solo se muestran los primeros 50 caracteres.
Por defecto, TDBGrid no permite la edición de campos MEMO. Si desea habilitar la edición "en el lugar", puede agregar algún código para reaccionar ante una acción del usuario que muestra una ventana separada que permite la edición utilizando un componente TMemo.
En aras de la simplicidad, abriremos una ventana de edición cuando se presione ENTER "en" un campo MEMO en un DBGrid.
Usemos el KeyDown evento de un componente DBGrid:
procedimiento TForm1.DBGrid1KeyDown (
Remitente: TObject;
Clave var: Word;
Shift: TShiftState);
empezar
si Key = VK_RETURN entonces
empezar
si DBGrid1.SelectedField = DBTableData entonces
con TMemoEditorForm.Create (nil) do
tratar
DBMemoEditor.Text: = DBTableData.AsString;
ShowModal;
DBTable.Edit;
DBTableData.AsString: = DBMemoEditor.Text;
finalmente
Gratis;
final;
final;
final;
Nota 1: el "TMemoEditorForm" es una forma secundaria que contiene solo un componente: "DBMemoEditor" (TMemo).
Nota 2: el "TMemoEditorForm" se eliminó de la lista "Crear automáticamente formularios" en la ventana de diálogo Opciones de proyecto.