powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Lazarus+SQLite - правка/удаление записей БД
5 сообщений из 5, страница 1 из 1
Lazarus+SQLite - правка/удаление записей БД
    #38382467
alexb_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую Lazarus + SQLite.
На форме: TSQLite3Connection, TSQLTransaction, TSQLQuery (свойство ReadOnly=False), TDataSource, TDBGrid.

При работе не могу отредактировать/удалить записи в базе ни через DBNavigator ни своими кнопками. В Сети читал, что при таких операциях результат запроса сначала отражается только на DBGrid. Чтобы обновить в базе, нужно применить метод Update - как это сделать (а может и что-то другое) моя голова не понимать ;).

Прошу помощи.

Ниже, код.

Код: pascal
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.
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, db, sqlite3conn, sqldb, dbf, Sqlite3DS, FileUtil, Forms,
  Controls, Graphics, Dialogs, StdCtrls, DBGrids, DbCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    button_add: TButton;
    button_save: TButton;
    button_del: TButton;
    Datasource1: TDatasource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    edit_kod: TEdit;
    Edit_abon: TEdit;
    Edit_nomer: TEdit;
    Edit_search: TEdit;
    Memo1: TMemo;
    SQLite3Connection1: TSQLite3Connection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure button_addClick(Sender: TObject);
    procedure button_delClick(Sender: TObject);
    procedure button_saveClick(Sender: TObject);
    procedure Datasource1DataChange(Sender: TObject; Field: TField);
    procedure FormCreate(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLQuery1.Active:=False;
  SQLQuery1.SQL.Text:='select * from baza;';
  SQLQuery1.Active:=True;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SQLQuery1.Active:=False;
  SQLQuery1.SQL.Text:='select * from baza where nomer like "%'+Edit_search.text+'%" or abon like "%'+Edit_search.text+'%" or descript like "%'+Edit_search.text+'%";';
  SQLQuery1.Active:=True;

end;

procedure TForm1.button_addClick(Sender: TObject);
begin
  button_save.Visible:=true;
  button_add.Visible:=false;
  edit_abon.Text:='';
  edit_nomer.text:='';
  Memo1.Text:='';
  edit_abon.SetFocus;


end;

procedure TForm1.button_delClick(Sender: TObject);
begin
   if MessageDlg('Подтверждение', 'Удалить запись из базы?', mtConfirmation,
    [mbYes, mbNo],0) = mrYes
   then
 SQLQuery1.Active:=False;
 SQLQuery1.DeleteSQL.Add('delete from baza where kod="'+edit_kod.text+'";');
 SQLQuery1.ExecSQL;
 SQLQuery1.Active:=True;
end;




procedure TForm1.button_saveClick(Sender: TObject);
begin
  SQLQuery1.Active:=False;
  SQLQuery1.SQL.Text:='insert into baza(abon,nomer,descript) values ("'+edit_abon.text+'","'+edit_nomer.text+'","'+memo1.text+'")';
  SQLQuery1.ExecSQL;
  sqlquery1.sql.Clear;
  SQLQuery1.SQL.Text:='select * from baza;';
  SQLQuery1.Active:=True;
    SQLQuery1.ApplyUpdates();

end;

procedure TForm1.Datasource1DataChange(Sender: TObject; Field: TField);
  var i:integer;
begin
   if (TDataSource(Sender).DataSet.Active)AND(TDataSource(Sender).DataSet.State = dsBrowse) then begin
      //выполение действий (обработка события изменения номера выбранной записи в таблице)
         Memo1.text:=DBGrid1.SelectedField.DataSet.FieldByName('descript').Text;
    Edit_abon.text:=DBGrid1.SelectedField.DataSet.FieldByName('abon').Text;
    Edit_nomer.text:=DBGrid1.SelectedField.DataSet.FieldByName('nomer').Text;
    Edit_kod.text:=DBGrid1.SelectedField.DataSet.FieldByName('kod').Text;

end;
   end;


                      procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.Columns[1].Width:=30;
  DBGrid1.Columns[1].Width:=150;
  DBGrid1.Columns[2].Width:=100;
  DBGrid1.Columns[3].Width:=200;
end;


end.


...
Рейтинг: 0 / 0
Lazarus+SQLite - правка/удаление записей БД
    #38382646
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexb_sql,

используй DB контролы, и если надо с кнопками то методы методы Append[Insert]/delete/edit
...
Рейтинг: 0 / 0
Lazarus+SQLite - правка/удаление записей БД
    #38383102
_____void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexb_sqlprocedure TForm1.button_saveClick(Sender: TObject);
begin
SQLQuery1.Active:=False;
SQLQuery1.SQL.Text:='insert into baza(abon,nomer,descript) values ("'+edit_abon.text+'","'+edit_nomer.text+'","'+memo1.text+'")';
SQLQuery1.ExecSQL;
SQLQuery1.ApplyUpdates(); // <= !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SQLQuery1.SQL.Text:='select * from baza;';
SQLQuery1.Active:=True;
end;


Попробуйте так !

ApplyUpdates() - "посылает" изменения в базу - надо ставить сразу после ExecSQL();
...
Рейтинг: 0 / 0
Lazarus+SQLite - правка/удаление записей БД
    #38383858
alexb_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_____vo id,

когда авторSQLQuery1.ExecSQL;
SQLQuery1.ApplyUpdates(); // <= !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ошибка: ...невозможно выполнить... на inactive dataset

если изменить SQLQuery1.Active:=False; на True, тогда ошибка: ... невозможно выполнить... на active dataset

pit_alex

можно подробней насчет авториспользуй DB контролы, и если надо с кнопками то методы методы Append[Insert]/delete/edit
C Лазарусом и Паскалем знаком около месяца.
...
Рейтинг: 0 / 0
Lazarus+SQLite - правка/удаление записей БД
    #38383881
alexb_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все. Вопрос снят. Нижеприведенная конструкция работает без проблем. Оказалось, не учел транзакции.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.button_saveClick(Sender: TObject);
begin

button_del.Visible:=true;
button_save.Visible:=false;
SQLQuery1.Active:=false;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('insert into baza(abon,nomer,descript) values ("'+edit_abon.text+'","'+edit_nomer.text+'","'+memo1.text+'")');
SQLQuery1.ExecSQL;
//=========================
SQLTransaction1.Commit;
//=========================
SQLQuery1.SQL.Text:='SELECT * from baza;';
SQLQuery1.Open;
end;         
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Lazarus+SQLite - правка/удаление записей БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]