Отображение данных из бд(SQlite) в DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Отображение данных из бд(SQlite) в DBGrid

Сообщение Goreproger » 01.03.2019 15:22:59

Сразу хочу попросить гуру сея форума не бить пожалуйста меня палкой, т.к в lazarus я недавно да и в программисткой сфере далеко не ас. Значит проблема следующая. Благодаря данному уроку https://devlaz.ru/lazarus_sqlite/ я создал и подцепил SQlite к лазарусу. Все функционирует норм, и данные из DBGrid в бд добавляются. Но есть один прикол. Я создал отдельную форму для ввода данных, т.к на одной форме все не уместить. Подключил я значит эту форму к бд и вроде все рубит, данные в бд заносятся. Но в DBGrid эти данные отображаются только после перезапуска приложения. Хз, возможно проблема изи для мастеров, но я то шаражник и хер знает че делать. Пробовал добавить на копку с помощью ShellApi процедуру, чтоб но прогу автоматом перезагружал, но не получилось. Вообщем, на вас вся надежда братва.
------------------------------------
код первой формы (главной)
------------------------------------
unit main;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
DBGrids, Buttons, sqldb, Sqlite3DS, db, sqlite3conn, ShellApi, windows;

type

{ TForm1 }

TForm1 = class(TForm)
BitBtn1: TBitBtn;
DataSource: TDataSource;
DBGrid: TDBGrid;
SQLite3Dataset: TSqlite3Dataset;
SQLite3Connection: TSQLite3Connection;
SQLQuery: TSQLQuery;
SQLTransaction: TSQLTransaction;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation
uses Unit1;
{$R *.lfm}

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
{Параметры компонентов работы с базой
Можно выставить в опциях у каждого компонента.}
//*******************************
SQLite3Dataset.FileName:='SORBI.db';
SQLite3Dataset.TableName:='jurnal';
DataSource.DataSet:=SQLite3Dataset;
SQLite3Connection.DatabaseName:='SORBI.db';
SQLite3Connection.Transaction:=SQLTransaction;
SQLTransaction.DataBase:=SQLite3Connection;
SQLQuery.DataBase:=SQLite3Connection;
SQLQuery.Transaction:=SQLTransaction;
//*******************************

try
SQLite3Dataset.Open;
SQLite3Connection.Connected:=True;
except
On E:Exception do
ShowMessage('Ошибка открытия базы: '+ E.Message);
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form2.ShowModal;
end;

end.

--------------------------------------------------------------------------
Код второй формы (где заносятся данные)
--------------------------------------------------------------------------
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, sqldb, Sqlite3DS, db, sqlite3conn, Forms, Controls,
Graphics, Dialogs, StdCtrls, EditBtn, MaskEdit, Buttons;

type

{ TForm2 }

TForm2 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
DataSource: TDataSource;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label1: TLabel;
Label10: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
MaskEdit1: TMaskEdit;
MaskEdit2: TMaskEdit;
MaskEdit3: TMaskEdit;
SQLite3Connection: TSQLite3Connection;
SQLite3Dataset: TSqlite3Dataset;
SQLQuery: TSQLQuery;
SQLTransaction: TSQLTransaction;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private

public

end;

var
Form2: TForm2;

implementation
uses main;
{$R *.lfm}

{ TForm2 }





procedure TForm2.BitBtn2Click(Sender: TObject);
begin
Close;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
{Параметры компонентов работы с базой
Можно выставить в опциях у каждого компонента.}
//*******************************
SQLite3Dataset.FileName:='SORBI.db';
SQLite3Dataset.TableName:='jurnal';
DataSource.DataSet:=SQLite3Dataset;
SQLite3Connection.DatabaseName:='SORBI.db';
SQLite3Connection.Transaction:=SQLTransaction;
SQLTransaction.DataBase:=SQLite3Connection;
SQLQuery.DataBase:=SQLite3Connection;
SQLQuery.Transaction:=SQLTransaction;
//*******************************

try
SQLite3Dataset.Open;
SQLite3Connection.Connected:=True;
except
On E:Exception do
ShowMessage('Ошибка открытия базы: '+ E.Message);
end;
end;

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
SQLite3Dataset.Close;

with SQLQuery do
begin
SQL.Clear;
SQL.Add('INSERT INTO jurnal(nameImanufacturer, series, expiry, supplier, №TTH, storage, dateofissueIvalidity, registration, declaration, reg) VALUES(:NAMEIMANUFACTURER,:SERIES,:EXPIRY,:SUPPLIER, :№TTH, :STORAGE, :DATEOFISSUEIVALIDITY, :REGISTRATION, :DECLARATION, :REG)');
ParamByName('NAMEIMANUFACTURER').Text:=Edit1.Text;
ParamByName('SERIES').Text:=MaskEdit1.Text;
ParamByName('EXPIRY').Text:=MaskEdit2.Text;
ParamByName('SUPPLIER').Text:=Edit2.Text;
ParamByName('№TTH').Text:=Edit3.Text;
ParamByName('STORAGE').Text:=Edit4.Text;
ParamByName('DATEOFISSUEIVALIDITY').Text:=MaskEdit3.Text;
ParamByName('REGISTRATION').Text:=Edit5.Text;
ParamByName('DECLARATION').Text:=Edit6.Text;
ParamByName('REG').Text:=Edit7.Text;
ExecSQL;
SQLTransaction.Commit;
Close;
end;

SQLite3Dataset.Open;
ShowMessage('Позиция успешно добавлена');
end;



end.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Goreproger
незнакомец
 
Сообщения: 3
Зарегистрирован: 01.03.2019 14:59:36

Re: Отображение данных из бд(SQlite) в DBGrid

Сообщение jsa » 07.03.2019 13:14:52

Думаю проще будет вместо SQLite3Dataset: TSqlite3Dataset; использовать другой компонент Select_jurnal:TSQLQuery.
В него руками прописать текст SQL для выборки данных из таблицы jurnal
Select_jurnal.Open у вас точно сработает.

P.S. Я Lazarus плохо знаю, а где вы взяли компонент TSqlite3Dataset ? На панели объектов не смог его найти. А судя по картинке вы его выставили от туда.

Добавлено спустя 2 минуты 22 секунды:
P.S.
а Sqlite3Dataset1.RefetchData не обновляет данные после записи новой строки? (close конечно не надо делать при этом)
jsa
постоялец
 
Сообщения: 261
Зарегистрирован: 28.11.2017 13:46:04

Re: Отображение данных из бд(SQlite) в DBGrid

Сообщение Снег Север » 08.03.2019 08:51:47

Goreproger
SQLTransaction.CommitRetaining;
и
DBGrid.DataSource.DataSet.Refresh вызывать после транзакции.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение данных из бд(SQlite) в DBGrid

Сообщение Goreproger » 08.03.2019 10:18:20

Всем спасибо, решил проблему следующим образом:
Form1.SQLite3Dataset.Close;
Form1.SQLite3Dataset.Open;
Да, костыль но рабочий
Goreproger
незнакомец
 
Сообщения: 3
Зарегистрирован: 01.03.2019 14:59:36

Re: Отображение данных из бд(SQlite) в DBGrid

Сообщение Снег Север » 08.03.2019 10:25:29

Вы ответы не читаете?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2990
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7

Рейтинг@Mail.ru