Здравствуйте ребята. Данная тема своего рода продолжение предъидущей: 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.
[Решено] SQLite: Не сохраняются записи из SQLQuery
Модератор: Модераторы
- Unvictis
- новенький
- Сообщения: 48
- Зарегистрирован: 17.07.2015 17:59:12
- Откуда: Kokshetau, Kazakshtan
- Контактная информация:
[Решено] SQLite: Не сохраняются записи из SQLQuery
Последний раз редактировалось Unvictis 18.07.2015 17:51:09, всего редактировалось 1 раз.
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
А вас не смущает, что SQLite3 - это немножечко не MS Access?
- Unvictis
- новенький
- Сообщения: 48
- Зарегистрирован: 17.07.2015 17:59:12
- Откуда: Kokshetau, Kazakshtan
- Контактная информация:
Снег Север писал(а):А вас не смущает, что SQLite3 - это немножечко не MS Access?
Да это-то понятно. Я ведь не конвертировал проект и исходников на Delphi, а создал новый. Я имею ввиду одинаковый алгоритм функционирования программы.
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Так кто вам гарантировал, что Lookup-поле будет прописываться в SQLite? К слову говоря, я никогда и нигде на такой функционал не рассчитывал, всегда писал ручками свои insert и update.
- Unvictis
- новенький
- Сообщения: 48
- Зарегистрирован: 17.07.2015 17:59:12
- Откуда: Kokshetau, Kazakshtan
- Контактная информация:
Снег Север писал(а):Так кто вам гарантировал, что Lookup-поле будет прописываться в SQLite? К слову говоря, я никогда и нигде на такой функционал не рассчитывал, всегда писал ручками свои insert и update.
Так мне и не надо что-бы само Lookup-поле попадало в таблицу БД, мне нужно что-бы первичный ключ этого поля попадал в INTERGER-поле основной таблицы. Например, есть у меня телефонный справочник - 2 таблицы: Peoples и Telephones со связью один ко многим. Тоесть у одного человека может быть много телефонов: домашний, сотовый, и т. д. В таблице DBGrid я вывожу все телефоны из таблицы Telephones а рядом создаю ещё одну Lookup-колонку в которой будет отображаться имя владельца телефона из таблицы Peoples. В Delphi это можно сделать не написав ни единой строчки. В доказательство: книга М. Фленова - "Библия Delphi", глава "Базы данных".
В принципе, в Lazarus с небольшими добавлениями эта база без проблем будет отображать телефоны и Lookup-поля. Но я не могу понять как теперь сохранить изменения в этой таблице? Метод SQLQuery.ApplyUpdates в таком телефонном справочнике приведёт к тому-же результату, который я описываю в этой теме.
Последний раз редактировалось Unvictis 18.07.2015 12:57:51, всего редактировалось 1 раз.
- Снег Север
- долгожитель
- Сообщения: 3071
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Честно сказать - я никогда таким не пользовался для update. Чисто для select - да. А все update делал явно прописанными запросами. Могу только посоветовать проверить то же с компонентами Zeos - там функционал пошире.
- Unvictis
- новенький
- Сообщения: 48
- Зарегистрирован: 17.07.2015 17:59:12
- Откуда: Kokshetau, Kazakshtan
- Контактная информация:
Фуф.. Слава Богу - разобрался. Извиняюсь, просто поленился прежде досконально прочитать документацию. Тут всё это есть: http://wiki.freepascal.org/SQLite. Оказывается, что-бы эти поля не лезли автоматически в базу надо просто в свойствах lookup-полей выключить все флаги ProviderFlags (pfInWhere, pfInUpdate) и т. п. Вопрос решён. Спасибо всем кто откликнулся!
