Dacă dezvoltați aplicații de bază de date cu tabele care conțin câmpuri MEMO, veți observa că, în mod implicit, componenta TDBGrid nu arată conținutul unui câmp MEMO în interiorul unei celule DBGrid.
Acest articol oferă o idee despre cum să rezolvați această problemă a lui TMemoField (cu alte câteva trucuri) ...
Câmpurile memo sunt utilizate pentru a reprezenta text lung sau combinații de text și numere. Când construiți aplicații de baze de date folosind Delphi, obiectul TMemoField este utilizat pentru a reprezenta un câmp memo într-un set de date. TMemoField încapsulează comportamentul fundamental comun câmpurilor care conțin date text sau lungime arbitrară. În majoritatea bazelor de date, dimensiunea câmpului Memo este limitată de dimensiunea bazei de date.
În timp ce puteți afișa conținutul unui câmp MEMO într-o componentă TDBMemo, prin proiectare TDBGrid va afișa doar „(Memo)” pentru conținutul acestor câmpuri.
Pentru a afișa efectiv un text (din câmpul MEMO) în celula DBGrid corespunzătoare, va trebui să adăugați doar o linie simplă de cod ...
Pentru următoarea discuție, să spunem că aveți un tabel de baze de date numit „TestTable” cu cel puțin un câmp MEMO numit „Date”.
Pentru a afișa conținutul unui câmp MEMO în DBGrid, trebuie să atașați o linie simplă de cod în câmpul OnGetText eveniment. Cel mai simplu mod de a crea gestionatorul de evenimente OnGetText este de a utiliza editorul Fields la momentul proiectării pentru a crea o componentă de câmp persistentă pentru câmpul memo:
Adăugați următoarea linie de cod (cu caractere italice mai jos):
procedura TForm1.DBTableDataGetText (
Expeditor: TField;
var Text: șir;
DisplayText: Boolean);
începe
Text: = Copiere (DBTableData.AsString, 1, 50);
Notă: obiectul setului de date se numește "DBTable", câmpul MEMO se numește "DATA" și, prin urmare, în mod implicit, TMemoField conectat la câmpul bazei de date MEMO se numește "DBTableData". Prin atribuire DBTableData.AsString la Text parametrul evenimentului OnGetText, îi spunem lui Delphi să afișeze TOATE textul din câmpul MEMO într-o celulă DBGrid.
De asemenea, puteți adapta DisplayWidth of câmpul de memorie la o valoare mai potrivită.
Notă: întrucât câmpurile MEMO pot fi destul de mari, este bine să arătați doar o parte din acesta. În codul de mai sus, sunt afișate doar primele 50 de caractere.
În mod implicit, TDBGrid nu permite editarea câmpurilor MEMO. Dacă doriți să activați editare „în loc”, puteți adăuga unele coduri pentru a reacționa la o acțiune a utilizatorului care arată o fereastră separată care permite editarea folosind o componentă TMemo.
Din simplitate, vom deschide o fereastră de editare atunci când ENTER este apăsat „pe” un câmp MEMO dintr-un DBGrid.
Să folosim Tasta în jos eveniment al unei componente DBGrid:
procedura TForm1.DBGrid1KeyDown (
Expeditor: TObject;
var Cheie: Cuvânt;
Shift: TShiftState);
începe
dacă cheie = VK_RETURN atunci
începe
dacă DBGrid1.SelectedField = DBTableData atunci
cu TMemoEditorForm.Create (nil) do
încerca
DBMemoEditor.Text: = DBTableData.AsString;
ShowModal;
DBTable.Edit;
DBTableData.AsString: = DBMemoEditor.Text;
in cele din urma
Liber;
Sfârșit;
Sfârșit;
Sfârșit;
Nota 1: „TMemoEditorForm” este o formă secundară care conține o singură componentă: „DBMemoEditor” (TMemo).
Nota 2: „TMemoEditorForm” a fost eliminat din lista „Formulare de creare automată” din fereastra de dialog Opțiuni de proiect..