Здравствуйте всем.
Столкнулся с реализацией клиента БД на Qt. Благо дело, задача мизерная (регистрация событий на проходной в базе) и легко решилась с помощью массивов. Но есть желание попытаться перевести крупный проект c .NET на Qt ради кросплатформенности. И вот возникает ключевое непонимание - как реализовать работу с БД. В чем суть...
Обычная картина: имеем выборку (результат выполнения запроса к нескольким таблицам, результат выполнения процедуры и т.п. - в общем случае это просто
скрипт). Предвкушая посыл к QSqlRelationalTableModel - справочники слишком велики, чтобы грузится на клиента.
Окно редактирования записи такой выборки реализует работу со справочниками так же - клиент получает необходимый минимум. Далее - возможные действия с выборкой - INSERT, UPDATE, DELETE - реализуются так же абстрактными запросами, которые могут представлять собой как атомарные инструкции, так и вызов процедур или целый скрипт. В результате вставки или изменения
конкретная запись сразу же обновляет свое представление в интерфейсе клиента с помощью данных, полученных в результате выполнения соотв. команды или последующей команды (чтобы нарисовать значения из справочников, ссылки на которые воткнулись в текущую запись в результате вставки/модификации).
Не хотелось бы тыкать пальцем, но придется таки ткнуть в давно придуманные и хорошо сделанные велосипеды:
http://www.devart.com/ru/dac.html - VCL-компоненты (когда они начинали, по-моему .NET еще не было)
(Sql/Odbc и т.п.)DataAdapter в .NET
Для DataAdapter на каждое действие создаются команды типа
DA.InsertCommand = new SqlCommand(
@"
DECLARE @ID int, @StructureID int
SET @StructureID = GladeO.MyStructureID()
INSERT into GladeA.Client ([Name], StructureID) values (@Name, @StructureID);
SET @ID = scope_identity();
EXEC GladeA.ClientSelect @ID = @ID;
", dbConnection);
DA.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;
В процессе редактирования таблицы накапливаются данные о совершенных действиях, и потом заливаются соответственно в базу (можно накопить, можно сразу - не суть вопроса). Суть вопроса - есть ли такой же велосипед в Qt, или его надо изобретать начиная с колеса?! По крайней мере, я не нашел способа реализации такого поведения на основе той прослойки для работы с БД, которая уже есть в Qt.
Заранее спасибо за советы и тыканье носом куда следует.