Wenn Sie Datenbankanwendungen mit Tabellen entwickeln, die MEMO-Felder enthalten, werden Sie feststellen, dass die TDBGrid-Komponente standardmäßig nicht den Inhalt eines MEMO-Felds in einer DBGrid-Zelle anzeigt.
Dieser Artikel bietet eine Vorstellung davon, wie Sie das Problem mit TMemoField lösen können (mit ein paar weiteren Tricks)…
Memofelder werden verwendet, um langen Text oder Kombinationen aus Text und Zahlen darzustellen. Beim Erstellen von Datenbankanwendungen mit Delphi wird das TMemoField-Objekt verwendet, um ein Memofeld in einem Dataset darzustellen. TMemoField kapselt das grundlegende Verhalten von Feldern, die Textdaten oder eine beliebige Länge enthalten. In den meisten Datenbanken wird die Größe des Memofelds durch die Größe der Datenbank begrenzt.
Während Sie den Inhalt eines MEMO-Felds in einer TDBMemo-Komponente anzeigen können, zeigt TDBGrid standardmäßig nur "(Memo)" für den Inhalt solcher Felder an.
Um tatsächlich Text (aus dem MEMO-Feld) in der entsprechenden DBGrid-Zelle anzuzeigen, müssen Sie nur eine einfache Codezeile hinzufügen ...
Nehmen wir für die nächste Diskussion an, Sie haben eine Datenbanktabelle mit dem Namen "TestTable" und mindestens einem MEMO-Feld mit dem Namen "Data"..
Um den Inhalt eines MEMO-Feldes im DBGrid anzuzeigen, müssen Sie eine einfache Codezeile in das Feld einfügen OnGetText Veranstaltung. Die einfachste Methode zum Erstellen des OnGetText-Ereignishandlers besteht darin, zur Entwurfszeit den Felder-Editor zu verwenden, um eine beständige Feldkomponente für das Memofeld zu erstellen:
Fügen Sie die nächste Codezeile hinzu (kursiv unten):
procedure TForm1.DBTableDataGetText (
Absender: TField;
var Text: String;
DisplayText: Boolean);
Start
Text: = Kopieren (DBTableData.AsString, 1, 50);
Hinweis: Das Dataset-Objekt heißt "DBTable", das MEMO-Feld heißt "DATA" und daher heißt das mit dem MEMO-Datenbankfeld verbundene TMemoField standardmäßig "DBTableData". Durch Zuweisung DBTableData.AsString zum Text Mit dem Parameter des OnGetText-Ereignisses weisen wir Delphi an, den gesamten Text aus dem MEMO-Feld in einer DBGrid-Zelle anzuzeigen.
Sie können auch die Anzeigebreite des Memofelds an einen angemesseneren Wert anpassen.
Hinweis: Da MEMO-Felder sehr groß sein können, ist es eine gute Idee, nur einen Teil davon anzuzeigen. Im obigen Code werden nur die ersten 50 Zeichen angezeigt.
Standardmäßig erlaubt das TDBGrid keine Bearbeitung von MEMO-Feldern. Wenn Sie die direkte Bearbeitung aktivieren möchten, können Sie Code hinzufügen, um auf eine Benutzeraktion zu reagieren, in der ein separates Fenster angezeigt wird, in dem die Bearbeitung mit einer TMemo-Komponente möglich ist.
Der Einfachheit halber öffnen wir ein Bearbeitungsfenster, wenn in einem MEMO-Feld in einem DBGrid die EINGABETASTE gedrückt wird.
Lass uns das benutzen Taste nach unten Ereignis einer DBGrid-Komponente:
procedure TForm1.DBGrid1KeyDown (
Absender: TObject;
var Schlüssel: Word;
Shift: TShiftState);
Start
wenn Schlüssel = VK_RETURN dann
Start
wenn DBGrid1.SelectedField = DBTableData dann
mit TMemoEditorForm.Create (nil) machen
Versuchen
DBMemoEditor.Text: = DBTableData.AsString;
ShowModal;
DBTable.Edit;
DBTableData.AsString: = DBMemoEditor.Text;
schließlich
Kostenlos;
Ende;
Ende;
Ende;
Hinweis 1: Das "TMemoEditorForm" ist eine sekundäre Form, die nur eine Komponente enthält: "DBMemoEditor" (TMemo).
Hinweis 2: Das "TMemoEditorForm" wurde aus der Liste "Formulare automatisch erstellen" im Dialogfeld "Projektoptionen" entfernt.