Работа с SQLite3

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

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

Работа с SQLite3

Сообщение EvelRus » 28.01.2013 23:36:41

Всем добры день!
Помогите с SQLite3.
Создал проект, добавил элементы для работы с sqlite:
SQLite3Connection1
SQLTransaction1
SQLQuery1
Datasource1

На кнопку добавил
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
     SQLite3Connection1.Connected:=False;
     if SQLQuery1.Active then
        SQLQuery1.Active:=False;
        SQLQuery1.SQL.Clear;

     sqlite3connection1.Connected:=true;
     sqlquery1.SQL.Add('select max(ID) from soft_config');
end;


а что делать дальше я хз :(
Как загнать данные в поле? И как их потом обновить/добавить в БД

И как добавить массив значений в поле? Например в выпадающий список

Заранее спасибо
EvelRus
новенький
 
Сообщения: 17
Зарегистрирован: 25.01.2013 14:53:53

Re: Работа с SQLite3

Сообщение Frolik » 29.01.2013 15:01:07

В общих чертах здесь:
http://wiki.freepascal.org/SQLdb_Tutorial1#SQLite_2
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: Работа с SQLite3

Сообщение EvelRus » 04.02.2013 23:54:19

Так ни черта и не понял :(
Помогите, пожалуйста, поправьте проект. Надо в форму ввести значение из sql запроса max(id)
На этом примере я потом попробую разобраться
И можно ли работать с БД без гринда или как она там зовется, таблица в которую данные грузятся
У вас нет необходимых прав для просмотра вложений в этом сообщении.
EvelRus
новенький
 
Сообщения: 17
Зарегистрирован: 25.01.2013 14:53:53

Re: Работа с SQLite3

Сообщение Padre_Mortius » 05.02.2013 00:03:36

Почитайте вот эту статью. Принцип работы тот же самый
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Работа с SQLite3

Сообщение EvelRus » 06.02.2013 21:37:52

Сделал ))
Код: Выделить всё
begin
       try
// Подключение БД
    sqlite3.Connected:=true;
  except
    ShowMessage(' Не могу подключиться к базе данных');
    exit;
  end;
// Подключение транзакций
  try
    SQLTransaction1.Active:=true;
  except
    ShowMessage(' Не могу создать транзакцию');
  exit;
  end;
// Подача запроса в БД
  try
     SQLQuery1.Active:=false;
     SQLQuery1.SQL.Clear;
     SQLQuery1.SQL.Add('select * from table');
     SQLQuery1.ExecSQL;
     SQLQuery1.Open;
     FormUserLogin.Text:=SQLQuery1.FieldByName('login').AsString;
     FormSound.Checked:=SQLQuery1.FieldByName('sound').AsBoolean;
  except
    ShowMessage('Ошибка загрузки конфигурации. Перезапустите программу');
  exit;
  end;
end;
EvelRus
новенький
 
Сообщения: 17
Зарегистрирован: 25.01.2013 14:53:53

Re: Работа с SQLite3

Сообщение Padre_Mortius » 07.02.2013 00:11:20

для выполнения выборки данных с помощью select метод ExecSQL не нужен, достаточно только Open.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Работа с SQLite3

Сообщение EvelRus » 10.02.2013 13:42:34

А обновление тогда как сделать? Делал
Код: Выделить всё
SQLQuery1.Edit;
SQLQuery1.FieldByName('user_login').AsString:=   FormUserLogin.Text;
SQLQuery1.Post;
SQLQuery1.ApplyUpdates(0);
SQLQuery1.Open;
showmessage('Сохранено');

и снова получаю ошибку http://clip2net.com/s/2Oykz
EvelRus
новенький
 
Сообщения: 17
Зарегистрирован: 25.01.2013 14:53:53

Re: Работа с SQLite3

Сообщение Padre_Mortius » 10.02.2013 13:57:20

Как по мне, то работа с таблицей через Edit и Post это дурной тон, если изменения вносятся не в сам грид. Я бы делал через SQL-функции, т.е.
Код: Выделить всё
SQLQuery2.SQL.Text = 'update tablename set user_login=:usr_lgn where id=:id';
SQLQuery2.Params.ParamByName('usr_lgn').AsString = FormUserLogin.Text;
SQLQuery2.Params.ParamByName('id').AsInteger = aID;
SQLQuery2.ExecSQL;
SQLQuery1.Refresh;


И еще один момент... Возьмите за правило для одной таблицы cоздавать 2 компонента TSQLQuery (на выборку данных и на вставку/изменение). В дальнейшшем TSQLQuery для вставки/изменения данных можно создавать в runtime
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Работа с SQLite3

Сообщение EvelRus » 10.02.2013 16:51:04

unit3.pas(109,69) Error: Incompatible type for arg no. 1: Got "Constant String", expected "TStringList"

Это на адейте...
Код: Выделить всё
SQLQuery2.SQL:= 'update user_config set user_login=1 where id=1';
без переменных для проверки работы, а на двойные кавычки ругается
EvelRus
новенький
 
Сообщения: 17
Зарегистрирован: 25.01.2013 14:53:53

Re: Работа с SQLite3

Сообщение Padre_Mortius » 10.02.2013 17:32:37

EvelRus, прошу прощения. Последнее время все больше на си++ приходится писать. Пост исправил.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Работа с SQLite3

Сообщение EvelRus » 10.02.2013 18:58:09

Тогда еще вопрос, а почему там знаки "="? Разве присвоение не ":="?
Это поправил, но ошибка все равно как выше - не обновляет, но пишет что сохранено
Код: Выделить всё
SQLQuery2.SQL.Text:= 'update user_config set user_login=1 where user_id=1';

если добавляю открытие sql
Код: Выделить всё
SQLQuery2.SQL.Clear;
     SQLQuery2.SQL.Text:= 'update user_config set user_login=1 where user_id=1';
     SQLQuery2.ExecSQL;
     SQLQuery2.Open;
     showmessage('Сохранено');

то получаю ошибку
http://clip2net.com/s/2OCqh
EvelRus
новенький
 
Сообщения: 17
Зарегистрирован: 25.01.2013 14:53:53

Re: Работа с SQLite3

Сообщение Little_Roo » 10.02.2013 20:03:00

EvelRus писал(а):SQLQuery2.SQL.Clear;


И ЧТО после этого Вы хотите апдейтить?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Работа с SQLite3

Сообщение Padre_Mortius » 10.02.2013 21:12:26

Код: Выделить всё
SQLQuery2.Open;

Эта строка не нужна, либо добавьте перед ней строку с select-запросом.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Работа с SQLite3

Сообщение EvelRus » 10.02.2013 21:21:58

Все равно не сохраняет = (
EvelRus
новенький
 
Сообщения: 17
Зарегистрирован: 25.01.2013 14:53:53

Re: Работа с SQLite3

Сообщение Jargar » 10.02.2013 22:31:49

Код: Выделить всё
SQLTransaction1.Commit;

надо сделать чтобы данные сохранились.
Jargar
новенький
 
Сообщения: 21
Зарегистрирован: 06.11.2007 14:42:24

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 249

Рейтинг@Mail.ru