datamodule delphi что это

Delphi Notes

Заметки Delphi + Oracle программиста

Страницы

вторник, 29 октября 2013 г.

Полезняшки. С чего мы начинаем приложение в Delphi

Суть заметки в двух словах: организация dpr-файла и вынос мозга инициализации приложения в DataModule.

Эту заметку не стоит рассматривать как единственно верный вариант. Просто я хочу поделиться опытом. Я расскажу, как делаю я и как это делается у нас. Ничего особенного. Но самостоятельно к этому приходят не все и не сразу. А делаю я так, потому что описанный ниже подход облегчает сопровождение проектов (особенно, когда их несколько, и все они потихоньку разрастаются).

Итак, первое, что я всегда делаю после установки Delphi – снимаю флаг с пункта меню Auto create forms & data modules. Этот флаг по умолчанию установлен, наверное, как дань традиции. Однако сразу создавать все формы в приложении не есть хорошо. Я считаю, что ресурсы у системы надо выделять по мере необходимости (ну за исключением совсем простых, либо совсем особых случаев).

Затем устанавливаем пакет BaseForms (для VCL). Или не устанавливаем, но я на BaseForms ещё буду ссылаться.

Далее создаём новый проект. И сразу же удаляем только что созданную форму, т.к. она не базовая. Затем создаём датамодуль, форму которого называем DM, а файл – DataModule.pas. Это будет модуль, координирующий инициализацию и завершение приложения. Теперь можно всё сохранить и дать название нашему приложению. К примеру: MyTestProject. (Да, и добавим ещё AppExt в dpr-файл). Теперь dpr-файл выглядит вот так:

Тут хочу акцентировать внимание на том, что в dpr-файле создаётся только DataModule (DM). Остальные формы будут добавляться в uses, но секция begin – end. затрагиваться не будет.

И вот всё самое интересное выносим в DataModule.OnCreate. Это могут быть: SplashScreen, логгер критических ошибок, чтение пользовательских предпочтений, словарь данных, текстовые ресурсы. Здесь же спрашиваем логин/пароль у пользователя, если мы работаем с БД (и если без подключения к БД работать нет смысла). У меня всё это выглядит примерно так:

Пару комментариев к коду. Сначала показываем SplashScreen, чтобы пользователю не было “скучно”. Затем загружаем всё необходимое для работы приложения. QueryConnect в наших приложениях – это отображение полей ввода для пароля/логина к БД прям в окне SplashScreen и запуск цикла с Application.ProcessMessages, чтобы пользователь мог их ввести; плюс N-попыток подключения к БД. Если подключиться не удалось – QueryConnect вернёт False и произойдёт нормальное завершение приложения (т.к. Application.MainForm ещё не определён).

Читайте также:  Что значит тан жен

PrepareDataModules – создаёт остальные датамодули. У нас их несколько – один хранит в себе ImageList’ы (т.е. все пиктограммы для тулбаров и меню собраны в одном месте, это очень удобно), другой содержит компоненты FastReport’а и механизмы для работы с отчётами, третий – датасеты (ну у нас не датасеты и генерируется оно автоматически, но инициализировать это тоже надо).

PrepareMainForm – создаёт главную форму приложения, ей будет передано управление в Application.Run сразу после выхода из приведённого обработчика.

Ещё Вы можете обратить внимание на то, что датамодуль у нас называется DM, а код выше я (намеренно) представил от имени TAppDataModule (вместо TDM). Это ещё одно упрощение для сопровождения – TAppDataModule содержит набор виртуальных методов (типа AfterConnected и PrepareMainForm) и является общим для группы проектов. А для конкретного проекта (типа MyTestProject) TDM наследуется от TAppDataModule и содержит уникальные для приложения вещи. (К слову сказать, TAppDataModule и остальные датамодули у нас наследуется от базового датамодуля, по аналогии с формами.)

Источник

System.Classes.TDataModule

Properties

Description

TDataModule centralizes the handling of nonvisual components in an application.

Use a TDataModule object in an application to provide a location for centralized handling of nonvisual components. Typically these are data access components, such as TSQLDataSet, and TSQLConnection. DataModules are not limited to data access components, they can also contain other nonvisual components, such as TTimer, TOpenDialog, or TImageList.

At design time, a TDataModule object provides a visual container into which you can place nonvisual components, set their properties, and write event handlers for them. To create a data module at design time, from an existing application choose:

where personality is either Delpi or C++Builder.

In the unit file for the data module, you can also place any business rules that are to be applied to the application.

To make the data module available to another unit in the application, select the unit, then choose either:

This adds the data module to the uses clause for the unit.

Читайте также:  Что значит три подхода по 10 повторений

