program Project01;
uses
  {$I SynDprUses.inc} // use FastMM4 on older Delphi, or set FPC threads
  Forms,   SysUtils,       SynCommons,     mORMot,
  Unit1 in 'Unit1.pas' {Form1}
  ,mORMotSQLite3, SynSQLite3Static
    ;
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Form1.Caption := ' Sample 01 - In Memory ORM';
  Form1.aSQLRest := TSQLRestServerDB.Create(Form1.aSQLModel,
    ChangeFileExt(ExeVersion.ProgramFileName,'.db3'));//系统会 在起始时加载Projet01.db3
  TSQLRestServerDB(Form1.aSQLRest).CreateMissingTables;
  Application.Run;
end.

 

unit Unit1;

interface

uses
  {$ifdef MSWINDOWS}
  Windows,
  Messages,
  Graphics,
  {$endif}
  Classes, SysUtils, Forms, Controls, Dialogs, StdCtrls,
  SynCommons,
  SynTable,
  mORMot;

type

  TSQLSampleRecord = class(TSQLRecord)   //表名 SampleRecord
  private
    //系统默认有ID列
    fName: RawUTF8;
    fInfo: RawUTF8;
  published

    property Name: RawUTF8 read fName write fName; //Name列
    property Info: RawUTF8 read fInfo write fInfo; //Info列
  end;

  { TForm1 }
  TForm1 = class(TForm)
    AddButton: TButton;
    Label1: TLabel;
    Label2: TLabel;
    QuitButton: TButton;
    FindButton: TButton;
    QuestionMemo: TMemo;
    NameEdit: TEdit;
    procedure AddButtonClick(Sender: TObject);
    procedure FindButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure QuitButtonClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    aSQLRest: TSQLRest;
    aSQLModel: TSQLModel;
  end;
var
  Form1: TForm1;
implementation
{$ifdef FPC} {$R *.lfm}  {$else}   {$R *.dfm}   {$endif}
procedure TForm1.FormCreate(Sender: TObject);
begin
aSQLModel :=TSQLModel.Create([TSQLSampleRecord]);
end;

procedure TForm1.AddButtonClick(Sender: TObject);
var Rec: TSQLSampleRecord;
begin
  Rec := TSQLSampleRecord.Create;
  try
    Rec.Name := StringToUTF8(NameEdit.Text);
    Rec.Info := StringToUTF8(QuestionMemo.Text);
    if aSQLRest.Add(Rec,true)=0 then
      ShowMessage('Error adding the data') else begin
      NameEdit.Text := '';
      QuestionMemo.Text := '';
      NameEdit.SetFocus;
    end;
  finally
    Rec.Free;
  end;
end;

procedure TForm1.FindButtonClick(Sender: TObject);
var Rec: TSQLSampleRecord;
begin
  Rec := TSQLSampleRecord.Create(aSQLRest,'Name=?',[StringToUTF8(NameEdit.Text)]);
  try
    if Rec.ID=0 then
      QuestionMemo.Text := 'Not found' else      QuestionMemo.Text :=stringreplace(UTF8ToString(Rec.Info), 'Z~!~', #13#10, [rfReplaceAll]) ;
  finally
    Rec.Free;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  aSQLRest.Free;   aSQLModel.Free;
end;

procedure TForm1.QuitButtonClick(Sender: TObject);
begin
  Close;
end;

end.