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

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

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

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

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

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

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

> Собственно расшарить коннект в 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
10.02.2006, 14:10
    #33537070
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SaVCL. Как расшарить коннект?
Интересно, по этой теме что-то планируется сделать в SaVCL?
...
Рейтинг: 0 / 0
15.02.2006, 15:41
    #33546834
SaVCL. Как расшарить коннект?
Да, чуть-чуть осталось :)

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

Выписка из help:

property SharedName : string;

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

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

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

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

Скачал, установил в 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
17.02.2006, 11:56
    #33551418
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SaVCL. Как расшарить коннект?
Извиняюсь, трабл обнаружен у меня - в путях PATH нашлась старая версия sadll70.dll. Теперь нормально все.
...
Рейтинг: 0 / 0
17.02.2006, 14:22
    #33552181
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SaVCL. Как расшарить коннект?
Попробовал. Пока прекрасно работает - проверил между exe на Delphi 7 и dll на CBuilder 6.

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

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

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

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


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