Главная страница
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.023 c
1-1103663979
Bobby Digital
2004-12-22 00:19
2005.01.09
MS Word


6-1092294155
Bellf
2004-08-12 11:02
2005.01.09
Вопрос об отправке сообщений по сети


14-1103645631
SergP.
2004-12-21 19:13
2005.01.09
Formula One F1Book


3-1102081659
An
2004-12-03 16:47
2005.01.09
Отчёт в MS Word


14-1103616384
Vasya.ru
2004-12-21 11:06
2005.01.09
regedit не запускается