1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
| unit fMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, 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.SQLite,
FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, FireDAC.VCLUI.Wait,
FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt,
FireDAC.Phys.SQLiteWrapper.Stat, Data.DB, Vcl.ExtCtrls, Vcl.DBCtrls,
Vcl.Grids, Vcl.DBGrids, Datasnap.DBClient, Datasnap.Provider,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.StdCtrls;
type
TForm1 = class(TForm)
conn1: TFDConnection;
qry1: TFDQuery;
dsp1: TDataSetProvider;
cds1: TClientDataSet;
ds1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;
ListBox1: TListBox;
btnSave: TButton;
procedure btnSaveClick(Sender: TObject);
procedure cds1AfterPost(DataSet: TDataSet);
procedure cds1BeforeDelete(DataSet: TDataSet);
procedure cds1BeforePost(DataSet: TDataSet);
procedure ds1StateChange(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
ldir: string;
begin
ldir := IncludeTrailingPathDelimiter(ExtractFileDir(Application.ExeName));
conn1.Params.Database := Format('%s..\..\db\chinook.db', [ldir]);
conn1.LoginPrompt := False;
try
conn1.Open;
qry1.SQL.Text := 'SELECT * FROM artists ORDER BY name;';
qry1.Open;
cds1.Open;
except
on e: Exception do
MessageDlg(e.Message, TMsgDlgType.mtWarning, [TMsgDlgBtn.mbOK], 0);
end;
end;
procedure TForm1.ds1StateChange(Sender: TObject);
var
lstr: string;
begin
if (ds1.State = dsBrowse) then
lstr := 'Lecture'
else if (ds1.State = dsEdit) then
lstr := 'Modification'
else if (ds1.State = dsInsert) then
lstr := 'Ajout';
ListBox1.Items.Add(Format('Etat : %s', [lstr]));
end;
procedure TForm1.cds1BeforePost(DataSet: TDataSet);
begin
if (Trim(cds1.FieldByName('name').AsString) = '') then
begin
MessageDlg('Le nom doit être renseigné.', mtWarning, [mbOK], 0);
Abort;
end;
end;
procedure TForm1.cds1AfterPost(DataSet: TDataSet);
begin
ListBox1.Items.Add('After post');
ListBox1.Items.Add(Format('Update #%d', [cds1.FieldByName('artistid').AsInteger]));
end;
procedure TForm1.cds1BeforeDelete(DataSet: TDataSet);
var
lstr: string;
lvalid: Boolean;
begin
lstr := Format('Voulez-vous supprimer "%s" ?',
[cds1.FieldByName('name').AsString]);
lvalid := (MessageDlg(lstr, mtConfirmation, [mbYes, mbNo], 0) = mrYes);
if (not lvalid) then
Abort;
end;
procedure TForm1.btnSaveClick(Sender: TObject);
var
lId: Integer;
lqry: TFDQuery;
begin
if (cds1.State in [dsInsert, dsEdit]) then
cds1.Post;
if (cds1.ApplyUpdates(-1) > 0) then
ListBox1.Items.Add('Erreur d''enregistrement.');
ListBox1.Items.Add('Save');
lId := cds1.FieldByName('artistid').AsInteger;
if (cds1.FieldByName('artistid').OldValue = Null) then
begin
ListBox1.Items.Add(Format('Insert #%d', [lId]));
lqry := TFDQuery.Create(Self);
lqry.Connection := conn1;
try
lqry.Open('SELECT seq FROM sqlite_sequence WHERE name = ''artists'';');
if not lqry.Eof then
ListBox1.Items.Add(Format('Select id #%d', [lqry.Fields[0].AsInteger]));
finally
lqry.Free;
end;
end
else
ListBox1.Items.Add(Format('Update #%d', [lId]));
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if (cds1.State in [dsInsert, dsEdit]) then
CanClose := MessageDlg('Données modifier. Souhaitez-vous continuer ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes;
if CanClose then
begin
cds1.Close;
qry1.Close;
conn1.Close;
end;
end;
end. |
Partager