![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Serggggg |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
И ещё раз здравствуйте!
Приключения продолжаются. Возникают все новые и новые проблемы. 1. Handle базы данных все-таки передается в dll – для этого надо в uses подключить BDE – тогда Delphi распознают тип hDBIDb. У меня есть пара обработчиков, связанных с таймером:
Без подключения в список USES модуля BDE все это работало. Теперь – ошибка. Судя по всему – при обращении к виндовой функции Time. ‘(’ expected, but ‘;’ found Вопрос следующий: Что это за глюк и как с этим бороться? 2. Как я уже сказал, в dll передается хэндлер БД. Строка вызова процедуры такая:
После этого в самой DLL внутри InitPlugin происходит присвоение глобальной переменной типа hDBIDb нашего хэндлера (дескриптора). После InitPlugin срабатывает такая функция
Интересно то, что работает только строка FComp.Query1.Database.Handle:=HDB_; Строчка FComp.Query1.DBHandle:=HDB_; выдает ошибку – нельзя присвоить что-то свойству объекта, которое ReadOnly После этого (т.к. форма MDI – после Create она сразу становится видимой) в обработчике OnShow происходит открытие запроса. Но до метода OnShow мы не добираемся – при присвоении дескриптора вылетает Access Violation…… Вопрос тот же: Что это за глюк и как с этим бороться? Огромное спасибо за внимание. Подскажите, кто знает. --------------------
C уважением, Serggggg. |
||||||
|
|||||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Свойство доступно только для чтения!!! Присваивание не покатит!
Вообще: забей на dll: засунь форму в приложение, настрой связи и работай спокойно... |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Pakshin A. S., я бы с удовольствием, но НАДО сделать это через DLL - если бы все было так просто, я бы и не спрашивал.
--------------------
C уважением, Serggggg. |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
По-моему, нужна связь такая:
Database1.DataSource -> DataSource1 <- Query1.DataSource (*Мог и ошибку написать, работаю по памяти*) Следовательно надо создать переменную DS: TDataSource; вызов процедуры ....(...DataSource1...); в процедуре YourForm.Query1.DataSource:=DS; P. S. Интересная задачка, надо будет теорию на практику переложить. Получится - выложу. Добавлено @ 12:53 Даа, давно не работал с БД, такую фигню написать. В Query заполни только DatabaseName ( тип string) В Database есть то самое DatabaseName. => выбираешь Alias, заполняешь DatabaseName и запоминаешь, передаешь в Dll, заполняешь в Query и должно заработать... и ещё Может делать отдельный коннект? Это сообщение отредактировал(а) Pakshin A. S. - 15.6.2004, 13:15 |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Если не юзать MDI, то элементарно!
В таком случае нужно передать в DLL login и password и законнектиться автоматом (в DLL компоненте TDatabase присваивается LoginPromt=False, забиваются полученные параметры login и password, а потом Connected:=True - работает, как часы). А при работе с MDI это не совсем удобно. Чтобы законнектиться, надо сделать компоненте TDatabase Create. Это возможно при создании формы. А при создании MDI-формы её уже не спрячешь. Пихать по 1 компоненту TDatabase на каждую форму, ИМХО, не совсем рационально. А по поводу передачи датасетов - сейчас буду пробовать. Спасибо. --------------------
C уважением, Serggggg. |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Не Сет'ы, а Имя Базы Данных в компоненте DataBase
Добавлено @ 14:19 Может это одно и то же?! |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Именно DataBaseName предлагаешь передать?
Кто-то когда-то говорил мне, что под dll выделяется другое адресное пространство, а для нормальной работы с соединением надо, чтобы было одно адресное пространство. В принципе, я полагал, что передача TScreen и TApplication эту проблему решат, но, видимо, ошибался. Короче, я в тупике. --------------------
C уважением, Serggggg. |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Может наладить мосты с робительским окном напрямую, ведь у MDI-формы есть "родитель", к которому можно свободно обращаться... А в родителе есть компоненты доступа к БД и т. п...
Добавлено @ 17:25 Ещё идея. В DLL делаешь фенкцию с возвратом TFrom. У любой формы есть такая штука: MDIChildren[i:integer]:TFrom. Значит управлять дочерней формой можно из родительской, а самое главное - это проще! |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Pakshin A. S., буду весьма благодарен, если поможешь куском кода в качестве примера.
А последняя твоя идея весьма неплоха. Единственное - как именно? Я первый разработаю с MDI в DLL. --------------------
C уважением, Serggggg. |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Идея такова... |
|||
|
||||
| Serggggg |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Выход из ситуации был найден. Только, правда, пришлось задействовать 2 коннекта.
Если кому пригодится, буду очень рад. Итак, внутри dll объявляется переменная типа TDatabase, которая в дальнейшем коннектится с сервером и позволяет нормально работать всем запросам и таблицам, находящимся внутри dll. Привожу мой код. Если кто-то найдет более рациональное решение, поделитесь пожалуйста. EXE-файл, главный модуль.
Теперь то, что происходит внутри dll (код целиком):
Надеюсь, кому-то это поможет. --------------------
C уважением, Serggggg. |
||||
|
|||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
Всегда рад подкинуть идейки... если что, обращайся.
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
Сорри что раньше не писал ( сесия
ссылка на DataSource ( о которой я раньше писал ) -- просто параметр типа Db::TDataSource т.е. создаеш где-то DataSource ( можно и на форме ) и передаеш в dll его в dll: Query.DataSourc = DataSource ( ссылка ) должно работать -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |