MyBooks.club
Все категории

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

На сайте mybooks.club вы можете бесплатно читать книги онлайн без регистрации, включая Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001. Жанр: Программирование издательство неизвестно,. Доступна полная версия книги с кратким содержанием для предварительного ознакомления, аннотацией (предисловием), рецензиями от других читателей и их экспертным мнением.
Кроме того, на сайте mybooks.club вы найдете множество новинок, которые стоит прочитать.

Название:
Советы по Delphi. Версия 1.4.3 от 1.1.2001
Издательство:
неизвестно
ISBN:
нет данных
Год:
неизвестен
Дата добавления:
17 сентябрь 2019
Количество просмотров:
205
Читать онлайн
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

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

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки mybooks.club
…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 читать онлайн бесплатно

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

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

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

   TaxAmount := TFloatField.Create(MyTable);

   with TaxAmount 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);

 with MyGrid do

 begin

  Parent := Self;

  Align := alClient;

  DataSource := MyDataSource;

 end;

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

 MyTable.Active := True;

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

end;

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

unit gridcalc;


interface


uses

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


type

 TForm1 = class(TForm)

  procedure FormCreate(Sender: TObject);

  procedure TaxAmountCalc(DataSet: TDataset);

 private

TaxAmount: TFloatField;

 end;


var

 Form1: TForm1;


implementation


{$R *.DFM}


procedure TForm1.TaxAmountCalc(DataSet: TDataset);

begin

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

end;


procedure TForm1.FormCreate(Sender: TObject);

var

 MyTable: TTable;

 MyDataSource: TDataSource;

 MyGrid: TDBGrid;

begin

 MyTable := TTable.Create(Self);

 with MyTable do

 begin

  DatabaseName := 'DBDemos';

  TableName := 'Test.DB';

  OnCalcFields := TaxAmountCalc;

  with FieldDefs 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%';

   TaxAmount := TFloatField.Create(MyTable);

   with TaxAmount do

   begin

    FieldName := 'TaxAmount';

    Calculated := True;

    Currency := True;

    DataSet := MyTable;

    Name := MyTable.Name + FieldName;

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

   end;

  end;

  MyTable.CreateTable;

 end;

 MyDataSource := TDataSource.Create(Self);

 MyDataSource.DataSet := MyTable;

 MyGrid := TDBGrid.Create(Self);

 with MyGrid do

 begin

Parent := Self;

  Align := alClient;

  DataSource := MyDataSource;

 end;

 MyTable.Active := True;

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

end;


end

Проблема с AddIndex

Delphi 1 

Я использую таблицу paradox на своей локальной машине.

Я использую следующие команды: 

Table.DatabaseName := 'ABC';

Table.TableName := 'TEST';

Table.CreateTable;

Table.AddIndex('Primary','ID',[ixPrimary]); (работает как часы)

Table.AddIndex('Number_IDX','NUMBER',[ixUnique]); (здесь я получаю ошибку времени выполнения)

ID – LongInt поле

NUMBER – поле типа char[15] 

Как создать БД в кодировке CP1251?

Nomadic отвечает:

Вот такая конструкция проходит на DB2 2.1.2/NT и UDB5/NT…

CREATE DATABASE Efes2

USING CODESET 1251 TERRITORY RU

COLLATE USING IDENTITY; 

Таблицы в памяти

Delphi 1 

Вот пример InMemoryTable. Свободен для использования, модификации и всего остального. Ну и как в отношении других вещей: я не даю никаких гарантий. Я не несу никакой ответственности за ущерб, который может причинить код. Позвольте, я повторю это:

ВНИМАНИЕ! ДАННЫЙ КОД НЕ ПРЕДУСМАТРИВАЕТ НИКАКИХ ГАРАНТИЙ!

ИСПОЛЬЗУЙТЕ ЕГО НА СВОЙ СТРАХ И РИСК - ВЫ ЕДИНСТВЕННЫЙ ЧЕЛОВЕК, ОТВЕТСТВЕННЫЙ ЗА ЛЮБОЙ УЩЕРБ, КОТОРЫЙ МОЖЕТ ПОВЛЕЧЬ ЗА СОБОЙ ИСПОЛЬЗОВАНИЕ ДАННОГО КОДА — Я ВАС ПРЕДУПРЕДИЛ!

