|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.02.2008, 09:23 | #1 |
Регистрация: 18.02.2008
Сообщений: 3
|
работа с БД (компонент ADO,dbGrid) через dll
есть exeшник. В нем через меню вызываются функция, которая описана в dll.
В dll есть DataModule, adoConnection, query, т.е. все компонеты необходимые для работы с БД. Единственно чего нет, это строки коннекта для adoConnection, она предается из exeшника. Далее (при нажатии на пункт меню в exeшнике) открывается форма, описанная в dll. на ней есть дбгрид, он отбражает данные с query. Проблема в том, что когда из exeшника первый раз вызываешь форму, все отображается нормально, но если закрыть эту форму и не выходя из из exeшника снова ее открыть, грид как будто не обновляется: в нем отражаются старые данные(то, что висело в нем на момент закрытия формы), хотя RecordCount выдает верное кол-во запсией, находящихся в query. Query выполняется каждый раз при активации формы. Компилятор ошибок не выдает. В логике тоже видимых изъянов нет. Когда Форма была в обычном проекте, такой проблемы не возникало. Может надо как-то насильно освобождать/очищать грид при закрытии формы? Или что-то другое делать? Подскажите, пожалуста. |
20.02.2008, 12:11 | #2 |
Дон Кихот
Форумчанин
Регистрация: 17.01.2008
Сообщений: 130
|
Сделай dll выгружаемой. Она у тебя скорее всего в памяти остается висеть. Или в самой dll исправь, чтобы при инициализации переоткрывался запрос к БД.
|
28.02.2008, 06:20 | #3 |
Регистрация: 18.02.2008
Сообщений: 3
|
DLL я вызываю по нажатии кнопки. Код приведен ниже .
//переменные DLLInstance : THandle; ExecProc : TExecProc; // процедура вызова begin DLLInstance := LoadLibrary(PChar(GetCurrentDir()+' \my_.dll')); @ExecProc := GetProcAddress(DLLInstance, 'my_proc1'); my_proc1(ADOConnection1.ConnectionO bject);//передается коннект @ExecProc := GetProcAddress(DLLInstance, 'my_proc2'); my_proc2(my_parametr); FreeLibrary(DLLInstance); end; я не очень понимаю что такое выгружаемая процедура, но разве FreeLibrary(DLLInstance) не освобождает память? запросы я переоткрываю до того как показываю форму //процедура, где открывеатся форма procedure my_proc2(my_parametr); stdcall; begin If(my_function(my_parametr)) then begin FindDocForm.ShowModal; end; end; //функция, проверяющая открытие запроса function my_function(my_parametr):boolean; begin try query.Close; query.Open; my_function:=true; except my_function:=false; end; если не затруднит, в ответе хотя бы пару строчек возможного кода черкните, плиз. заранее спаибо |
28.02.2008, 09:50 | #4 |
Дон Кихот
Форумчанин
Регистрация: 17.01.2008
Сообщений: 130
|
Мне не нравится my_proc1(ADOConnection1.ConnectionO bject);
Может лучше попробовать передать строку соединения ADOConnection1.ConnectionString и при вызове dll установить соединение, при закрытие освободить его. Т.е.будет опрос БД в dll будет независим от Вашего источника в программе. |
29.02.2008, 12:23 | #5 |
Регистрация: 18.02.2008
Сообщений: 3
|
установить соединения это свойство connected? или я ошибаюсь?
замена ConnectionObject на ConnectionString пока не помогла :'( |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
работа через прокси | BESS | Работа с сетью в Delphi | 18 | 28.09.2008 21:45 |
работа с БД без vcl компонент | Jager-ntr | БД в Delphi | 1 | 17.05.2008 21:20 |
Работа с DBGrid | HAMMAN | Помощь студентам | 2 | 10.05.2008 11:35 |
Работа с конкретной строкой в DBGrid | alikon1 | БД в Delphi | 1 | 10.12.2007 09:07 |
работа с excel файлами через Delphi | Winss | Помощь студентам | 6 | 08.09.2007 17:54 |