Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизРабота с БД посредством 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c