.
Пишем утилиту управления метаданными. Урок 1. Создание таблицы и описание базовых классов.
Автор megabax   
22.11.2010 г.
New Page 1

Пишем утилиту управления метаданными. Урок 1. Создание таблицы и описание базовых классов.

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


Исходники к уроку можно скачать в платном разделе.

Вы когда нибудь сравнивали 1С и Delphi? Казалось бы, что сравнивать? 1С предназначена для создания бухгалтерских решений, на ней можно очень быстро написать практически любую программу для работы с базами данных. Действительно, что бы в 1С создать СУБД, достаточно описать структуру метаданных: справочники, документы, регистры. И все, уже можно вводить данные. Связи реализуется очень легко - просто назначим полю тип ссылка на другой справочник или документ. А в Delphi? Вот простой пример: есть справочник складов. У него есть поле "тип склада". Это тоже справочник. Что бы все это реализовать в Delphi надо создать две таблицы, организовать между ними связь и прочий геморой. Но, с другой стороны, написали вы на 1С конфигурацию.  Стали ее продавать. Но, что бы использовать легально вашу конфигурацию, клиент еще должен иметь легальную 1С. А если у него нету 1С, то он должен его купить. А ему это надо? Вот так и получается, что круг возможных потребителей вашего продукта резко сужается. Какой выход? Писать на Delphi! Во первых, есть бесплатная версия этой среды разработки Turbo Delphi. В нее входит BDE (средство для работы с базами данных), она так же распространяется бесплатно. Таким образом, вы создаете дистрибутив, включаете туда DBE, и легально продаете, не боясь нарушить чьи либо авторские права. Но! Надо еще написать. А написать на Delphi хорошую СУБД не так то просто, как в 1С. Хорошо бы иметь какой то инструмент управления метаданными, типа как конфигуратор в 1С. Вот мы и займемся его созданием. Называться наша библиотека будет MDE (Metadata Engine). 

И так, начнем. объявим базовый класс, от которого, как говориться, будем "танцевать"...

...

... В данном тексте мы используем процедуры и функции, которых нет в Delphi. Давайте их тоже реализуем:

procedure SerializeString(AString:string; AStream:TStream);

var l:integer;

begin

  l:=Length(AString);

  AStream.Write(l,Sizeof(l));

  if l>0 then AStream.WriteBuffer(AString[1],l);

end;

 

function UnserializeString(AStream:TStream):string;

var l:integer;   s:string;

begin

  AStream.Read(l,Sizeof(l));

  if l>0 then

  begin

     SetLength(s,L);

     AStream.ReadBuffer(s[1],L);

  end;

  Result:=s;

end;

Они служат для сериализации строк в поток и чтение из потока. Штатными средствами Delphi это сделать невозможно. Почему? Ответ на этот вопрос выходит за рамки урока, поэтому, кому интересно, см. сюда.  

Еще мы объявим  класс поддержки полей:

      TMDEField=class(TMDEBaseClass)

      protected

         FName:string;

         FCaption:string;

         FDataType:TFieldType;

         FSize:integer;

         FPrecision:integer;

      public

         procedure Serialize(AStream:TStream); override;

         procedure Unserialize(AStream:TStream); override;

         procedure FillFieldDef(AFieldDef:TFieldDef);

         property Name:string read FName write FName;

         property Caption:string read FCaption write FCaption;

         property DataType:TFieldType read FDataType write FDataType;

         property Size:integer read FSize write FSize;

         property Precision:integer read FPrecision write FPrecision;

      end;

...

.... Теперь переходим к тестированию. Кинем на форму компоненты TTable, TDataSource и TDBGrid. Соединим их между собой. Если не знаете как, см. сюда. Теперь добавим еще две кнопочки. Вот что у вас должно получится в итоге:

Пишем утилиту управления метаданными. Урок 1. Создание таблицы и описание базовых классов.

Реализуем обработчики событий нажатия на эти кнопки (если не знаете, что такое обработчик события, см. сюда и сюда)...

...

..., мы успешно создали первый нужный нам класс. Остальные классы создадим на будущих уроках.

(C) Шуравин Александр 


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями  в соответствии со ст. 1274 ГК РФ программного продукта "Turbo Delphi", авторское право на который принадлежит "Borland Software Corporation


 

Последнее обновление ( 06.11.2011 г. )