Здравствуйте ребята. Решил зажить честно, и перебраться с 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)
)