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

Вниз

Работа с БД посредством DLL   Найти похожие ветки 

 
NikeOLD ©   (2004-12-07 18:37) [0]

Добрый день!
Есть приложение. На форме есть TreeView и компонент коннекта к базе (ZConnection). Дерево должно заливаться процедурой, находящейся в DLL. В процедуру передается указатели на дерево и коннекшн.
В самой процедуре создается экземпляр запроса.
Первый вызов проходит удачно. А вот при повторном вызове происходит AV при попытке открытия запроса.
Поскольку все тоже самое но в пределах одного приложения работает без проблем, ошибка именно в организации DLL. Как это можно исправить?
Спасибо.


 
Соловьев ©   (2004-12-07 18:50) [1]


>В самой процедуре создается экземпляр запроса.
Первый вызов проходит удачно. А вот при повторном вызове происходит AV при попытке открытия запроса.

Код?


 
NikeOLD ©   (2004-12-07 19:21) [2]

Примерно так

Приложение
procedure FillTree(pTree: Pointer; pConnect: Pointer); stdcall; external "MyDLL.dll";

procedure TForm1.Button1Click(Sender: TObject);
begin
 FillTree(Pointer(TTreeView1), Pointer(ZConnection1));
end;


MyDLL

procedure FillTree(pTree: Pointer; pConnect: Pointer); stdcall;
var
 Q: TZQuery;
begin
 Q:=TZQuery.Create(nil);
 try
   Q.Connection := TZConnection(pConnect);
   Q.Close;
   Q.Clear;
   Q.AddSQL(<текст запроса>);
   Q.Open;
   
   работа .... работа .... работа.....
   ничего криминального    

 finally
   Q.Close;
   Q.Free;
 end;
end;


Первый проход этой процедуры успешен. Но при повторном вызове сбой при открытии запроса. На сколько мне удалось выяснить сбой происходит при любой повторной поытке использования запроса. Т.е. если не разрушая запрос, сначала его закрыть, а потом снова открыть, то произойдет ошибка.
Кроме того при выходе из приложения тоже происходит AV.


 
Cobalt ©   (2004-12-07 22:39) [3]

Внимание - вопрос.
Как поступает TZQuery при своём удалении?
Точнее, интересует такой вопрос - как он поступает со своим полем Connection?


 
DrPass ©   (2004-12-07 22:52) [4]


> ошибка именно в организации DLL. Как это можно исправить?

Прочитаем еще раз Большой Синий Комментарий вверху свежесозданной DLL, и добавим ShareMem куда положено


 
NikeOLD ©   (2004-12-08 10:20) [5]


> Прочитаем еще раз Большой Синий Комментарий вверху свежесозданной
> DLL, и добавим ShareMem куда положено

Делали, не помогло.


> Как поступает TZQuery при своём удалении?
> Точнее, интересует такой вопрос - как он поступает со своим
> полем Connection?

Если ты имеешь ввиду не убивает ли она Connection, то нет, не прибивает. Больше сказать затрудняюсь.


 
Cobalt ©   (2004-12-08 11:44) [6]

Могу порекомендовать только пройтись отладчиком по этой ДЛЛ. Пошагово. внутрь каждой процедуры.


 
NikeOLD ©   (2004-12-08 12:28) [7]

Ошибка происходит именно при ZQuery.Open. Что-то с выделением памяти под запрос насколько я понял. Во всем остальном нормально.


 
R768   (2004-12-08 13:16) [8]

Только что попробовал Ваш код с ADO компонентами, с заполнением TListBox-а, всё корректно работает сколько не перезапускай. Странно. (D6 MSSQL)


 
NikeOLD ©   (2004-12-08 22:08) [9]


> R768   (08.12.04 13:16) [8]

Спасибо. Дело в том, что компоненты, которые мне повелели использовать не юзают ни ADO, ни ODBC. Они напрямую обращаются к Оракловской БД по протоколу. Черт их знает как они точно это делают.



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

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

Наверх




Память: 0.49 MB
Время: 0.039 c
1-1103556332
malij
2004-12-20 18:25
2005.01.09
messages


14-1103524302
MrCorp1
2004-12-20 09:31
2005.01.09
MSDN Library 2005


14-1103343805
Думкин
2004-12-18 07:23
2005.01.09
С днем рождения! 18 декабря


1-1103785522
Jeka
2004-12-23 10:05
2005.01.09
Вопрос по настройке D2005


4-1100691991
H.A.Z.A.R.D.
2004-11-17 14:46
2005.01.09
How Create a System Service [Install Service] (создать службу)