![]() |
|
#1
|
|||
|
|||
![]() Создал DataModule.bpl, в котором модуль называется "DM"
В моём проекте два модуля bpl, которые используют модуль DM. Добавил DataModule.dcp в requires модулей. Пытаюсь сбилдить проект, выдаёт ошибку Код:
Undeclared identifier 'DM' |
#2
|
|||
|
|||
![]() не пойму, в каком месте нужно объявлять DM и переменные, чтобы они были видны другим модулям.???
Код:
unit UDataModule; interface uses Windows, Messages, SysUtils,Classes,Dialogs, DB, ADODB, IniFiles; type TExecuteModal = procedure; TFamilyName = function:string; TPluginName = function:string; TDM = class(TDataModule) Query: TADOQuery; DataSet: TADODataSet; procedure DataModuleCreate(Sender: TObject); private public end; procedure LoadPlugin(PlName:String; H:HWND); const MY_MESSAGE = WM_USER + 1; var DM: TDM; // ParentHandle:HWND; //Ãëîáàëüíûå ïåðåìåííûå äëÿ ëîãèíà ïîëüçîâàòåëÿ Employee_Key:Cardinal; Employee_Id:Cardinal; Employee_Pass, Employee_Name1, Employee_Name2, Employee_Name3:string; Logon_Key:Cardinal; implementation {$R *.dfm} |
#3
|
|||
|
|||
![]() Ну в том юните , где
Undeclared identifier 'DM' нужно добавить uses UDataModule; А в самом UDataModule.pas вроде всё правильно. |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
sorockinalex (04.09.2012)
|
#4
|
|||
|
|||
![]() вот это решение не помогает: http://www.delphimaster.net/view/1-1088655081/all
|
#5
|
|||
|
|||
![]() Цитата:
Оказывается, если в requires добавлено, то в uses имя .pas файла надо указывать (UDataModule), а не имя модуля - DataModule... Последний раз редактировалось sorockinalex, 04.09.2012 в 16:29. |
#6
|
||||
|
||||
![]() Цитата:
![]() |
#7
|
|||
|
|||
![]() Вот ещё возникла проблемка:
В этом bpl дата-модуле лежит Ado Query.. При загрузке приложения вылетает окошко с логином, проверяется логин и пароль в базе данных. Всё работает! Далее пытаюсь открыть другой модуль, в котором происходит доступ к этому Query, но вылетает ошибка. Понял так, что из-за того, что он (Query) кем-то занят.. Попробовал просто второй раз запустить модуль логина - то же самое. Второй раз достучаться до Query невозможно... Хотя в коде есть освобождение запроса: Код:
DM.Query.Close; DM.Query.Active:=False; DM.Query.Free; |
#8
|
|||
|
|||
![]() Так заработало.. странно, зачем я освобождал...
Код:
//DM.Query.Close; DM.Query.Active:=False; //DM.Query.Free; |
#9
|
|||
|
|||
![]() Ребята, есть проблемка!
Решил DataModule.bpl загружать динамически, вместо того, чтобы он висел в Project->Options->Build with runtime packages Удалил его оттуда, там осталось только rtl;vcl Всё компилируется, модуль загружается... НО! В этом модуле присутствует компонент Query (ADOQuery) Когда дата модуль был прописан в строке "Project->Options->Build with runtime packages", то работало всё, как только оттуда его убираю, то возникает ошибка на строке: Код:
DM.Query.SQL.Clear; Структура модуля: DataModule.bpl -DataModule.pas -DM Как можно решить данную проблемку?? И где я делаю неправильно??? |
#10
|
|||
|
|||
![]() Блин, допёр! DM - он как форма, ещё не создан, хотя модуль подгружен... Как теперь создать его?
|
#11
|
|||
|
|||
![]() Так не срабатывает:
Код:
Application.CreateForm(TDM, DM); Хотя в var прописал Код:
TDM:TDataModule; |
#12
|
|||
|
|||
![]() Ещё уточнение:
Главный файл exe первым загружает модуль DataModule.bpl Код:
procedure TFMain.FormCreate(Sender: TObject); var r: TRect; begin LoadDataModule(); Application.CreateForm(TDM, DM); DM.Query.Active:=False; MainHandle:= Self.Handle; SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0); Self.Width:=r.Right; Self.Height:=r.Bottom; Self.Left:=r.Left; Self.Top:=r.Top; end; в этом случае строка Код:
DM.Query.Active:=False; далее загружается модуль Login.bpl. Модуль datamodule.bpl не выгружается из памяти... Так вот из модуля Login.bpl уже на строке Код:
DM.Query.Active:=False; вылетает с ошибкой... |
#13
|
|||
|
|||
![]() ребят, никак разобраться не могу с доступом к объектам модуля, почему-то из другого пакета нет доступа к объектам пакета дата модуля, помогите пожалуйста!
|