powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SaVCL. Как расшарить коннект?
17 сообщений из 17, страница 1 из 1
SaVCL. Как расшарить коннект?
    #33369881
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот подумываю, не пора ли сменить старушку-BDE на что-нибудь посовременнее :) Посматриваю в сторону ADO либо SaVCL. Попробовал поставить SaVCL поиграться и сразу возник вопрос: как обеспечить работу из exe и dll с базой через единый коннект?
При помощи BDE это делалось элементарно. Если dll и exe скомпилированы в одной версии Delphi, то достаточно было у всех TDataBase поставить HandleShared = true и прописать одинаковый DatabaseName. Если разные версии Delphi - то можно было достучаться до BDE-Handle и насильно его использовать. А как с этим в SaVCL?

P.S. оффтопик, конечно, но вопрос до кучи: может кто знает как подобную проблему в ADO решить?
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33371320
В dll достаточно из exe передать указатель на открытый TSaDb и использовать его как будто он создан и открыт в самой dll. У нас так работают exe, где находятся все интерфейсные функции, и dll, где лежат отчеты.

С уважением, Сергей Гаврилов.
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33371379
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гаврилов пишет:
> В dll достаточно из exe передать указатель на открытый TSaDb и
> использовать его как будто он создан и открыт в самой dll. У нас так
> работают exe, где находятся все интерфейсные функции, и dll, где лежат
> отчеты.

А если DLL и EXE сделаны в разных версиях Delphi или например в Delphi и
C++Builder? Не очень красивый и удобный способ.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33371405
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nativedb
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33371420
Вот это вопрос интересный... Знаю точно, что сделать это не так сложно (доработав SaVcl). Постараюсь сделать.

С уважением, Сергей Гаврилов.
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33371514
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гаврилов пишет:
> Вот это вопрос интересный... Знаю точно, что сделать это не так сложно
> (доработав SaVcl). Постараюсь сделать.

Это было бы весьма интересно. У соединения с базой ASA есть какой-нибудь
Handle, аналогичный тому, который используется в BDE?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33371541
Да, конечно, нечто похожее есть. Структура SQLCA. Собственно расшарить коннект в SaVcl - это передать указатель на эту структуру + несколько указателей на экспортированные функции из клиентских dll. Все это можно засунуть в одну структуру и указатель на нее передавать между dll и exe.

С уважением, Сергей Гаврилов.
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33371593
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гаврилов пишет:

> Собственно расшарить коннект в SaVcl - это передать указатель
> на эту структуру + несколько указателей на экспортированные
> функции из клиентских dll. Все это можно засунуть в одну структуру
> и указатель на нее передавать между dll и exe.

Не мне учить, как это сделать, просто выскажу свои соображения. Наводит
на мысли то, что и exe и все dll в приложении независимо от версии
Delphi или билдера используют, очевидно, один и тот же экземпляр
sadll*0.dll. Возможно в ней можно хранить некий контекст коннекта.
Компонент TSaDb должен иметь возможность как создать новый коннект, так
и подключиться к существующему уже созданному. Крайне желательно иметь
возможность держать несколько таких контекстов и идентифицировать их,
например по некоему имени, задаваемому в свойствах. Если коннекта с
указанным именем еще нет, то создается, если есть - используется.
Такой вариант был бы идеальным IMHO и не требовал бы снабжения exe и dll
приложения дополнительными механизмами обмена указателям. Особенно это
актуально, если одна и та же DLL может использоваться разными EXE.

Еще один момент, на который стоит обратить внимание. При уничтожении
компонента TSaDb или при его деактивации коннект не должен рваться, если
есть еще активные подключенные компоненты. Может это и очевидно, но
когда я игрался с ADO и пробовал для TAdoConnection расшаривать
соединение через ConnectionObject, мне не удалось штатно удалить этот
объект (например закрытием формы), не закрыв при этом соединение с базой
при наличии других подключенных TAdoConnection.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33537070
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, по этой теме что-то планируется сделать в SaVCL?
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33546834
Да, чуть-чуть осталось :)

С уважением, Сергей Гаврилов.
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33550281
На http://savcl.narod.ru новая верия SaVcl.

Выписка из help:

property SharedName : string;

Используя свойство SharedName Вы можете создавать в приложении и динамических библиотеках (dll) несколько экземпляров TSaDb с одим физическим подключением к базе данных. Экземпляры TSaDb с одним и тем же именем в свойстве SharedName используют одно общее подключение, которое создается при активации любого из экземпляров и остается активным до тех пор, пока активен хотя бы один из них. Параметры соединения могут быть заданы только в одном экземпляре TSaDb, который должен быть активирован раньше других.

Экземпляры TSaDb с одинаковыми именами в SharedName должны принадлежать одному потоку.

С уважением, Сергей Гаврилов.
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33550938
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Гаврилов пишет:
> На http://savcl.narod.ru новая верия SaVcl.
>
> Выписка из help:
>
> property SharedName : string;

Вот здорово! Займусь тестированием. О результатах доложу.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33551405
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут замечания по обнаруженным проблемам можно писать?

Скачал, установил в Delphi 7 (Build 8.1)

Создаю новый Application
Кидаю на форму SaDb
Задаю в свойствах:
Agent saNetwork
databasename devel
servername IT
Links slTCPIP
UId и PWD - dba sql

Больше ничего. Пробую сделать Active - в результате Delphi молча срубается.

Вторая попытка
Задаю все то же самое плюс дополнительно:
SaVersion sa90
и прописываю SaSysDllPath

При попытке поставить Active ругается DLL Initialization error: sadll90.dll. Error code: -3
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33551418
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, трабл обнаружен у меня - в путях PATH нашлась старая версия sadll70.dll. Теперь нормально все.
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33552181
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал. Пока прекрасно работает - проверил между exe на Delphi 7 и dll на CBuilder 6.

В хелпе стоит упомянуть, что для расшаривания надо еще обязательно выставить одинаковое значение SaVersion.

Кстати, может стоит сделать отдельные bpk для разных версий дельфи-билдера? Впрочем, это непринципиально. Я вручную переименовал в SaVclD7 и SaVclCB6

Еще вопрос из любопытства. Может кто-нибудь знает способ, как вытащить указатель на SQLCA для коннекта, сделанного через ODBC-BDE?
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33553392
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр ГoлдунЕще вопрос из любопытства. Может кто-нибудь знает способ, как вытащить указатель на SQLCA для коннекта, сделанного через ODBC-BDE?Вряд ли это возможно. В ODBC хендл коннекта это указатель на внутреннюю ODBC структуру. Вряд ли dblib использует точно такую-же структуру :)
...
Рейтинг: 0 / 0
SaVCL. Как расшарить коннект?
    #33555276
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Александр ГoлдунЕще вопрос из любопытства. Может кто-нибудь знает способ, как вытащить указатель на SQLCA для коннекта, сделанного через ODBC-BDE?Вряд ли это возможно. В ODBC хендл коннекта это указатель на внутреннюю ODBC структуру. Вряд ли dblib использует точно такую-же структуру :)
Разумеется, структуры разные. Но способ получения, возможно, все-таки есть, вопрос только в том, насколько он геморройный. Если бы удалось его получить, была б вообще сказка - миграцию с BDE-ODBC на SaVCL можно было бы делать постепенно и безболезненно, расшарив между ними общий единый коннект.

Задал вопрос на эту тему в sybase.public.sqlanywhere.general. Посмотрим, может там кто-нибудь подскажет что-то дельное.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / SaVCL. Как расшарить коннект?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]