![]() |
|
|
#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
|
|||
|
|||
|
ребят, никак разобраться не могу с доступом к объектам модуля, почему-то из другого пакета нет доступа к объектам пакета дата модуля, помогите пожалуйста!
|