Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Как передать ссылку на комп.IbDatabase,IbQuery в DLL ?   Найти похожие ветки 

 
jiny   (2006-04-26 10:18) [0]

Есть Основной проект и DLL(которая служит для обновления константных справочников)
так вот, дабы не создавать еще одно подключение к серверу и уж тем более к базе, я в DLL создал 3 переменные, соответственно :
   tmpSprIBDatabase: tibdatabase;
   tmpSprIbQuery: tibquery;
   tmpSprIbTrans: tibtransaction;
хотя можно , в принципе от tmpSprIbTrans откреститься, т.к. ссылка на него есть в  tmpSprIbQuery.Transaction.

В DLL проекте пишу :

procedure ShowConstsrUpdater(xdt: TIbDatabase;xqr: TibQuery;xTrans: TibTransaction);
var form: TFrmUpdater;
begin
 Form := TFrmConstsUpdater.Create(Application);
 form.tmpIBDatabase:=xdt;
 form.tmpIbQuery:=xqr;
 form.tmpIbTrans:=xTrans;
 Form.ShowModal;
 Form.Free;
end;


В основном проекте вызываю все это :

procedure TFrmMain.ActUpdateContsExecute(Sender: TObject);
var
 dllInstance : Thandle;
 ShowConstsUpdater: procedure (xdt: TIbDatabase;xqr: TibQuery;xTrans: TibTransaction);
begin

 dllInstance:=LoadLibrary("sprupdater.dll");
 if DLLInstance = 0 then
 begin
   MessageDlg("Не могу загрузить DLL"+#13+"проверьте наличие файла sprupdater.dll, обновление не выполнено !!!", mtError, [mbOK], 0);
   Exit;
 end;
 @ShowConstsUpdater:=nil;
 @ShowConstsUpdater:=GetProcAddress(DLLInstance,"ShowConstsUpdater");

 if @ShowConstsUpdater <> nil then
         ShowConstsUpdater(dm1.dtbMain,dm1.qrUpdater,dm1.transAdm);

 FreeLibrary(DLLInstance);
end;


В самой форме FrmConstsUpdater объявлены переменные в разделе public  :

public
   tmpIBDatabase: TIbDatabase;
   tmpIbQuery: TIbQuery;
   tmpIbTrans: TIbTransaction;


в процедуре этой же формы пишу :

tmpIbTrans.StartTransaction

на что мне выдается ошибка :
Access violation at address 00000000. Read of Address 00000000
Честно говоря со ссылками я мало работал и, видимо, это мое упущение...
Что делать ?


 
jiny   (2006-04-26 11:24) [1]

так все-таки ?


 
Виталий Панасенко   (2006-04-26 11:43) [2]

Подключение к БД по локальному протоколу ? Если да, то попробуй удаленное, в качестве сервера=LOCALHOST. Так, по крайней мере(вроде бы читал), в документации описано об использовании подключения в DLL. Хотя, все эти заморочки с
> дабы не создавать еще одно подключение к серверу и уж тем
> более к базе
. А что, к БД м.б. только одно подключение?


 
jiny   (2006-04-26 11:53) [3]

для Виталий Панасенко   (26.04.06 11:43) [2]
Тут в принципе неважно локально или удаленно подключается передаваемая ссылка на БД, т.к. данного вопроса оно , т.е. подключение не касается, хотя бы в виду того, что  оно уже состоялось.

> дабы не создавать еще одно подключение к серверу и уж тем
> более к базе
Прога проверяет одно ли подключение осуществлено к БД, если нет то обновление не состоится.
Меня интересует как управлять вышеперечисленными передаваемыми ссылками


 
Виталий Панасенко   (2006-04-26 15:23) [4]


> jiny   (26.04.06 11:53) [3]
> для Виталий Панасенко   (26.04.06 11:43) [2]
> Тут в принципе неважно локально или удаленно подключается
> передаваемая ссылка на БД, т.к. данного вопроса оно , т.
> е. подключение не касается, хотя бы в виду того, что  оно
> уже состоялось.

Если так считаешь, то зачем спрашивать. Я видел своими глазами в документации и на форумах, что при работе с БД НЕОБХОДИМО использовать удаленный варинат подключения.Даже если сервер установлен на этой же машине. Такая необходимость есть при использовании FB/IB  в WEB-приложениях (ISAPI/NSAPI). Хотя, может и не в этом проблема.


 
Desdechado ©   (2006-04-26 20:47) [5]

DLL и проект должны быть скомпилированы в одной версии дельфи


 
jiny   (2006-04-27 09:50) [6]

Виталий Панасенко   (26.04.06 15:23) [4]
Тут вопрос идет не о подключении . Подключение уже состоялось в основном проекте, мне нужно просто передать ссылку на IBquery в DLL
где DLL уже будет производить всякие манипуляции с компонентом (выборки и т.п)

Desdechado ©   (26.04.06 20:47) [5]
они скомпилированы именно так.

Так вот это у меня не получается(передача ссылки в DLL)

Еще раз вкратце :
1. Открываю основной проект.
2. при авторизации происходит коннект к БД с соответствующими ролями и проч.
3. При запросе пользователя на обновление справочников вызывается соответствующая DLL, куда я должен передать ссылку на IB компоненты.
4. DLL производит все необходимые манипуляции и закрывается, удаляя за собой все переменные и ссылки на них.

Спасибо заранее


 
Виталий Панасенко   (2006-04-27 10:27) [7]


> Desdechado ©   (26.04.06 20:47) [5]
> DLL и проект должны быть скомпилированы в одной версии дельфи

Тогда и KERNEL32 нужно так же компилить.:-)))


 
Desdechado ©   (2006-04-27 10:39) [8]

> DLL производит все необходимые манипуляции и закрывается
> удаляя за собой все переменные и ссылки на них.
т.е. разрушение database и query происходит в DLL ?

раз обращение по адресу 00000, то объекты либо не созданы еще, либо уже разрушены и обнилены

Виталий Панасенко   (27.04.06 10:27) [7]
кернел тут ни при чем
дело в том, что в DLL тоже сохраняется описание классов
если оно отличается от того, что в EXE, то AV неминуемо


 
jiny   (2006-04-27 13:48) [9]

Виталий Панасенко   (27.04.06 10:27) [7]
>>Тогда и KERNEL32 нужно так же компилить.:-)))
Очень умно :) Чувство юмора вам не занимать.

Desdechado ©   (27.04.06 10:39) [8]
>>т.е. разрушение database и query происходит в DLL
я имел ввиду пер.и ссылки в пределах отдельно взятой DLL
Я даже не представляю что бы было если бы уничтожение происходило в DLL

Я так понял это вопрос в API, хотя вроде как бы и базами связан :(
И почему тогда Админ не перевел мой вопрос в API ?



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.087 c
1-1147893773
Damager
2006-05-17 23:22
2006.06.25
Надписи на кнопках ToolBar


11-1129201301
ECM
2005-10-13 15:01
2006.06.25
BUG: SizeGrip и ASM-версия NewForm


3-1146593736
nopox
2006-05-02 22:15
2006.06.25
Помогите разобраться с выборкой из БД


15-1148323166
Kerk
2006-05-22 22:39
2006.06.25
коддавинчи


3-1146110130
Insane SPIRIT
2006-04-27 07:55
2006.06.25
После SQL-запроса Table1 недоступна!