Добрый день уважаемые программисты.
Помогите пожалуйста разобраться с работой базы данных.
Как я понял есть два способа внести изменения в базу данных (но в каждом случае у меня что то не получается):
1. первый способ такой:
DataModule1.SQLQuery1.Edit;
DataModule1.SQLQuery1.FieldByName('DESCR').AsString:='hello mir';
DataModule1.SQLQuery1.Post;
Данный способ работает без ошибок, НО как только я закрываю базу данных все изменения пропадают. Как я понимаю нужно дать команду физической записи в базу, типа такой:
DataModule1.SQLTransaction1.CommitRetaining;
или
DataModule1.SQLTransaction1.Commit;
но все равно не помогает если я вызываю комит, то данные из окна программы исчезают, а запись все равно не отображается.
Я стал думать дальше, может я не открыл транзакцию?
Хотя она у меня завязана с элементами управления, значит она уже открыта. Или ее нужно как то хитро создать?
Второй вариант:
DataModule1.SQLQuery1.Close; (в документации которую я читаю, написано Опен, но если мы открыли (хотя он у нас уже открыт и все записи отображены в гриде), то вторая строка выдает ошибку)
DataModule1.SQLQuery1.SQL.Text := 'update "spr_domain" set "DESCR" = "hello mir" where "IDSITE" = 4';
DataModule1.SQLQuery1.ExecSQL;
В общем тоже не получается.... пробовал с транзакциями и без них ... бьюсь уже кучу времени ... не получается.
В качестве учебного материала использую этот:
http://wiki.freepascal.org/Lazarus_Database_Overview
Помогите сделать мне сразу оба варианта. Подскажите как правильно написать?
Добавлено спустя 24 минуты 8 секунд:
Попробовал еще так:
DataModule1.SQLQuery1.Close;
DataModule1.SQLQuery1.SQL.Text := 'update "spr_domain" set "DESCR" = "hello mir" where "IDSITE" = 4';
DataModule1.SQLQuery1.ExecSQL;
DataModule1.SQLQuery1.SQL.Text:='select * from "spr_domain" where "IDSITE" = 4';
DataModule1.SQLQuery1.Open;
DataModule1.SQLQuery1.ApplyUpdates;
Не вносит в базу изменения, хотя в приложении изменения видны.
P.S. Используется компонент SQLite3Connection1 база SQLite .