Для подключения используются компоненты: SQLite3Connection1, SQLTransaction1, DataSource1, SQLQuery1 (для получения данных из БД), SQLQuery2 (для записи данных в БД).
Главная форма
Подключение к базе:
procedure TForm1.FormCreate(Sender: TObject);
begin
sqlite3dyn.SQLiteDefaultLibrary := 'sqlite3.dll';
SQLite3Connection1.DatabaseName := 'sqlite.db';
SQLite3Connection1.Connected := True;
SQLQuery1.Active := True;
end;
вычисляемое поле:
procedure TForm1.SQLQuery1CalcFields(DataSet: TDataSet);
begin
SQLQuery1.FieldByName('zmist').AsString := ('Кошти боргу з ' + SQLQuery1.FieldByName('borzhnyk').AsString);
end;
кнопка поиска на главной форме:
procedure TForm1.Button5Click(Sender: TObject);
var
sqlwhere: string;
begin
sqlwhere := '';
if Edit1.Text <> '' then
sqlwhere := Format('%s and %s', [sqlwhere, 'record_count = "'+Edit1.text+'"']);
if ZVDateTimePicker1.Checked=True then
sqlwhere := Format('%s and %s', [sqlwhere, 'strftime("%Y-%m-%d", data_vymoghy) >= "'+FormatDateTime('YYYY-MM-DD', ZVDateTimePicker1.DateTime)+'"']);
if ZVDateTimePicker2.Checked=True then
sqlwhere := Format('%s and %s', [sqlwhere, 'strftime("%Y-%m-%d", data_vymoghy) <= "'+FormatDateTime('YYYY-MM-DD', ZVDateTimePicker2.DateTime)+'"']);
if Edit2.Text <> '' then
sqlwhere := Format('%s and %s', [sqlwhere, 'borzhnyk LIKE "%'+Edit2.text+'%"']);
if Edit3.Text <> '' then
sqlwhere := Format('%s and %s', [sqlwhere, 'kod_borzhnyka = "'+Edit3.text+'"']);
delete(sqlwhere,2,3);
if sqlwhere='' then
begin
SQLQuery1.Active:=False;
SQLQuery1.SQL.Text:= 'select * from vymoghy';
SQLQuery1.Active:=True;
end else
begin
SQLQuery1.Active:=False;
SQLQuery1.SQL.Text:= 'select * from vymoghy where' + sqlwhere;
SQLQuery1.Active:=True;
end;
end;
Форма добавления новой записи
Запись нового значения счётчика в текстовое поле
procedure TForm2.FormShow(Sender: TObject);
var
last_record_count: integer;
record_count: string;
begin
SQLQuery1.Active:=False;
SQLQuery1.SQL.Text:= 'SELECT MAX(record_count) FROM vymoghy';
SQLQuery1.Open;
Form1.SQLTransaction1.CommitRetaining;
SQLQuery1.Active:=True;
last_record_count := SQLQuery1.Fields[0].AsInteger;
if last_record_count <> 0 then record_count := IntToStr(last_record_count+1) else record_count := IntToStr(1);
Edit1.text := record_count;
end;
кнопка сохранения в БД:
procedure TForm2.Button1Click(Sender: TObject);
var
last_record_count: integer;
record_count: string;
begin
SQLQuery1.Active:=False;
SQLQuery1.SQL.Text:= 'SELECT MAX(record_count) FROM vymoghy';
SQLQuery1.Active:=True;
last_record_count := SQLQuery1.Fields[0].AsInteger;
if last_record_count <> 0 then record_count := IntToStr(last_record_count+1) else record_count := IntToStr(1);
If Form1.SQLite3Connection1.Connected then
begin
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(Format('insert into vymoghy (record_count, data_vymoghy, borzhnyk, kod_borzhnyka, bank_borzhnyka, mfo_banku, rakhunok, suma, pryznachennja_platezhu) values ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")',[record_count, FormatDateTime('YYYY-MM-DD 00:00:00.000', ZVDateTimePicker1.DateTime), Edit2.Text, Edit3.Text, Edit5.Text, Edit4.Text, Edit6.Text, Edit7.Text, Memo1.Text]));
SQLQuery1.ExecSQL;
Form1.SQLTransaction1.CommitRetaining;
Form1.SQLQuery1.Refresh;
end;
Form2.Close;
end;
Несколко экземпляров программы открываются, но ни один не может записать в БД. Если оставить один экземпляр, то он уже сможет записать данные.