Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1103609939
DDDeN
2004-12-21 09:18
2005.01.09
Перезаписать используемый другой прогой файл


14-1103510483
Василий Микушев
2004-12-20 05:41
2005.01.09
Ищу программиста!


3-1102484477
Sirus
2004-12-08 08:41
2005.01.09
EXTERNAL FILE при создании таблицы в Interbase...


6-1098311226
sirin
2004-10-21 02:27
2005.01.09
FindFirst


1-1103646996
Ландграф Павел
2004-12-21 19:36
2005.01.09
получение "полного пути" - из .. cls получить c: folder cls





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский