Страница 1 из 1

FB Embedded сетевые пути поддерживает вообще?

Добавлено: 15 авг 2005, 16:24
Aleksandr.
При передаче из программы в Dll указателя на объект компонента TPFibDataBase (через Pointer) наблюдал непонятную картину - первая серия обращений к базе идет отлично, все работает. А при следующих вызовах функций dll, использующих подключение к базе, начинают вылетать AV где-то в дебрях исходников компонента, причем трассировка демонстрирует, что объект не уничтожен, свойства его действительны.

Опытные люди подсказали, что для работы в dll путь к базе должен прописываться как сетевой, типа LocalHost:C:\... и т.д. Попытался я сунуть объекту в DataBaseName такого вида запись, но он коннектиться не захотел. Вот я и не могу понять, то ли с головой у меня плохо, то ли embedded версия FireBird с сетевыми путями работать не хочет?

Добавлено: 15 авг 2005, 16:44
kdv
Опытные люди подсказали,
чего это за "опытные люди", которые откровенно гонят по поводу embedded.

если embedded-у передать сетевой путь, то он будет пытаться коннектиться к серверу на указанной машине. если это localhost, и сервер не установлен, то после опр. паузы (когда сетевое соединение даст отлуп) embedded поймет это, и приконнектится через "себя".

насчет av - сомнительно что-то. описал бы ты, что ты именно делаешь. Опять, небось, вся проблема в использовании embedded не по назначению...

Добавлено: 15 авг 2005, 16:57
hvlad
kdv писал(а):если это localhost, и сервер не установлен, то после опр. паузы (когда сетевое соединение даст отлуп) embedded поймет это, и приконнектится через "себя"
Эта... какое "через себя" ? :?

Добавлено: 15 авг 2005, 17:03
Aleksandr.
чего это за "опытные люди", которые откровенно гонят по поводу embedded.
Ну, если человек берется отвечать, то, наверное, он должен что-то знать?
если embedded-у передать сетевой путь, то он будет пытаться коннектиться к серверу на указанной машине. если это localhost, и сервер не установлен, то после опр. паузы (когда сетевое соединение даст отлуп) embedded поймет это, и приконнектится через "себя".
Нет, у меня он при попытке соединения через localhost после паузы выкидывает сообщение

Код: Выделить всё

UnSuccessful execution caused by a system error preclides
successful execution of subsequent statements. Unable to complete network request to host "LOCALHOST".
Failed to establish a connection.
No connection coluld be made because the target machine actively refused it.
насчет av - сомнительно что-то. описал бы ты, что ты именно делаешь. Опять, небось, вся проблема в использовании embedded не по назначению...
Одна функция, импортируемая из Dll, передает внутрь Dll указатель на TPFIBDataBase. Вторая делает много чего, обращаясь к базе, но начинает работу с установки соединения: FDB.Connected:=true
Первая функция вызывается сразу после загрузки Dll в память, вторая - в некоторых случаях по ходу работы. Так вот при первом вызове второй функции все отрабатывает хорошо, а при следующем сразу на строчке FDB.Connected:=true вылезает AV. При этом трассировщик внутри dll показывает, что FDB ему совершенно понятен, не показывает Inaccessible value на просмотре свойств FDB (что было бы, если бы объект был уничтожен или указатель был бы неверным).

Добавлено: 15 авг 2005, 17:28
hvlad
Aleksandr. писал(а):Одна функция, импортируемая из Dll, передает внутрь Dll указатель на TPFIBDataBase
RTFM package

Добавлено: 15 авг 2005, 17:31
Aleksandr.
А для тех, кто в танке, можно? Причем тут real-time пакет?

Добавлено: 15 авг 2005, 17:36
hvlad
Aleksandr. писал(а):А для тех, кто в танке, можно? Причем тут real-time пакет?
Нельзя.
Перед тем, как пользоваться инструментом, обычно узнают как его можно и нужно использовать.
Это касается и fb embedded, и delphi

ps. где я писал о real-time пакетах ? и что это такое ? :lol: :lol: :lol:

Добавлено: 15 авг 2005, 17:40
kdv
Ну, если человек берется отвечать, то, наверное, он должен что-то знать?
не факт. если этот человек для Вас является авторитетом, то пусть он скажет, читал он это, или нет:
http://www.ibase.ru/ibfaq.htm#embedded

сразу замечу, что в одном варианте release notes FB была ошибка, и было написано наоборот - что Embedded НЕ работает через локальный коннект, и нужно указывать сетевой коннект. Только НЕЗНАЮЩИЙ человек мог попасться на эту удочку.
Нет, у меня он при попытке соединения через localhost после паузы выкидывает сообщение
ну и правильно. значит, так делал только Yaffil Personal.
вызывается сразу после загрузки Dll в память

я бы не сказал что все это очень здорово, т.к. Embedded - это тоже dll. Так что, присоединюсь к Владу по поводу package.

package не совсем эквивалент dll. но в данном случае спасет от.
в интернете навалом вопросов и ответов по поводу передачи хэндлов в dll, и везде рекомендуется вместо dll использовать package.