For example, the VCL nonvisual component TActionList does not appear in the Tool Palette for a data module whose ClassGroup pseudo-property is System.Classes.TPersistent (framework-neutral) rather than Vcl.Controls.TControl (framework-specific). For more information, see the ClassGroup pseudo-property of TDataModule.

The ClassGroup pseudo-property is used only by the IDE and indicates the data module’s relationship with a particular component framework, if any. Then the IDE enforces the kinds of components that you can drop on the data module.

Источник

Datamodule delphi что это

Для создания модуля данных можно воспользоваться Репозиторием объектов или главным меню Delphi. Значок модуля данных Data Module расположен на странице New.

Для создания структуры (модели, диаграммы) данных, с которой работает приложение, можно воспользоваться возможностями, предоставляемыми страницей Diagram Редактора кода. Любой элемент из иерархического дерева компонентов модуля данных можно перенести на страницу диаграммы и задать связи между ними.

При помощи управляющих кнопок можно задавать между элементами диаграммы отношения синхронного просмотра и главный/подчиненный. При этом производится автоматическая настройка свойств соответствующих компонентов.

Для создания модуля данных (рис. 11.2) можно воспользоваться Репозиторием объектов или главным меню Delphi. Значок модуля данных Data Module расположен на странице New.

Для обращения компонентов доступа к данным, расположенным в модуле данных, из других модулей проекта необходимо включить имя модуля в секцию uses :

Рис. 11.2. Модуль данных

Преимуществом размещения компонентов доступа к данным в модуле данных является то, что изменение значения любого свойства проявится сразу же во всех обычных модулях, к которым подключен этот модуль данных. Кроме этого, все обработчики событий этих компонентов, т. е. вся логика работы с данными приложения, собраны в одном месте, что тоже весьма удобно.

Источник

Я выгрузил весь капюшон ADO в отдельный модуль данных, поэтому на один модуль могут ссылаться несколько приложений. Всем моим приложениям для доступа к данным в основном нужны только два метода worker :

Вот структура класса:

Затем я добавил к методам класса две публично открытые оболочки. Я использовал это, чтобы избежать длинных ссылок на классы в вызовах:

3 ответа

Я бы справился с такими вещами одним из двух способов: с помощью интерфейсов или с помощью наследования. В таких случаях я предпочитаю не открывать классы внешнему миру. Вторую можно было бы назвать интерфейсом без интерфейсов 🙂

Читайте также:  какой консистенции должен быть обойный клей для бумажных обоев

Эта версия возвращает интерфейс, который включает необходимые методы. Внешнему миру нужно только использовать интерфейс. Мы храним детали реализации в секрете. Наш TMyDBClass реализует интерфейс, который мы предоставили внешнему миру, а наша глобальная функция GetDBInterface возвращает единственный экземпляр.

В этой версии используется базовый класс с необходимыми методами. Людям с этим немного легче иметь дело, потому что он исключает интерфейс, который может быть сложным для начинающих. Снова мы скрываем детали реализации от пользователя и открываем только оболочку класса, которая включает два метода, к которым мы хотим, чтобы люди могли получить доступ. Реализация этих методов выполняется классом в реализации, который наследуется от открытого класса. У нас также есть глобальная функция, которая возвращает экземпляр этого класса. Большим преимуществом интерфейсного подхода над этим подходом является то, что пользователь этого объекта не может случайно освободить объект.

Использование

Использовать их очень просто.

Если вас может заинтересовать альтернатива без модулей DataModules вообще, взгляните на это: https://github.com/stijnsanders /xxm/blob/master/Delphi/demo2/03%20Data%20ADO/xxmData.pas

Что касается интерпретации «стойкости», вы можете создать / уничтожить его экземпляр разными способами. Например, вы можете использовать разделы initialization и finalization модуля (требующие CoInitialize ), или вы можете настроить свою главную форму для инициализации глобального экземпляра при создании.

При первом вызове MyData из любого места будет создан новый глобальный экземпляр. Затем каждый раз он повторно использует тот же экземпляр. Это также решает необходимость в ActiveX и CoInitialize и т. Д., Потому что на этом этапе ожидается, что COM уже создан (что требуется для ADO).

Примечания

Источник

Datamodule delphi что это

Для удобства, можно не использовать. Но обычно для средних и больших приложений удобно разделять код связанный с визуальными компонентами (его оставлять в модулях формы) и код с невизуальными компонентами.

Я обычно пользуюсь следующими правилами (это не обязательно, но моя схема довольно удобна)

Для удобства, можно не использовать. Но обычно для средних и больших приложений удобно разделять код связанный с визуальными компонентами (его оставлять в модулях формы) и код с невизуальными компонентами.

Я обычно пользуюсь следующими правилами (это не обязательно, но моя схема довольно удобна)

Источник

Сказочный портал