Computerwissenschaften

Anzeigen und Bearbeiten von MEMO-Feldern in Delphis TDBGrid

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 Idee, wie Sie das Problem mit TMemoField lösen können (mit ein paar weiteren Tricks) …

 

TMemoField

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 ist 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 das 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 …

Angenommen, Sie haben für die nächste Diskussion eine Datenbanktabelle mit dem Namen „TestTable“ mit mindestens einem MEMO-Feld mit dem Namen „Data“.

 

OnGetText

Um den Inhalt eines MEMO-Felds im DBGrid anzuzeigen, müssen Sie dem OnGetText-  Ereignis des Felds eine einfache Codezeile  hinzufügen . Der einfachste Weg, den OnGetText-Ereignishandler zu erstellen, besteht darin, zur Entwurfszeit den Feldeditor zu verwenden, um eine persistente Feldkomponente für das Memofeld zu erstellen:

  1. Verbinden Sie Ihre TDataset-Nachkommenkomponente (TTable, TQuery, TADOTable, TADOQuery …) mit der Datenbanktabelle „TestTable“.
  2. Doppelklicken Sie auf die Dataset-Komponente, um den Feldeditor zu öffnen
  3. Fügen Sie das MEMO-Feld zur Liste der persistenten Felder hinzu
  4. Wählen Sie im Feldeditor das Feld MEMO aus
  5. Aktivieren Sie die Registerkarte Ereignisse im Objektinspektor
  6. Doppelklicken Sie auf das OnGetText-Ereignis, um den Ereignishandler zu erstellen

Fügen Sie die nächste Codezeile hinzu (unten kursiv gedruckt):

Prozedur TForm1.DBTableDataGetText ( 
Absender: TField; 
var Text: String; 
DisplayText: Boolean); Text 
beginnen 
:=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 Zuweisen von  DBTableData.AsString  zum   Parameter Text 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 geeigneteren Wert anpassen .

Hinweis: Da MEMO-Felder ziemlich GROSS sein können, ist es eine gute Idee, nur einen Teil davon anzuzeigen. Im obigen Code werden nur die ersten 50 Zeichen angezeigt.

 

Bearbeiten in einem separaten Formular

Standardmäßig erlaubt das TDBGrid keine Bearbeitung von MEMO-Feldern. Wenn Sie die Bearbeitung „an Ort und Stelle“ aktivieren möchten, können Sie Code hinzufügen, um auf eine Benutzeraktion zu reagieren, die ein separates Fenster anzeigt, in dem die Bearbeitung mit einer TMemo-Komponente möglich ist.
Der Einfachheit halber öffnen wir ein Bearbeitungsfenster, wenn die EINGABETASTE in einem MEMO-Feld in einem DBGrid gedrückt wird.
Verwenden wir das  KeyDown-  Ereignis einer DBGrid-Komponente:

procedure TForm1.DBGrid1KeyDown ( 
Absender: TObject; 
var Key: Word; 
Shift: TShiftState); 
beginne 
wenn Key=VK_RETURN dann 
beginne 
wenn DBGrid1.SelectedField=DBTableData dann versuche 
mit TMemoEditorForm.Create (nil) DBMemoEditor.Text:=DBTableData.AsString; ShowModal; DBTable.Edit; DBTableData.AsString:=DBMemoEditor.Text; endlich frei; Ende; Ende; Ende;











Hinweis 1: Die „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.

Mal sehen, was im KeyDown-Ereignishandler von DBGrid1 passiert:

  1. Wenn ein Benutzer die ENTER-Taste drückt (wir vergleichen den Key-Parameter mit dem virtuellen Schlüsselcode VK_RETURN  ) [Key=VK_RETURN],
  2. Wenn das aktuell ausgewählte Feld im DBGrid unser MEMO-Feld ist (DBGrid1.SelectedField=DBTableData),
  3. Wir erstellen die TMemoEditorForm [TMemoEditorForm.Create (nil)],
  4. Senden Sie den Wert des MEMO-Felds an die TMemo-Komponente [DBMemoEditor.Text:=DBTableData.AsString].
  5. Zeigen Sie das Formular modal an [ShowModal],
  6. Wenn ein Benutzer mit der Bearbeitung fertig ist und das Formular schließt, müssen wir die Datenaste in den Bearbeitungsmodus [DBTable.Edit] versetzen.
  7. Um den bearbeiteten Wert wieder unserem MEMO-Feld [DBTableData.AsString:=DBMemoEditor.Text] zuweisen zu können.

Hinweis: Wenn Sie nach weiteren Artikeln und Verwendungstipps zu TDBGrid suchen, besuchen Sie unbedingt. “ TDBGrid to the MAX. -Tippsammlung .

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.