Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при обращении к таблице [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.Q_Get_SQL.ParamByName('type_sql').AsString:='SELECT';
Data.Q_Get_SQL.ExecQuery;
Data это имя модулябазы данных. Что делаю нетак???


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]

видимо, датамодуль не создан к моменту вызова таблицы из пакета


Наверх

Титульная страница Поиск, карта сайта Написать письмо