delphimvcframework/samples/articles_crud_server_with_injectable_parameters/MainDM.pas

91 lines
2.1 KiB
ObjectPascal

unit MainDM;
interface
uses
System.SysUtils,
System.Classes,
FireDAC.Stan.Intf,
FireDAC.Stan.Option,
FireDAC.Stan.Error,
FireDAC.UI.Intf,
FireDAC.Phys.Intf,
FireDAC.Stan.Def,
FireDAC.Stan.Pool,
FireDAC.Stan.Async,
FireDAC.Phys,
FireDAC.Phys.FB,
Data.DB,
FireDAC.Comp.Client,
FireDAC.Stan.Param,
FireDAC.DatS,
FireDAC.DApt.Intf,
FireDAC.DApt,
FireDAC.Comp.DataSet,
FireDAC.Phys.FBDef,
FireDAC.VCLUI.Wait;
type
TdmMain = class(TDataModule)
Connection: TFDConnection;
dsArticles: TFDQuery;
updArticles: TFDUpdateSQL;
procedure ConnectionBeforeConnect(Sender: TObject);
private
{ Private declarations }
public
function SearchProducts(const SearchText: string): TDataSet;
end;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
uses
System.IOUtils,
MVCFramework.DataSet.Utils;
procedure TdmMain.ConnectionBeforeConnect(Sender: TObject);
var
I: Integer;
lPath: string;
begin
{
This code is just a demo. It looks for a db file doing up to 6 attempts.
I need this becouse this unit is used by many samples and these samples are
compiled at different level in the samples folders tree.
In a real word system you should (!!) know where your database is :-)
}
lPath := 'data\ORDERSMANAGER_FB30.FDB';
for I := 1 to 6 do
begin
if TFile.Exists(lPath) then
begin
Connection.Params.Values['Database'] := TPath.GetFullPath(lPath);
// 'C:\DEV\dmvcframework\samples\data\ORDERSMANAGER_FB30.FDB';
Break;
end
else
begin
lPath := '..\' + lPath;
end;
end;
if not TFile.Exists(lPath) then
begin
raise Exception.Create('I tried hard, but I cannot find the database');
end;
end;
function TdmMain.SearchProducts(const SearchText: string): TDataSet;
begin
Result := TFDMemTable.Create(nil);
if SearchText.IsEmpty then
dsArticles.Open('SELECT * FROM ARTICOLI')
else
dsArticles.Open('SELECT * FROM ARTICOLI WHERE DESCRIZIONE CONTAINING ?', [SearchText]);
TFDTable(Result).CopyDataSet(dsArticles, [coStructure, coRestart, coAppend]);
end;
end.