[Решено] Ошибка при добавлении любого Lookup-поля в SQLQuery

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

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

[Решено] Ошибка при добавлении любого Lookup-поля в SQLQuery

Сообщение Unvictis » 17.07.2015 19:48:46

Здравствуйте ребята. Решил зажить честно, и перебраться с Delphi на Lazarus. Прошу не кидайтесь камнями за возможно глупое изъяснение - я всё-таки новичёк. Сейчас хочу написать на нём приложение для учёта заказов, клиентов, комплектующих и кассы для своего сервисного центра. Сразу возникла одна задача ответ на которую я не могу найти в интернете уже больше недели. Моё приложение подключается к базе данных SQLite3 через компоненты "TSQLiteConnection" и "TSQLTransaction" со вкладки "SQLdb". В базе данных существует две таблицы: "Orders" - для хранения заказов и "Clients" - для хранения данных о клиентах. На главной форме в компонент "TDBGrid" я вывожу содержимое таблицы "Orders" (для этого используется компонент TSQLQuery, в свойстве "SQL" которого стоит "SELECT * FROM Orders" связанный с компонентом "TDataSource"). После активации всех компонентов (свойство Active = True) всё начинает отображаться и работать отлично, как в runtime так и в designtime. Но стоит только мне добавить в компонент TSQLQuery Lookup-поле (Edit Fields -> New -> Lookup -> ..) и связать через первичный ключ поля "Client" (числовой уникальный идентификатор клиента) из таблицы "Orders" и "ID" (идентификатор клиента) из таблицы "Clients" а в свойство "LookupResultField" установить поле "Initials" (инициалы клиента) из таблицы "Clients" откомпилированное приложение начинает выдавать ошибку "Operation cannot be performed on an inactive dataset", хотя в редакторе форм в designtime всё отображается так, как нужно. Компонент TSQLQuery связанный с таблицей "Clients" также активен, и в свойстве SQL у него прописано "SELECT * FROM Clients". Пожалуйста подскажите что я делаю не так.

PS: И да, чуть не забыл - аналогичный код, только с использованием компонентов ADO и базы данных MS Access в Delphi 7 работает на ура.

Вот исходный код: https://drive.google.com/file/d/0B1vV8nYCxqX6bUhOZ3RYelpZd3M/view?usp=sharing

Структура БД:
Код: Выделить всё
CREATE TABLE "Clients" (
   `ID`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
   `Initials`   VARCHAR(70) NOT NULL,
   `Telephone`   VARCHAR(15),
   `E-Mail`   VARCHAR(50),
   `Notes`   VARCHAR(255)
)

CREATE TABLE [OrderTypes] (
  [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  [OrderType] VARCHAR(50) NOT NULL)

CREATE TABLE [Orders] (
  [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  [Client] INTEGER NOT NULL REFERENCES [Clients]([ID]),
  [Manager] INTEGER NOT NULL REFERENCES [Staff]([ID]) DEFAULT 0,
  [Master] INTEGER REFERENCES [Staff]([ID]) DEFAULT 0,
  [Status] INTEGER NOT NULL,
  [OrderType] INTEGER NOT NULL DEFAULT 0,
  [DeviceType] INTEGER NOT NULL,
  [Device] VARCHAR(100),
  [Equipment] VARCHAR(255),
  [Appearance] VARCHAR(255),
  [Falure] VARCHAR(255),
  [DateIn] DATETIME NOT NULL,
  [DateOut] DATETIME,
  [ManagerNotes] TEXT,
  [MasterNotes] TEXT,
  [Price] INTEGER,
  [Closed] BOOLEAN DEFAULT 0)

CREATE TABLE "Staff" (
   `ID`   INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
   `Initials`   VARCHAR(50) NOT NULL,
   `Address`   VARCHAR(100),
   `Telephone`   VARCHAR(12),
   `E-Mail`   VARCHAR(50),
   `Notes`   VARCHAR(255)
)
Последний раз редактировалось Unvictis 18.07.2015 10:44:23, всего редактировалось 1 раз.
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение resident » 17.07.2015 20:13:52

У меня не запустился, потребовал какой-то неустановленный пакет DateTimeCtls
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение Unvictis » 17.07.2015 20:32:31

resident писал(а):У меня не запустился, потребовал какой-то неустановленный пакет DateTimeCtls

Какая у вас версия Lazarus?
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение resident » 17.07.2015 20:34:32

Unvictis писал(а):Какая у вас версия Lazarus?

1.2.6
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение Unvictis » 17.07.2015 20:49:07

Чтож, попробую перекомпилировать на ней.

Добавлено спустя 38 минут 18 секунд:
Увы, всё так же. Версия роли не играет. Значит я что-то не так делаю.
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение Ism » 17.07.2015 21:34:39

Последовательность активации датасетов имеет значение
Поэтому активируйте датасеты в run time в нужной последовательности или проверьте, как это происходит по умолчанию
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение Unvictis » 17.07.2015 21:41:40

Хорошая идея! А как проверить?
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение Ism » 17.07.2015 22:47:28

Проверить в коде в какой последовательности создаются датасеты
А вообще правильней включать датасеты самому в run time
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Ошибка при добавлении любого Lookup-поля в TSQLQuery

Сообщение Unvictis » 17.07.2015 23:46:21

Ism писал(а):Проверить в коде в какой последовательности создаются датасеты
А вообще правильней включать датасеты самому в run time

Спасибо большущее! Изменил порядок активации датасетов TSQLQuery - в событии OnCreate модуля данных устанавливал поочерёдно свойство Active в True у компонентов TSQLQuery - сначала активировал датасет с таблицы "Clients", ну а после "Orders" содержащий Lookup-поле. Тема закрыта.
Аватара пользователя
Unvictis
новенький
 
Сообщения: 48
Зарегистрирован: 17.07.2015 18:59:12
Откуда: Kokshetau, Kazakshtan


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru