Главная страница
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.022 c
1-1103537115
Andrey_
2004-12-20 13:05
2005.01.09
Управление модемом


14-1103544368
Чеширский_Кот
2004-12-20 15:06
2005.01.09
Никого еще не достала?..


1-1103708141
tradakad
2004-12-22 12:35
2005.01.09
создание многомерного динамического массива чисел


6-1098281463
pomashok
2004-10-20 18:11
2005.01.09
Проверка инета


6-1098380289
Grundic
2004-10-21 21:38
2005.01.09
idUDPClient - проверка перед отправкой - как?