Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.11.2009, 19:15
acidlord acidlord вне форума
Прохожий
 
Регистрация: 28.11.2009
Сообщения: 2
Репутация: 10
По умолчанию Транзакции в DLL

Добрый день всем...

Перейду сразу к делу. Веду разработку MDI приложения, где дочерние окна подгружаются как отдельные плагины в виде DLL (не пакеты). Приложение работает с БД MySQL через MyDAC (пока последней версии). Вызов и закрытие всех окон происходит перекрестно через COM интерфесы. Задача состоит в том, чтобы иметь возможность вести единую транзакцию во всех окнах приложения. Пока ничего не получается.
Сделаны следующие попытки:
1. Передача во все окна ссылки на TMyConnection. Ошибка сыпалась на вычисляемых полях (Invalid class typecast).
2. Переделал модуль данных в основном приложении на СОМ объект и передаю в DLL интерфейс на модуль данных. Ошибка пропала, но появилась такая же ошибка на dataset.fieldbyname('').value = value (именно когда fieldbyname в левой части).
Хотелось бы послушать опыт решения проблемы, если она была решена. Полазил по инету - решение предлагается для БД Interbase как передача handle-а соединения, однако у TMyConnection-а нет никаких хендлов. В общем отдаю на ваш суд. Добавлю, что все проекты DLL и основной EXE скомпилированы с включенными в них рантайм пакетами в одной версии делфи 2009.
Заранее благодарен.
Ответить с цитированием
  #2  
Старый 28.11.2009, 23:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вариант - передавать в DLL указатель на функцию для запуска и окончания транзакции. При этом, хотя вызов придет из DLL, но код принадлежит основному модулю.
Ответить с цитированием
  #3  
Старый 29.11.2009, 10:47
acidlord acidlord вне форума
Прохожий
 
Регистрация: 28.11.2009
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Вариант - передавать в DLL указатель на функцию для запуска и окончания транзакции. При этом, хотя вызов придет из DLL, но код принадлежит основному модулю.

Во втором описанном мною варианте реализации (модуль данных с интерфейсами) так и сделано... однако проблема в другом. Мне не удается подключиться к одному TMyConnection в ЕХЕ - источниками (DataSet-ами) данных в ДЛЛ. В общем как мне единогласно не один человек объяснил - в текущей конструкции VCL это невозможно сделать... Нужно переходить на BPL вместо DLL.
Ответить с цитированием
  #4  
Старый 29.11.2009, 16:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, в принципе, да. Хотя есть вариант и обойти это.
Только всю работу с БД надо оставить в EXE, а в DLL передавать готовый TDataSet. Тогда прокатит. Делал такое. Работает, но получается все-равно довольно ограниченный функционал.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter