Unit umemtable;
Interface
Uses
System.sysutils, System.types, System.uitypes, system.classes, System.variants,
FMX. Types, FMX. Controls, FMX. Forms, FMX. Graphics, FMX. Dialogs, System.rtti,
FMX. Layouts, FMX. Grid, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param,
FireDAC.Stan.Error, Firedac.dats, FireDAC.Phys.Intf, FireDAC.DApt.Intf, Data.db,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, FMX. Controls.presentation, Fmx.stdctrls,
DATA.BIND.ENGEXT, Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs,
Fmx.Bind.Editors, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX. Edit;
Type
TForm1 = Class (Tform)
Button1:tbutton;
fdmemtable1:tfdmemtable;
Datasource1:tdatasource;
Grid1:tgrid;
Bndsrcdb1:tbindsourcedb;
Bndngslst1:tbindingslist;
Lnkgrdtdtsrcbindsourcedb:tlinkgridtodatasource;
Button2:tbutton;
Button3:tbutton;
Button4:tbutton;
Edit1:tedit;
Edit2:tedit;
Edit3:tedit;
Lbl1:tlabel;
Label1:tlabel;
Label2:tlabel;
Button5:tbutton;
Button6:tbutton;
Button7:tbutton;
Button8:tbutton;
Button9:tbutton;
Button10:tbutton;
Button11:tbutton;
Button12:tbutton;
Button13:tbutton;
Button14:tbutton;
Button15:tbutton;
Button16:tbutton;
Button17:tbutton;
Procedure Button1Click (Sender:tobject);
Procedure Button2click (Sender:tobject);
Procedure Button5click (Sender:tobject);
Procedure Button6click (Sender:tobject);
Procedure Button8click (Sender:tobject);
Procedure Button7click (Sender:tobject);
Procedure Button9click (Sender:tobject);
Procedure Button10click (Sender:tobject);
Procedure Button11click (Sender:tobject);
Procedure Button12click (Sender:tobject);
Procedure Button13click (Sender:tobject);
Procedure Button14click (Sender:tobject);
Procedure Button15click (Sender:tobject);
Procedure Button16click (Sender:tobject);
Procedure Button17click (Sender:tobject);
Private
{Private declarations}
Public
{Public declarations}
End
Var
Form1:tform1;
Id:integer;
Implementation
{$R *.FMX}
Procedure Tform1.button10click (Sender:tobject);
Begin
Empty
Fdmemtable1.emptyview;
End
Procedure Tform1.button11click (Sender:tobject);
Var
Frow, Frow2:tfddatsrow;
Begin
Frow: = FDMEMTABLE1.TABLE.ROWS.ADD ([1, ' Hello ', ' 2015-09-15 ']);
FRow2: = FDMemTable1.Table.NewRow ();
Frow2.setvalues ([2, ' Hello2 ', ' 2015-09-15 ']);
FDMEMTABLE1.TABLE.ROWS.ADD (FROW2);
The following Method 2 shows an increase in success
Fdmemtable1.cachedupdates;
Fdmemtable1.commitupdates;
Fdmemtable1.applyupdates;
Fdmemtable1.commitupdates;
End
Procedure Tform1.button12click (Sender:tobject);
Begin
Fdmemtable1.filter: = ' Value = ' + quotedstr (' Hello ');
fdmemtable1.filtered: = True;
End
Procedure Tform1.button13click (Sender:tobject);
Begin
Fdmemtable1.filter: = ' Value = ' ' Hello ';
Fdmemtable1.filter: = ' Value = ' hel* ';
When focaseinsensitive, the conditional string literals in the "Filter" property are not case-sensitive when compared to field values.
Fonopartialcompare Force Delphi to interpret an asterisk (*) as a literal character rather than a wildcard. By default,
Filteroptions set to Empty
Fdmemtable1.filteroptions: = [focaseinsensitive];
fdmemtable1.filtered: = True;
End
Procedure Tform1.button14click (Sender:tobject);
Begin
Fdmemtable1.filter: = ' Value like ' ' hel% ';
fdmemtable1.filtered: = True;
End
Procedure Tform1.button15click (Sender:tobject);
Begin
Fdmemtable1.filter: = ' id<10 and Value like ' he% ';
fdmemtable1.filtered: = True;
End
Procedure Tform1.button16click (Sender:tobject);
Var
Fconnintf:ifdphysconnection;
Fcommintf:ifdphyscommand;
Omechfilter:tfddatsmechfilter;
Fdataview:tfddatsview;
Begin
Fdataview: = FDMemTable1.Table.DefaultView;
Fdataview.sort: = ' Id ASC ';
FDataView.Mechanisms.AddSort (' Id DESC; Value ASC ');
FDMemTable1.View.Mechanisms.AddSort (' Id ');
FDataView.Mechanisms.Clear;
fdmemtable1.view.sort:= ' Id DESC; '
FDMemTable1.View.SortingMechanism;
4) Filtering
Omechfilter: = tfddatsmechfilter.create (' ID > 3 ');
FDMEMTABLE1.VIEW.MECHANISMS.ADD (Omechfilter);
FDefaultView.Mechanisms.Clear;
5) too
FDMemTable1.View.Mechanisms.AddFilter (' Id DESC ');
FDefaultView.Mechanisms.Clear;
FDefaultView.Mechanisms.Clear;
5) too
FDefaultView.Mechanisms.AddFilter (' ID > 5 ');
FDefaultView.Mechanisms.Clear;
End
Procedure Tform1.button17click (Sender:tobject);
Var
Omech:tfddatsmechfilter;
I:integer;
Fdataview:tfddatsview;
Begin
Fdataview: = FDMemTable1.Table.DefaultView;
Locate row using locating mechanism
Omech: = Tfddatsmechfilter.create (' id=5 ');
Omech.locator: = True;
FDATAVIEW.MECHANISMS.ADD (Omech);
Fdataview.locate (I, True, true);
If I <>-1 Then
Begin
ShowMessage (' find delete ');
fdataview.de;
End
Else
Begin
ShowMessage (' NO ');
End
FDataView.Mechanisms.Clear;
End
Procedure Tform1.button1click (Sender:tobject);
Var
I:integer;
Begin
If Fdmemtable1.active Then
Fdmemtable1.close;
With Fdmemtable1.fielddefs do
Begin
Clear;
ADD (' Id ', Ftinteger, 0, False);
ADD (' Value ', ftstring, False);
ADD (' time ', Ftdatetime, 0, False);
End
With Fdmemtable1.indexdefs do
Begin
Clear;
ADD (' Index1 ', ' Id ', []); Defining an index positive order
ADD (' Index1 ', ' Id ', [ixdescending]); Define index Reverse
End
Fdmemtable1.createdataset;
For I: = 1 to
Begin
Fdmemtable1.appendrecord ([I, ' ID ' + inttostr (i), now ()]);
End
End
Procedure Tform1.button2click (Sender:tobject);
Begin
Fdmemtable1.appendrecord ([Strtoint (Edit1.text), Edit2.text, Strtodate (Edit3.text)]);
End
Procedure Tform1.button5click (sender:tobject);
var
Fld_id:tintegerfield;
Fld_value:tstringfield;
Fld_time:tdatetimefield;
I:integer;
Begin
//Insert
with FDMemTable1 do
begin
Disablecontrols;//Disconnect Data-aware control
Try
Open;//open
//define field
fld_id: = Tintegerfield (Fieldbyname (' Id '));
Fld_value: = Tstringfield (Fieldbyname (' Value '));
Fld_time: = Tdatetimefield (Fieldbyname (' time '));
for I: = 0 to 9 do
begin
Inc (Id);
Append; Append Data
//Assignment
Fld_id.asinteger: = ID;
Fld_value.asstring: = ' Hello pfeng! ' + inttostr (ID);
fld_time.asdatet IME: = Now;
Post;//OK
end;
//updateindexes;//Update index
finally
Enablecontrols;//Connect Data-aware control
end;
End;
End;
Procedure Tform1.button6click (Sender:tobject);
Var
Fld_id:tintegerfield;
Fld_value:tstringfield;
Fld_time:tdatetimefield;
Begin
Update
With FDMemTable1 do
Begin
Open;
fld_id: = Tintegerfield (Fieldbyname (' Id '));
Fld_value: = Tstringfield (Fieldbyname (' Value '));
Fld_time: = Tdatetimefield (Fieldbyname (' time '));
If Locate (' Id ', 5, []) then
Begin
Edit;
Fld_value.asstring: = ' content modified ';
Fld_time.asdatetime: = Now;
Post;
End
End
End
Procedure Tform1.button7click (Sender:tobject);
Var
Fld_id:tintegerfield;
Fld_value:tstringfield;
Fld_time:tdatetimefield;
Begin
Delete
With FDMemTable1 do
Begin
Open;
fld_id: = Tintegerfield (Fieldbyname (' Id '));
Fld_value: = Tstringfield (Fieldbyname (' Value '));
Fld_time: = Tdatetimefield (Fieldbyname (' time '));
If Locate (' Id ', 5, []) then
Begin
Delete;
updateindexes;
End
End
End
Procedure Tform1.button8click (sender:tobject);
var
Fld_id:tintegerfield;
Fld_value:tstringfield;
Fld_time:tdatetimefield;
Begin
//query
with FDMemTable1 do
begin
Open;
fld_id: = Tintegerfield (Fieldbyname (' Id '));
Fld_value : = Tstringfield (Fieldbyname (' Value '));
Fld_time: = Tdatetimefield (Fieldbyname (' time '));
If Locate (' Id ', 5, []) then
ShowMessage (fld_value.asstring),
//can also be implemented with FindKey, combined with faster indexing speed
// kbmmemtable1.indexfieldnames:= ' Id ';
//If Kbmmemtable1.findkey ([5]) then ...
End;
End;
Procedure Tform1.button9click (Sender:tobject);
Var
Fld_id:tintegerfield;
Fld_value:tstringfield;
Fld_time:tdatetimefield;
Id:integer;
Begin
Cycle Compare Minimum value
With FDMemTable1 do
Begin
Open;
fld_id: = Tintegerfield (Fieldbyname (' Id '));
Fld_value: = Tstringfield (Fieldbyname (' Value '));
Fld_time: = Tdatetimefield (Fieldbyname (' time '));
Disablecontrols;
Try
First;
ID: = Fld_id.asinteger;
While don't Eof do
Begin
If ID > Fld_id.asinteger Then
ID: = Fld_id.asinteger;
Next;
End
Locate (' ID ', ID, []);
Finally
Enablecontrols;
End
End
End
End.
Fdmemtable Memory Table Operations