Jei kuriate duomenų bazių programas su lentelėmis, kuriose yra MEMO laukai, pastebėsite, kad pagal numatytuosius nustatymus TDBGrid komponentas nerodo MEMO lauko turinio DBGrid langelyje.
Šiame straipsnyje pateikiama idėja, kaip išspręsti šią TMemoField problemą (su dar keliais triukais) ...
„TMemoField“
Atminties laukai naudojami atvaizduoti ilgą tekstą arba teksto ir skaičių derinius. Kuriant duomenų bazės programas naudojant „Delphi“, objektas „TMemoField“ yra naudojamas atminties laukui pavaizduoti duomenų rinkinyje. „TMemoField“ apima pagrindinę elgseną, būdingą toms sritims, kuriose yra teksto duomenys arba savavališkas ilgis. Daugelyje duomenų bazių Memo lauko dydį riboja duomenų bazės dydis.
Nors galite atvaizduoti MEMO lauko turinį TDBMemo komponente, suprojektuodamas TDBGrid tokių laukų turiniui rodys tik „(Memo)“.
Norėdami iš tikrųjų rodyti tam tikrą tekstą (iš MEMO lauko) atitinkamame „DBGrid“ langelyje, jums reikės tik pridėti paprastą kodo eilutę ...
Tarkime, kad kitos diskusijos tikslais turite duomenų bazės lentelę pavadinimu „TestTable“ su bent vienu MEMO lauku pavadinimu „Data“.
„OnGetText“
Norėdami parodyti MEMO lauko turinį „DBGrid“, lauko laukelyje turite pridėti paprastą kodo eilutę. „OnGetText“ įvykis. Paprasčiausias būdas sukurti „OnGetText“ įvykių tvarkytuvą yra naudoti laukų redaktorių projektavimo metu, norint sukurti nuolatinį atminties lauko komponentą:
- Prijunkite savo „TDataset“ palikuonių komponentą („TTable“, „TQuery“, „TADOTable“, „TADOQuery“ ...) prie duomenų bazės lentelės „TestTable“.
- Dukart spustelėkite duomenų rinkinio komponentą, kad atidarytumėte laukų redaktorių
- Įtraukite MEMO lauką į nuolatinių laukų sąrašą
- Laukų redaktoriuje pasirinkite lauką MEMO
- Objektų inspektoriuje suaktyvinkite skirtuką „Įvykiai“
- Dukart spustelėkite „OnGetText“ įvykį, kad sukurtumėte įvykių tvarkytuvą
Pridėkite kitą kodo eilutę (kursyvu žemiau):
procedūra TForm1.DBTableDataGetText (
Siuntėjas: TField;
var tekstas: styga;
„DisplayText“: loginis);
prasideda
Tekstas: = Kopijuoti (DBTableData. AsString, 1, 50);
Pastaba: duomenų rinkinio objektas yra vadinamas „DBTable“, MEMO laukas yra vadinamas „DATA“, todėl pagal nutylėjimą prie MEMO duomenų bazės lauko prijungtas TMemoField vadinamas „DBTableData“. Paskirdami „DBTableData“. „AsString“ į Tekstas „OnGetText“ įvykio parametrą, liečiame „Delphi“ parodyti VISĄ tekstą iš „MEMO“ lauko DBGrid langelyje.
Tu taip pat gali pritaikykite ekrano plotį memo laukelį iki tinkamesnės vertės.
Pastaba: kadangi MEMO laukai gali būti gana dideli, patartina parodyti tik dalį jo. Aukščiau pateiktame kode rodomi tik pirmieji 50 simbolių.
Redagavimas atskiroje formoje
Pagal numatytuosius nustatymus „TDBGrid“ neleidžia redaguoti MEMO laukų. Jei norite įgalinti redagavimą „vietoje“, galėtumėte pridėti šiek tiek kodo, kad sureaguotumėte į vartotojo veiksmus, kurie rodo atskirą langą, leidžiantį redaguoti naudojant „TMemo“ komponentą.
Paprastumo dėlei atidarysime redagavimo langą, kai „DBGrid“ lauke „MEMO“ bus paspaustas ENTER.
Panaudosime „KeyDown“ įvykis iš DBGrid komponento:
procedūra TForm1.DBGrid1KeyDown (
Siuntėjas: „TObject“;
var raktas: žodis;
„Shift“: „TShiftState“);
prasideda
jei raktas = VK_RETURN, tada
prasideda
jei DBGrid1.SelectedField = DBTableData, tada
su TMemoEditorForm. Sukurti (nulį) padaryti
bandyti
„DBMemoEditor“. Tekstas: = „DBTableData“. AsString;
„ShowModal“;
„DBTable“. Redaguoti;
„DBTableData“. „AsString“: = „DBMemoEditor“. Tekstas;
pagaliau
Laisvas;
galas;
galas;
galas;
1 pastaba: „TMemoEditorForm“ yra antrinė forma, kurią sudaro tik vienas komponentas: „DBMemoEditor“ (TMemo).
2 pastaba: „TMemoEditorForm“ buvo pašalintas iš dialogo lango „Projekto parinktys“ sąrašo „Automatiškai kurti formas“.
Pažiūrėkime, kas nutinka „DBGrid1“ „KeyDown“ įvykių tvarkytuve:
- Kai vartotojas paspaudžia klavišą ENTER (raktinio elemento parametrą lyginame su VK_RETURN) virtualiojo rakto kodas) [Raktas = VK_RETURN],
- Jei šiuo metu pasirinktas laukas „DBGrid“ yra mūsų MEMO laukas (DBGrid1.SelectedField = DBTableData),
- Mes sukuriame „TMemoEditorForm“ [TMemoEditorForm. Sukurti (nulis)],
- Nusiųskite MEMO lauko vertę į „TMemo“ komponentą [DBMemoEditor. Tekstas: = „DBTableData“. AsString],
- Rodyti formą modališkai [ShowModal],
- Kai vartotojas baigia taisyti ir uždaro formą, turime įvesti duomenų rinkmeną į Redagavimo režimą [DBTable. Redaguoti],
- Kad galėtumėte priskirti redaguotą vertę mūsų MEMO laukui [DBTableData. „AsString“: = „DBMemoEditor“. Tekstas].
Pastaba: jei ieškote daugiau su TDBGrid susijusių straipsnių ir naudojimo patarimų, būtinai apsilankykite:TDBGrid į MAXpatarimų kolekcija.