Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.09.2012, 09:39
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию DataModule.bpl

Создал DataModule.bpl, в котором модуль называется "DM"
В моём проекте два модуля bpl, которые используют модуль DM. Добавил DataModule.dcp в requires модулей. Пытаюсь сбилдить проект, выдаёт ошибку
Код:
Undeclared identifier 'DM'
Кто сталкивался с такой проблемкой? Поможите, плиз!
Ответить с цитированием
  #2  
Старый 04.09.2012, 15:22
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

не пойму, в каком месте нужно объявлять 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  
Старый 04.09.2012, 15:43
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Ну в том юните , где
Undeclared identifier 'DM'
нужно добавить
uses UDataModule;
А в самом UDataModule.pas вроде всё правильно.
Ответить с цитированием
Этот пользователь сказал Спасибо icWasya за это полезное сообщение:
sorockinalex (04.09.2012)
  #4  
Старый 04.09.2012, 15:55
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

вот это решение не помогает: http://www.delphimaster.net/view/1-1088655081/all
Ответить с цитированием
  #5  
Старый 04.09.2012, 16:27
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
Ну в том юните , где
Undeclared identifier 'DM'
нужно добавить
uses UDataModule;
А в самом UDataModule.pas вроде всё правильно.
блин, спасибо большое!
Оказывается, если в requires добавлено, то в uses имя .pas файла надо указывать (UDataModule), а не имя модуля - DataModule...

Последний раз редактировалось sorockinalex, 04.09.2012 в 16:29.
Ответить с цитированием
  #6  
Старый 04.09.2012, 17:22
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от sorockinalex
блин, спасибо большое!
Оказывается, если в requires добавлено, то в uses имя .pas файла надо указывать (UDataModule), а не имя модуля - DataModule...
Это всегда так - в uses нужно указывать только имя .pas-файла и ничто другое
Ответить с цитированием
  #7  
Старый 06.09.2012, 00:37
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Вот ещё возникла проблемка:
В этом bpl дата-модуле лежит Ado Query.. При загрузке приложения вылетает окошко с логином, проверяется логин и пароль в базе данных. Всё работает! Далее пытаюсь открыть другой модуль, в котором происходит доступ к этому Query, но вылетает ошибка. Понял так, что из-за того, что он (Query) кем-то занят.. Попробовал просто второй раз запустить модуль логина - то же самое. Второй раз достучаться до Query невозможно...
Хотя в коде есть освобождение запроса:
Код:
        DM.Query.Close;
        DM.Query.Active:=False;
        DM.Query.Free;
Ответить с цитированием
  #8  
Старый 06.09.2012, 01:10
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Так заработало.. странно, зачем я освобождал...

Код:
//DM.Query.Close;
DM.Query.Active:=False;
//DM.Query.Free;
Ответить с цитированием
  #9  
Старый 24.01.2013, 19:32
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Ребята, есть проблемка!
Решил 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  
Старый 24.01.2013, 19:44
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Блин, допёр! DM - он как форма, ещё не создан, хотя модуль подгружен... Как теперь создать его?
Ответить с цитированием
  #11  
Старый 24.01.2013, 19:53
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Так не срабатывает:
Код:
Application.CreateForm(TDM, DM);
Ошибку выдаёт: incompatible types TComponentClass and TDataModule
Хотя в var прописал
Код:
TDM:TDataModule;
Ответить с цитированием
  #12  
Старый 24.01.2013, 20:09
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Ещё уточнение:
Главный файл 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  
Старый 25.01.2013, 15:31
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

ребят, никак разобраться не могу с доступом к объектам модуля, почему-то из другого пакета нет доступа к объектам пакета дата модуля, помогите пожалуйста!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:34.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025