Als u database-applicaties ontwikkelt met tabellen die MEMO-velden bevatten, zult u merken dat de component TDBGrid standaard niet de inhoud van een MEMO-veld in een DBGrid-cel toont.
Dit artikel geeft een idee van hoe het probleem van dit TMemoField op te lossen (met nog een paar trucs) ...
Memovelden worden gebruikt om lange tekst of combinaties van tekst en cijfers weer te geven. Bij het bouwen van databasetoepassingen met Delphi wordt het TMemoField-object gebruikt om een memoveld in een gegevensset weer te geven. TMemoField omvat het fundamentele gedrag van velden die tekstgegevens of een willekeurige lengte bevatten. In de meeste databases wordt de grootte van het memoveld beperkt door de grootte van de database.
Hoewel u de inhoud van een MEMO-veld in een TDBMemo-component kunt weergeven, geeft de TDBGrid door ontwerp alleen "(Memo)" weer voor de inhoud van dergelijke velden.
Om daadwerkelijk wat tekst (uit het MEMO-veld) in de juiste DBGrid-cel weer te geven, hoeft u alleen een eenvoudige coderegel toe te voegen ...
Stel dat u voor de volgende discussie een databasetabel met de naam 'TestTable' hebt met ten minste één MEMO-veld met de naam 'Data'.
Om de inhoud van een MEMO-veld in de DBGrid weer te geven, moet u een eenvoudige coderegel in de velden toevoegen OnGetText evenement. De eenvoudigste manier om de OnGetText-gebeurtenishandler te maken, is door tijdens het ontwerp de Velden-editor te gebruiken om een persistent veldonderdeel voor het memoveld te maken:
Voeg de volgende coderegel toe (hieronder cursief):
procedure TForm1.DBTableDataGetText (
Afzender: TField;
var Tekst: String;
DisplayText: Boolean);
beginnen
Tekst: = Kopiëren (DBTableData.AsString, 1, 50);
Opmerking: het gegevenssetobject wordt "DBTable" genoemd, het MEMO-veld wordt "DATA" genoemd en daarom wordt het TMemoField dat is verbonden met het MEMO-databaseveld standaard "DBTableData" genoemd. Door toe te wijzen DBTableData.AsString naar de Tekst parameter van de OnGetText-gebeurtenis, we vertellen Delphi om ALLE tekst uit het MEMO-veld in een DBGrid-cel weer te geven.
U kunt ook de DisplayWidth van het memoveld aanpassen aan een meer geschikte waarde.
Opmerking: aangezien MEMO-velden behoorlijk GROOT kunnen zijn, is het een goed idee om er slechts een deel van te tonen. In de bovenstaande code worden alleen de eerste 50 tekens weergegeven.
Standaard staat de TDBGrid het bewerken van MEMO-velden niet toe. Als u "op zijn plaats" bewerken wilt inschakelen, kunt u een code toevoegen om te reageren op een gebruikersactie die een apart venster toont dat bewerken met een TMemo-component mogelijk maakt.
Omwille van de eenvoud openen we een bewerkingsvenster wanneer op ENTER wordt gedrukt op een MEMO-veld in een DBGrid.
Laten we de gebruiken Toets neer gebeurtenis van een DBGrid-component:
procedure TForm1.DBGrid1KeyDown (
Afzender: TObject;
var Sleutel: Word;
Shift: TShiftState);
beginnen
als Sleutel = VK_RETURN dan
beginnen
als DBGrid1.SelectedField = DBTableData dan
met TMemoEditorForm.Create (nihil) doen
proberen
DBMemoEditor.Text: = DBTableData.AsString;
ShowModal;
DBTable.Edit;
DBTableData.AsString: = DBMemoEditor.Text;
Tenslotte
Vrij;
einde;
einde;
einde;
Opmerking 1: de "TMemoEditorForm" is een secundaire vorm die slechts één component bevat: "DBMemoEditor" (TMemo).
Opmerking 2: de "TMemoEditorForm" is verwijderd uit de lijst "Formulieren automatisch maken" in het dialoogvenster Projectopties.