Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

ifSource.IndexDefs.Count > 0 then…

Вам нужно будет это сделать, поскольку метод TIndexDefs.Assign не проверяет это перед копированием индекс-информации. Также вам нет необходимости вызывать Clear до работы с IndexDefs, поскольку метод Assign сделает это и без вашего участия.

Создание уникального ID для новой записи

Delphi 1

Существует несколько способов задавать в таблице уникальный ID.

1. Вы можете использовать поле с автоприращением

Этот метод не очень надежен. Если ваша таблица каким-то образом испортится, и вам понадобиться ее пересобрать, автоинкрементальные поля будут перенумерованы. Хотя это легкий способ для ситуации, когда вы не ссылаетесь на id таблицы в других таблицах, но это не очень мудрое решение в других случаях.

2. Вы можете использовать ID-таблицу

Если у вас имеется приложение, где нескольким таблицам необходимы уникальные ID, создайте ID-таблицу с двумя полями:

Table Name A (первичный ключ) Last Id NВ методе BeforePost таблицы, которой необходим уникальный ID, делайте примерно так:

TableBeforePost(Sender: TObject)

varId: Integer;

begin

withTTable(Sender) do

begin

{проверяем, существует ли ID для этой записи}

ifField[0].AsInteger=0 then

begin

{ищем имя таблицы в ID-Таблице}

IDTable.FindKey[Name]

{извлекаем последний Id – подразумеваем блокировку записи}

Id := IDTable.FieldByName['Last Id'].AsInteger;

Inc(Id);

{записываем новый Id в ID-таблицу – подразумеваем разблокировку таблицы}

IDTable.FieldByName['Last Id'].AsInteger := Id;

IDTable.Post;

{записываем извлеченный ID в вашу таблицу}

Field[0].AsInteger := Id;

end;

end;

end;

end;

Если вы поместите этот код в обработчик события таблицы BeforePost, вы убедитесь в том, что все ID будут последовательными (без «дырок»). Недостаток: если пользовать во время попытки добавления новой записи вдруг передумает, вы будете иметь запись с заполненным только полем ID.

В случае, если вы решили воспользоваться данным способом (последовательные ID), поместите приведенный выше код в обработчик события таблицы OnNewRecord.

3. Вы можете использовать ID-файл

Используйте те же принципы, что и в предыдущем способе, но вместо ID-таблицы используется ID-Файл. Это дает преимущество за счет более высокой скорости работы, но в многопользовательской среде вы должны сами заботиться о блокировке записей.

Динамическое создание таблицы и полей во время выполнения программы

Delphi в режиме разработки позволяет быстро добавлять и настраивать в вашем проекте компоненты для работы с базами данных, но есть ситуации, когда вам нужно создавать и конфигурировать объекты во время выполнения программы. Например, во время выполнения программы вам может понадобиться добавить колонку с вычисляемым полем (используя алгоритмы пользователя). Поэтому вопрос: как, не используя среды разработки, Инспектора Объектов и редактора TFields, создавать и сконфигурировать TField и другие компоненты для связки данных?

В следующем примере показано динамическое создание TTable, таблицы базы данных в связке с TTable, TFieldDefs, TFields, вычисляемых полей и подключение обработчика для события OnCalc.

Для начала выберите пункт New Application меню File. Будет создан новый проект с пустой формой, на которой мы и будет создавать на лету наши компоненты.

В секцию interface вашего модуля формы добавьте, как показано ниже, объявление обработчика события OnCalcFields и поля TaxAmount. Позже мы создадим TTable и назначим этот обработчик событию TTable OnCalcFields, который позволит при чтении каждой записи вызывать событие OnCalcFields, которое, в свою очередь, выполнит нашу процедуру TaxAmountCalc.

typeTForm1 = class(TForm)

procedureTaxAmountCalc(DataSet: TDataset);

private

TaxAmount: TFloatField;

end;

В секции implementation создайте обработчик события OnCalc как показано ниже:

procedureTForm1.TaxAmountCalc(DataSet: TDataset);

begin

Dataset['TaxAmount'] := Dataset['ItemsTotal'] * (Dataset['TaxRate'] / 100);

end;

Создайте обработчик формы OnCreate как показано ниже (для получения дополнительной информации о создании обработчиков событий обратитесь к Delphi Users Guide, Chapter 4 «Working With Code»).

procedureTForm1.FormCreate(Sender: TObject);

var

MyTable: TTable;

MyDataSource: TDataSource;

MyGrid: TDBGrid;

begin

{ Создаем компонент TTable -- связанная таблица базы данных будет создана ниже. }

MyTable := TTable.Create(Self);

withMyTable do

begin

{ Определяем основную базу данных и таблицу. Примечание: Test.DB пока не существует. }

DatabaseName := 'DBDemos';

TableName := 'Test.DB';

{ Назначаем TaxAmountCalc обработчиком события, чтобы использовать его при наступлении события OnCalcFields в MyTable. }

OnCalcFields := TaxAmountCalc;

{ Создаем и добавляем определения полей к массиву TTableFieldDefs, затем создаем TField с использованием информации из определения поля. }

withFieldDefs do

begin

Add('ItemsTotal', ftCurrency, 0, false);

FieldDefs[0].CreateField(MyTable);

Add('TaxRate', ftFloat, 0, false);

FieldDefs[1].CreateField(MyTable);

TFloatField(Fields[1]).DisplayFormat := '##.0%';

{ Создаем вычисляемое TField, назначаем свойства, и добавляем поле к массиву определений MyTable. }

TaxAmount := TFloatField.Create(MyTable);

withTaxAmount do

begin

FieldName := 'TaxAmount';

Calculated := True;

Currency := True;

DataSet := MyTable;

Name := MyTable.Name + FieldName;

MyTable.FieldDefs.Add(Name, ftFloat, 0, false);

end;

end;

{ Создаем в базе данных новую таблицу, используя в качестве основы MyTable. }

MyTable.CreateTable;

end;

{ Создаем компонент TDataSourceи назначаем его MyTable. }

MyDataSource := TDataSource.Create(Self);

MyDataSource.DataSet := MyTable;

{ Создаем табличную сетку, отображаемна форме, и назначаем MyDataSource дляполучения доступа к данным из MyTable. }

MyGrid := TDBGrid.Create(Self);

withMyGrid do

begin

Parent := Self;

Align := alClient;

DataSource := MyDataSource;

end;

{ Запускаем нашу конструкцию! }

MyTable.Active := True;

Caption := 'Новая таблица ' + MyTable.TableName;

end;

Ниже приведен полный исходный код проекта:

unitgridcalc;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,Forms, Dialogs, Grids, DBGrids, ExtCtrls, DBCtrls, DB,DBTables, StdCtrls;

type

TForm1 = class(TForm)

procedureFormCreate(Sender: TObject);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x