[Решено] SQLite: Не сохраняются записи из SQLQuery

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

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

[Решено] SQLite: Не сохраняются записи из SQLQuery

Сообщение Unvictis » 18.07.2015 11:14:29

Здравствуйте ребята. Данная тема своего рода продолжение предъидущей: http://freepascal.ru/forum/viewtopic.php?f=5&t=10404&p=87051#p87051

Если я добавляю новую запись в таблицу Orders методом TSQLQuery.Insert, заполняю её данными, а потом пытаюсь сохранить изменения методом ApplyUpdates программа ругается: "An error occured while applyng the updates in a record: table Orders has no column named ManagerText". Причина почему это происходит для меня понятна: столбец ManagerText - это Lookup-столбец созданный мной для отображения текста из другой таблицы, такого поля в таблице действительно нет. Но я теперь совершенно не понимаю, как можно сохранить изменения в таблице без Lookup-полей? Не ужели придётся вручную прописывать посредством SQL-запроса "INSERT INTO ...", но тогда полностью теряется смысл использования DB-Aware компонентов (напр. из вкладки "Data Controls").

Повторюсь, аналогичный код, только с использованием компонентов ADOTable и базы данных MS Access в Delphi 7 работает на ура - первичный ключ из Lookup-поля автоматически подставляется в нужное поле главной таблицы и все изменения записываются автоматически.

Кто что посоветует?

PS: Чуть не забыл, использую стандартные компоненты SQLdb для доступа к БД SQLite3.
Последний раз редактировалось Unvictis 18.07.2015 18:51:09, всего редактировалось 1 раз.
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: SQLite: Не сохраняются записи из SQLQuery

Сообщение Снег Север » 18.07.2015 12:48:34

А вас не смущает, что SQLite3 - это немножечко не MS Access?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: SQLite: Не сохраняются записи из SQLQuery

Сообщение Unvictis » 18.07.2015 13:01:07

Снег Север писал(а):А вас не смущает, что SQLite3 - это немножечко не MS Access?

Да это-то понятно. Я ведь не конвертировал проект и исходников на Delphi, а создал новый. Я имею ввиду одинаковый алгоритм функционирования программы.
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: SQLite: Не сохраняются записи из SQLQuery

Сообщение Снег Север » 18.07.2015 13:09:58

Так кто вам гарантировал, что Lookup-поле будет прописываться в SQLite? К слову говоря, я никогда и нигде на такой функционал не рассчитывал, всегда писал ручками свои insert и update.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: SQLite: Не сохраняются записи из SQLQuery

Сообщение Unvictis » 18.07.2015 13:43:06

Снег Север писал(а):Так кто вам гарантировал, что Lookup-поле будет прописываться в SQLite? К слову говоря, я никогда и нигде на такой функционал не рассчитывал, всегда писал ручками свои insert и update.

Так мне и не надо что-бы само Lookup-поле попадало в таблицу БД, мне нужно что-бы первичный ключ этого поля попадал в INTERGER-поле основной таблицы. Например, есть у меня телефонный справочник - 2 таблицы: Peoples и Telephones со связью один ко многим. Тоесть у одного человека может быть много телефонов: домашний, сотовый, и т. д. В таблице DBGrid я вывожу все телефоны из таблицы Telephones а рядом создаю ещё одну Lookup-колонку в которой будет отображаться имя владельца телефона из таблицы Peoples. В Delphi это можно сделать не написав ни единой строчки. В доказательство: книга М. Фленова - "Библия Delphi", глава "Базы данных".

В принципе, в Lazarus с небольшими добавлениями эта база без проблем будет отображать телефоны и Lookup-поля. Но я не могу понять как теперь сохранить изменения в этой таблице? Метод SQLQuery.ApplyUpdates в таком телефонном справочнике приведёт к тому-же результату, который я описываю в этой теме.
Последний раз редактировалось Unvictis 18.07.2015 13:57:51, всего редактировалось 1 раз.
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: SQLite: Не сохраняются записи из SQLQuery

Сообщение Снег Север » 18.07.2015 13:57:01

Честно сказать - я никогда таким не пользовался для update. Чисто для select - да. А все update делал явно прописанными запросами. Могу только посоветовать проверить то же с компонентами Zeos - там функционал пошире.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: SQLite: Не сохраняются записи из SQLQuery

Сообщение Unvictis » 18.07.2015 18:50:23

Фуф.. Слава Богу - разобрался. Извиняюсь, просто поленился прежде досконально прочитать документацию. Тут всё это есть: http://wiki.freepascal.org/SQLite. Оказывается, что-бы эти поля не лезли автоматически в базу надо просто в свойствах lookup-полей выключить все флаги ProviderFlags (pfInWhere, pfInUpdate) и т. п. Вопрос решён. Спасибо всем кто откликнулся!
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru