unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, DB, BufDataset, Forms, Controls, Graphics, Dialogs,
ComCtrls, StdCtrls, DBGrids, DBCtrls,
SynCommons,
SynDB,
mORMot,
mORMotDB,
mORMotSQLite3,
mORMotHttpServer,
SynDBSQLite3, SynSQLite3Static,
serviceintf,
mORMotHttpClient,
mORMotUI
;
type
{ TForm1 }
TForm1 = class(TForm)
BtnStart_server: TButton;
BtnStop_server: TButton;
BufDataset1: TBufDataset;
BtnGetList: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Memo1: TMemo;
Memo2: TMemo;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
procedure BtnGetListClick(Sender: TObject);
procedure BtnStart_serverClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
public
fModel: TSQLModel;
fServer: TSQLRestServer;
fHTTPServer: TSQLHttpServer;
public
fModelCli: TSQLModel;
fClient: TSQLHttpClient;
fService: IMatPrem;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.BtnStart_serverClick(Sender: TObject);
begin
// create a Data Model
Self.fModel := TSQLModel.Create([],'root');
// initialize a TObjectList-based database engine
Self.fServer := TSQLRestServerFullMemory.Create(Self.fModel,'txnprod.db3',false,true);
// register our IRemoteSQL service on the server side
Self.fServer.ServiceRegister(TMatPrem,[TypeInfo(IMatPrem)],sicClientDriven).
// fProps should better be executed/released in the one main thread
SetOptions([],[optExecInMainThread,optFreeInMainThread]);
// launch the HTTP server
Self.fHTTPServer := TSQLHttpServer.Create('8888',[Self.fServer],'+',useHttpApiRegisteringURI);
Self.fHTTPServer.AccessControlAllowOrigin := '*'; // for AJAX requests to work
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Self.fModel.Free;
self.fClient.Free;
Self.fModelCli.Free;
Self.fServer.Free;
Self.fHTTPServer.Free;
end;
procedure TForm1.BtnGetListClick(Sender: TObject);
begin
fModelCli := TSQLModel.Create([],'root');
fClient := TSQLHttpClient.Create('localhost','8888',fModelCli);
if fClient.ServiceRegisterClientDriven(TypeInfo(IMatPrem),fService) then
begin
Self.Memo2.Append(Self.fService.MatPrems_get());
end
else
begin
Memo2.Append('Error');
end;
end;
end.