![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при обращении к таблице [D7, IB6.x, FireBird]
carmen © (2006-05-18 18:16:00)Пишу прогу с использование пакетов (bpl). Имеется основной модуль, который по необходимости загружает нужний пакет. Также имеется модуль базы данных. Проблема в следующем.
Модуль базы данных содержит описание базы данных, основных справочников. Один из пакетов использует этот модуль базы данных, объявляется в implementation через uses DataModule.
Так вот, если из пакета обратится к таблице из модуля базы данных возникает ошибка: Access violation at adress 014128F in module 'My_Module.Bpl'. Read of address 000000DC. Если описываю данную таблицю в этом пакете, ошибки нет. Обращаюсь к таблице модуля базы данных так:Data.Q_Get_SQL.ParamByName('name_sql').AsString:='select_saldo';Data это имя модулябазы данных. Что делаю нетак???
Data.Q_Get_SQL.ParamByName('type_sql').AsString:='SELECT';
Data.Q_Get_SQL.ExecQuery;
Carmen (2006-05-19 13:57:00) [1]
> И обязательно экзешник компилять с флагом "использовать
> рантайм пакеты".
так и компилю.
А можно пример по передачы адреса.
ANB (2006-05-19 13:51:00) [2]
> в подгружаемом пакете этот же датамодуль подключаю через
> uses
Вот здесь и кроется ошибка.
> а как его передать?
Передать через параметр какой нибудь функции пакета. В пакете можно сохранить адрес локально, а можно передавать каждой функции пакета.
И обязательно экзешник компилять с флагом "использовать рантайм пакеты".
Carmen (2006-05-19 13:06:00) [3]
> Ничего не понял.
> Давай ка подробнее.
> И так - у тебя есть основной экзешник, к которому ты прикомпилял
> модуль данных.
> Из экзешника ты вызывешь (я так понял - динамически) пакет.
>
> И пакета лезешь к модуль данных основного приложения.
> Вопрос - как ты связал модуль данных с основным приложением
> ?
> Если просто прикомпилял - будет AV.
в подгружаемом пакете этот же датамодуль подключаю через uses
> Нужно передать в пакет адрес модуля данных и уже с ним работать
> в пакете.
а как его передать?
> При этом экзешник и пакет должны быть скомпилены на одной
> делфе.
одна
ANB (2006-05-19 10:05:00) [4]
> Carmen © (18.05.06 23:23) [4]
А экзешник скомпилен с использованием рантайм пакетов ?
ANB (2006-05-19 10:04:00) [5]
> Carmen © (19.05.06 09:19) [5]
Ничего не понял.
Давай ка подробнее.
И так - у тебя есть основной экзешник, к которому ты прикомпилял модуль данных.
Из экзешника ты вызывешь (я так понял - динамически) пакет.
И пакета лезешь к модуль данных основного приложения.
Вопрос - как ты связал модуль данных с основным приложением ?
Если просто прикомпилял - будет AV.
Нужно передать в пакет адрес модуля данных и уже с ним работать в пакете.
При этом экзешник и пакет должны быть скомпилены на одной делфе.
Carmen (2006-05-19 09:19:00) [6]а больше не советов?
Carmen (2006-05-18 23:23:00) [7]датамодуль на момент загрузки пакета уже загружен. Загруженный пакет использует информацию основной базы, транзакции из датамодуля. Все таблицы пакета используют эту информацию из датамодуля и работают нормально. ошибка возникает когда хочу обратится к таблице описаной в датамодуле.
Mike Kouzmine (2006-05-18 22:41:00) [8]carmen © (18.05.06 19:04) [2]
Desdechado © (18.05.06 18:26) [1]
видимо, датамодуль не создан к моменту вызова таблицы из пакета
Проверь порядок создания объектов.
carmen (2006-05-18 19:04:00) [9]автоматом создается главная форма и датамодуль.
когда это все загружено идет загрузка пакетов.
Desdechado (2006-05-18 18:26:00) [10]видимо, датамодуль не создан к моменту вызова таблицы из пакета