procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
DBConnect;
//all rows
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add( 'SELECT count(1) FROM TODO ');
SQLQuery1.Open;
Memo1.Lines.Add('all rows count: ' + SQLQuery1.Fields[0].AsString);
SQLQuery1.Close;
//section A
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add( 'SELECT count(1) FROM TODO where SECTION = :sSec ');
SQLQuery1.Params.ParamByName('sSec').AsString := 'A';
SQLQuery1.Open;
Memo1.Lines.Add('section A rows count: ' + SQLQuery1.Fields[0].AsString);
SQLQuery1.Close;
//date between 2025-02-01 and 2025-02-28
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add( 'SELECT count(1) FROM TODO where DateCreated BETWEEN :sStart AND :sEnd ');
SQLQuery1.ParamByName('sStart').AsString := FormatDateTime('yyyy-mm-dd', EncodeDate(2025, 2, 1));
SQLQuery1.ParamByName('sEnd').AsString := FormatDateTime('yyyy-mm-dd', EncodeDate(2025, 2, 28));
SQLQuery1.Open;
Memo1.Lines.Add('february 2025 rows count: ' + SQLQuery1.Fields[0].AsString);
SQLQuery1.Close;
//date between 2025-02-01 and 2025-02-28 and section A
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add( 'SELECT count(1) FROM TODO where SECTION = :sSec and DateCreated BETWEEN :sStart AND :sEnd ');
SQLQuery1.Params.ParamByName('sSec').AsString := 'A';
SQLQuery1.ParamByName('sStart').AsString := FormatDateTime('yyyy-mm-dd', EncodeDate(2025, 2, 1));
SQLQuery1.ParamByName('sEnd').AsString := FormatDateTime('yyyy-mm-dd', EncodeDate(2025, 2, 28));
SQLQuery1.Open;
Memo1.Lines.Add('section A in february 2025 rows count: ' + SQLQuery1.Fields[0].AsString);
SQLQuery1.Close;
end;
procedure TForm1.DBConnect;
const
sarr: array [0..4] of String = ('A', 'B', 'C', 'D', 'E');
var
i: Integer;
begin
SQLite3Connection1.Transaction := SQLTransaction1;
SQLQuery1.DataBase := SQLite3Connection1;
SQLQuery1.Transaction := SQLTransaction1;
SQLite3Connection1.DatabaseName := 'test20260315.db';
SQLite3Connection1.Connected := True;
SQLTransaction1.StartTransaction;
SQLQuery1.SQL.Text := ' create table if not exists ToDo ( ' +
' UID Integer NOT NULL, ' +
' Subject Char(20), ' +
' Section Char(10), ' +
' FileName Char(20), ' +
' DateCreated Char(10) DEFAULT NULL, ' +
' DateCompleted Char(10) DEFAULT NULL, ' +
' CONSTRAINT PK_ToDo PRIMARY KEY (UID)); ';
SQLQuery1.ExecSQL;
SQLQuery1.SQL.Text := ' select count(1) from ToDo ';
SQLQuery1.Open;
i := SQLQuery1.Fields[0].AsInteger;
SQLQuery1.Close;
SQLTransaction1.Commit;
if i = 0 then
begin
SQLTransaction1.StartTransaction;
SQLQuery1.SQL.Text := ' insert into ToDO (UID, Subject, Section, FileName, DateCreated) values (:uid, :sub, :sec, :fil, :dat) ';
for i := 1 to 365 do
begin
SQLQuery1.ParamByName('uid').AsInteger := i;
SQLQuery1.ParamByName('sub').AsString := 'Subject no ' + IntToStr(i);
SQLQuery1.ParamByName('sec').AsString := sarr[i mod 5];
SQLQuery1.ParamByName('fil').AsString := 'text file ' + IntToStr(i) + '.dat';
SQLQuery1.ParamByName('dat').AsString := FormatDateTime('yyyy-mm-dd', IncDay(EncodeDate(2024, 12, 31), i));
SQLQuery1.ExecSQL;
end;
SQLTransaction1.Commit;
end;
SQLTransaction1.Active := True;
end;