Благодарю Steve Garland < [email protected]> за предоставленную помощь. Он создал свой собственный "in-memory" табличный компонент, который послужил мне толчком для написания сего кода.

InMemory-таблицы являются характеристикой Borland Database Engine (BDE). InMemory-таблицы создаются в RAM и удаляются при их закрытии. Работают они значительно быстрее и очень полезны в случае, если вам нужны быстрые операции в небольших таблицах. Данный пример использует вызов функции BDE DbiCreateInMemoryTable. Данный объект должен работать наподобии простой регулярной таблицы, за исключением того, что InMemory-таблицы не поддерживают некоторые характеристики (типа проверка целостности, вторичные индексы и BLOB-поля), и в настоящее время данный код не содержит механизма обработки ошибок. Вероятно, вы получите ошибку при попытке создания memo-поля. Если у вас есть любые замечания, шлите их по адресу [email protected]

unit Inmem;


interface


uses DBTables, WinTypes, WinProcs, DBITypes, DBIProcs, DB, SysUtils;


type TInMemoryTable = class(TTable)

private

hCursor: hDBICur;

 procedure EncodeFieldDesc(var FieldDesc: FLDDesc; const Name: string; DataType: TFieldType; Size: Word);

 function CreateHandle: HDBICur; override;

public

 procedure CreateTable;

end;


implementation


{ Эта функция виртуальная, так что я смог перекрыть ее. В оригинальном VCL-коде для TTable эта функция реально открывает таблицу, но, поскольку мы уже имеем дескриптор таблицы, то мы просто возвращаем его }


function TInMemoryTable.CreateHandle;

begin

 Result := hCursor;

end;


{ Эта функция получена ее простым копированием из исходного кода VCL. Я должен был это сделать, поскольку это было объявлено в секции private компонента TTable, поэтому отсюда у меня не было к этому досупа. }

procedure TInMemoryTable.EncodeFieldDesc(var FieldDesc: FLDDesc; const Name: string; DataType: TFieldType; Size: Word);

const

 TypeMap: array[TFieldType] of Byte = (fldUNKNOWN, fldZSTRING, fldINT16, fldINT32, fldUINT16, fldBOOL,fldFLOAT, fldFLOAT, fldBCD, fldDATE, fldTIME, fldTIMESTAMP, fldBYTES,fldVARBYTES, fldBLOB, fldBLOB, fldBLOB);

begin

 with FieldDesc do

 begin

AnsiToNative(Locale, Name, szName, SizeOf(szName) - 1);

  iFldType := TypeMap[DataType];

  case DataType of

ftString, ftBytes, ftVarBytes, ftBlob, ftMemo, ftGraphic:

   iUnits1 := Size;

  ftBCD:

   begin

iUnits1 := 32;

    iUnits2 := Size;

   end;

  end;

  case DataType of

ftCurrency: iSubType := fldstMONEY;

  ftBlob: iSubType := fldstBINARY;

  ftMemo: iSubType := fldstMEMO;

  ftGraphic: iSubType := fldstGRAPHIC;

  end;

 end;

end;


{ Вот кухня, где все это происходит. Я скопировал эту функцию из исходников VCL и затем изменил ее для использования DbiCreateInMemoryTable вместо DbiCreateTable. Поскольку InMemory-таблицы не поддерживают индексы, я удалил весь соответствующий код. }

procedure TInMemoryTable.CreateTable;

var

 I: Integer;

 pFieldDesc: pFLDDesc;

 szTblName: DBITBLNAME;

 iFields: Word;

 Dogs: pfldDesc;

begin

 CheckInactive;

 if FieldDefs.Count = 0 then for I := 0 to FieldCount - 1 do with Fields[I] do if not Calculated then FieldDefs.Add(FieldName, DataType, Size, Required);

 pFieldDesc := nil;

 SetDBFlag(dbfTable, True);

 try

  AnsiToNative(Locale, TableName, szTblName, SizeOf(szTblName) - 1);

  iFields := FieldDefs.Count;

  pFieldDesc := AllocMem(iFields * SizeOf(FLDDesc));

  for I := 0 to FieldDefs.Count - 1 do with FieldDefs[I] do


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

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


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

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

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.