Главная страница
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
14-1103057165
Torry
2004-12-14 23:46
2005.01.09
MS SQL и необходимость кое-что срочно проверить


14-1103021793
Alexander Panov
2004-12-14 13:56
2005.01.09
Выборы в Украине. Противостояние. (Продолжение 4)


1-1103716877
UVV
2004-12-22 15:01
2005.01.09
Время


3-1102494574
Fedor
2004-12-08 11:29
2005.01.09
Как лучше записи копировать?


1-1103545315
tradakad
2004-12-20 15:21
2005.01.09
показать имя PopupMemu итема