Changeset 13 for trunk


Ignore:
Timestamp:
Jun 10, 2011, 8:23:37 AM (14 years ago)
Author:
george
Message:
  • Added: Type separated to base types and custom type instances. Every type which have parameters should have own SQL table. Types which have structured values should have tables for values too.
Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/UMainForm.lfm

    r11 r13  
    115115      Category = 'Item'
    116116      Caption = 'Delete'
     117      OnExecute = AItemDeleteExecute
    117118    end
    118119    object AItemAdd: TAction
  • trunk/Forms/UMainForm.pas

    r12 r13  
    6868    procedure AInitSystemValuesExecute(Sender: TObject);
    6969    procedure AItemAddExecute(Sender: TObject);
     70    procedure AItemDeleteExecute(Sender: TObject);
    7071    procedure AItemEditExecute(Sender: TObject);
    7172    procedure AItemViewExecute(Sender: TObject);
     
    116117  SObjectNotFound = 'Object not found';
    117118  SGroup = 'Groups';
     119  SItemDeletion = 'Delete items';
     120  SReallyWantToDelete = 'Really want to delete selected items?';
    118121
    119122
     
    171174  Data: TDictionaryStringString;
    172175  ObjectId: Integer;
     176  Tables: TListString;
     177  I: Integer;
    173178begin
    174179  with System do
    175180  try
    176181    DbRows := TDbRows.Create;
     182    Tables := TListString.Create;
    177183    Data := TDictionaryStringString.Create;
    178184
    179     Database.Query(DbRows, 'SHOW TABLES LIKE "' + InformationTable + '"');
    180     if DbRows.Count = 0 then begin
     185    Database.Query(DbRows, 'SHOW TABLES');
     186    Tables.Count := DbRows.Count;
     187    for I := 0 to DbRows.Count - 1 do
     188      Tables[I] := DbRows[I].Items[0].Value;
     189
     190    if Tables.IndexOf(InformationTable) = -1 then begin
    181191      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + InformationTable + '` ( ' +
    182192  '`Version` varchar(255) NOT NULL,' +
     
    189199    StructureVersion := DbRows[0].Values['Version'];
    190200
    191     Database.Query(DbRows, 'SHOW TABLES LIKE "' + ObjectTable + '"');
    192     if DbRows.Count = 0 then begin
     201    if Tables.IndexOf(ObjectTable) = -1 then begin
    193202      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + ObjectTable + '` ( ' +
    194203        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     
    197206        '`Table` varchar(255) NOT NULL,' +
    198207        '`PrimaryKey` varchar(255) NOT NULL DEFAULT "Id", ' +
    199         '`Sequence` int(11) NOT NULL,' +
     208        '`Sequence` int(11) NOT NULL DEFAULT 0,' +
    200209        '`Group` int(11) NOT NULL,' +
    201         'PRIMARY KEY (`Id`),' +
    202         'KEY `Group` (`Group`)' +
     210        'KEY `Group` (`Group`),' +
     211        'PRIMARY KEY (`Id`)' +
    203212      ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
    204213
    205214    end;
    206215
    207     Database.Query(DbRows, 'SHOW TABLES LIKE "' + ObjectGroupTable + '"');
    208     if DbRows.Count = 0 then begin
     216    if Tables.IndexOf(ObjectGroupTable) = -1 then begin
    209217      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + ObjectGroupTable + '` ( ' +
    210218        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
    211219        '`Name` varchar(255) NOT NULL,' +
    212         '`Parent` int(11) NOT NULL,' +
    213         '`Sequence` int(11) NOT NULL,' +
     220        '`Parent` int(11) NOT NULL DEFAULT 0,' +
     221        '`Sequence` int(11) NOT NULL DEFAULT 0,' +
     222        'KEY `Parent` (`Parent`),' +
    214223        'PRIMARY KEY (`Id`)' +
    215224      ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
    216225    end;
    217226
    218     Database.Query(DbRows, 'SHOW TABLES LIKE "' + PropertyTable + '"');
    219     if DbRows.Count = 0 then begin
     227    if Tables.IndexOf(PropertyTable) = -1 then begin
    220228      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + PropertyTable + '` ( ' +
    221229        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
    222230      '`Name` varchar(255) NOT NULL,' +
    223231      '`Object` int(11) NOT NULL,' +
    224       '`PropertyGroup` int(11) NOT NULL,' +
    225       '`Type` int(11) NOT NULL,' +
     232      '`PropertyGroup` int(11) NOT NULL DEFAULT 0,' +
     233      '`CustomType` int(11) NOT NULL,' +
     234      '`Editable` bool NOT NULL DEFAULT 1,' +
    226235      '`ColumnName` varchar(255) NOT NULL,' +
    227236      'KEY `Object` (`Object`),' +
    228237      'KEY `PropertyGroup` (`PropertyGroup`),' +
    229       'KEY `Type` (`Type`),' +
     238      'KEY `CustomType` (`CustomType`),' +
    230239      'PRIMARY KEY (`Id`)' +
    231240      ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
    232241    end;
    233     Database.Query(DbRows, 'SHOW TABLES LIKE "' + PropertyTypeTable + '"');
    234     if DbRows.Count = 0 then begin
     242    if Tables.IndexOf(PropertyTypeTable) = -1 then begin
    235243      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + PropertyTypeTable + '` ( ' +
    236244        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     
    238246      '`DbType` varchar(255) NOT NULL,' +
    239247      '`TypeIndex` int(11) NOT NULL,' +
    240       '`Parent` int(11) NOT NULL,' +
    241       '`ParameterTable` varchar(255) NOT NULL,' +
    242248      'PRIMARY KEY (`Id`)' +
    243249      ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
    244250    end;
    245     Database.Query(DbRows, 'SHOW TABLES LIKE "' + PropertyGroupTable + '"');
    246     if DbRows.Count = 0 then begin
     251
     252    if Tables.IndexOf(PropertyGroupTable) = -1 then begin
    247253      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + PropertyGroupTable + '` ( ' +
    248254        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     
    254260    end;
    255261
     262    if Tables.IndexOf(EnumerationState) = -1 then begin
     263      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + EnumerationState + '` ( ' +
     264        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     265        '`Enumeration` int(11) NOT NULL,' +
     266        '`Name` varchar(255) NOT NULL,' +
     267        '`Sequence` int(11) NOT NULL DEFAULT 0,' +
     268        'KEY `Enumeration` (`Enumeration`),' +
     269        'PRIMARY KEY (`Id`)' +
     270        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     271    end;
     272
     273    if Tables.IndexOf(Enumeration) = -1 then begin
     274      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + Enumeration + '` ( ' +
     275        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     276        '`Name` varchar(255) NOT NULL,' +
     277        'PRIMARY KEY (`Id`)' +
     278        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     279    end;
     280
     281    if Tables.IndexOf(TypeEnumeration) = -1 then begin
     282      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + TypeEnumeration + '` ( ' +
     283        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     284        '`Enumeration` int(11) NOT NULL,' +
     285        'KEY `Enumeration` (`Enumeration`),' +
     286        'PRIMARY KEY (`Id`)' +
     287        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     288    end;
     289
     290    if Tables.IndexOf(TypeRelationOne) = -1 then begin
     291      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + TypeRelationOne + '` ( ' +
     292        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     293        '`Type` int(11) NOT NULL,' +
     294        '`Object` int(11) NOT NULL,' +
     295        'KEY `Type` (`Type`),' +
     296        'PRIMARY KEY (`Id`)' +
     297        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     298    end;
     299
     300    if Tables.IndexOf(TypeRelationMany) = -1 then begin
     301      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + TypeRelationMany + '` ( ' +
     302        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     303        '`Type` int(11) NOT NULL,' +
     304        '`ObjectProperty` int(11) NOT NULL,' +
     305        'KEY `Type` (`Type`),' +
     306        'PRIMARY KEY (`Id`)' +
     307        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     308    end;
     309
     310    if Tables.IndexOf(TypeFile) = -1 then begin
     311      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + TypeFile + '` ( ' +
     312        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     313        '`Name` varchar(255) NOT NULL,' +
     314        '`Size` int(11) NOT NULL,' +
     315        'PRIMARY KEY (`Id`)' +
     316        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     317    end;
     318
     319    if Tables.IndexOf(TypeGPS) = -1 then begin
     320      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + TypeGPS + '` ( ' +
     321        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     322        '`Latitude` double NOT NULL,' +
     323        '`Longitude` double NOT NULL,' +
     324        'PRIMARY KEY (`Id`)' +
     325        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     326    end;
     327
     328    if Tables.IndexOf(CustomType) = -1 then begin
     329      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + CustomType + '` ( ' +
     330        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     331        '`Type` int NOT NULL,' +
     332        'KEY `Type` (`Type`),' +
     333        'PRIMARY KEY (`Id`)' +
     334        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     335    end;
     336
     337    if Tables.IndexOf(TypeNumber) = -1 then begin
     338      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + TypeNumber + '` ( ' +
     339        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     340        '`CustomType` int NOT NULL,' +
     341        '`Default` int NOT NULL,' +
     342        '`Min` int NOT NULL,' +
     343        '`Max` int NOT NULL,' +
     344        'KEY `CustomType` (`CustomType`),' +
     345        'PRIMARY KEY (`Id`)' +
     346        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     347    end;
     348
     349    if Tables.IndexOf(TypeString) = -1 then begin
     350      Database.Query(DbRows, 'CREATE TABLE IF NOT EXISTS `' + TypeString + '` ( ' +
     351        '`Id` int(11) NOT NULL AUTO_INCREMENT,' +
     352        '`CustomType` int NOT NULL,' +
     353        '`Default` VARCHAR(255) NOT NULL,' +
     354        '`MaxLength` int NOT NULL,' +
     355        'KEY `CustomType` (`CustomType`),' +
     356        'PRIMARY KEY (`Id`)' +
     357        ') ENGINE=InnoDB  DEFAULT CHARSET=utf8');
     358    end;
    256359  finally
     360    Tables.Free;
    257361    Data.Free;
    258362    DbRows.Free;
     
    265369  TypeNumber: Integer;
    266370  TypeString: Integer;
     371  TypeBoolean: Integer;
    267372  GroupId: Integer;
     373  EnumId: Integer;
    268374begin
    269375  with System do begin
    270376  TypeNumber := AddType('Number', 'INT', vtInteger);
    271   TypeString := AddType('String', 'VAR(255)', vtString);
     377  TypeString := AddType('String', 'VARCHAR(255)', vtString);
    272378  AddType('Text', 'TEXT', vtText);
    273379  AddType('Date and time', 'DATETIME', vtDateTime);
    274380  AddType('Floating number', 'FLOAT', vtFloat);
    275381  AddType('Image', 'BLOB', vtImage);
    276   AddType('Boolean', 'BOOL', vtBoolean);
     382  TypeBoolean := AddType('Boolean', 'BOOL', vtBoolean);
    277383  AddType('IPv4', 'BINARY(4)', vtIPv4);
    278384  AddType('IPv6', 'BINARY(16)', vtIPv6);
    279385  AddType('MAC address', 'BINARY(6)', vtMAC);
    280   AddType('File', '', vtFile);
    281   AddType('GPS', '', vtGPS);
     386  AddType('File', 'INT', vtFile);
     387  AddType('GPS', 'INT', vtGPS);
    282388  AddType('Currency', 'FLOAT', vtCurrency);
    283   AddType('Enumeration', '', vtEnumeration);
     389  AddType('Enumeration', 'INT', vtEnumeration);
    284390  AddType('Time', 'TIME', vtTime);
    285391  AddType('Date', 'DATE', vtDate);
    286392  AddType('Color', 'INT', vtColor);
     393  AddType('Hyperlink', 'VARCHAR(255)', vtHyperlink);
     394  AddType('RelationOne', 'INT', vtRelationOne);
     395  AddType('RelationMany', 'INT', vtRelationMany);
     396  AddType('Password', 'VARCHAR(255)', vtPassword);
     397
     398  EnumId := AddEnumeration('Boolean');
     399  AddEnumerationState(EnumId, 'False');
     400  AddEnumerationState(EnumId, 'True');
     401
     402  EnumId := AddEnumeration('Priority');
     403  AddEnumerationState(EnumId, 'Low');
     404  AddEnumerationState(EnumId, 'Normal');
     405  AddEnumerationState(EnumId, 'High');
    287406
    288407  GroupId := AddObjectGroup('System');
    289408
    290409  ObjectId := AddObject('Object groups', 'ObjectGroup', System.Database.Database, GroupId);
    291     AddProperty(ObjectId, 'Name', 'Name', TypeString);
     410    AddPropertyString(ObjectId, 'Name', 'Name');
    292411  ObjectId := AddObject('Objects', 'Object', System.Database.Database, GroupId);
    293     AddProperty(ObjectId, 'Name', 'Name', TypeString);
    294     AddProperty(ObjectId, 'Group', 'Group', TypeNumber);
    295     AddProperty(ObjectId, 'Schema', 'Schema', TypeString);
    296     AddProperty(ObjectId, 'Table', 'Table', TypeString);
    297     AddProperty(ObjectId, 'Primary key', 'PrimaryKey', TypeString);
    298     AddProperty(ObjectId, 'Sequence', 'Sequence', TypeNumber);
     412    AddPropertyString(ObjectId, 'Name', 'Name');
     413    AddPropertyNumber(ObjectId, 'Group', 'Group');
     414    AddPropertyString(ObjectId, 'Schema', 'Schema');
     415    AddPropertyString(ObjectId, 'Table', 'Table');
     416    AddPropertyString(ObjectId, 'Primary key', 'PrimaryKey');
     417    AddPropertyNumber(ObjectId, 'Sequence', 'Sequence');
    299418  ObjectId := AddObject('Property types', 'Type', System.Database.Database, GroupId);
    300     AddProperty(ObjectId, 'Name', 'Name', TypeString);
    301     AddProperty(ObjectId, 'Type', 'DbType', TypeString);
    302     AddProperty(ObjectId, 'Type index', 'TypeIndex', TypeNumber);
    303     AddProperty(ObjectId, 'Parent', 'Parent', TypeNumber);
     419    AddPropertyString(ObjectId, 'Name', 'Name');
     420    AddPropertyString(ObjectId, 'Type', 'DbType');
     421    AddPropertyNumber(ObjectId, 'Type index', 'TypeIndex');
     422    AddPropertyNumber(ObjectId, 'Parent', 'Parent');
    304423  ObjectId := AddObject('Property groups', 'PropertyGroup', System.Database.Database, GroupId);
    305424  ObjectId := AddObject('Properties', 'Property', System.Database.Database, GroupId);
    306     AddProperty(ObjectId, 'Name', 'Name', TypeString);
    307     AddProperty(ObjectId, 'Object', 'Object', TypeNumber);
    308     AddProperty(ObjectId, 'PropertyGroup', 'PropertyGroup', TypeNumber);
    309     AddProperty(ObjectId, 'Type', 'Type', TypeNumber);
    310     AddProperty(ObjectId, 'ColumnName', 'ColumnName', TypeString);
     425    AddPropertyString(ObjectId, 'Name', 'Name');
     426    AddPropertyNumber(ObjectId, 'Object', 'Object');
     427    AddPropertyNumber(ObjectId, 'PropertyGroup', 'PropertyGroup');
     428    AddPropertyNumber(ObjectId, 'Type', 'Type');
     429    AddProperty(ObjectId, 'Editable', 'Editable', TypeBoolean);
     430    AddPropertyString(ObjectId, 'ColumnName', 'ColumnName');
    311431  end;
    312432end;
     
    412532end;
    413533
    414 procedure TMainForm.AItemAddExecute(Sender: TObject);
    415 begin
    416   ItemAddForm.Show;
    417 end;
    418 
    419534procedure TMainForm.AExitExecute(Sender: TObject);
    420535begin
     
    426541  InitSystemValues;
    427542  LoadTree;
     543end;
     544
     545procedure TMainForm.AItemAddExecute(Sender: TObject);
     546begin
     547  ItemAddForm.ShowModal;
     548end;
     549
     550procedure TMainForm.AItemDeleteExecute(Sender: TObject);
     551begin
     552  if MessageDlg(SItemDeletion, SReallyWantToDelete, mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
     553
     554  end;
    428555end;
    429556
  • trunk/USystem.pas

    r12 r13  
    1616  PropertyTypeTable = 'Type';
    1717  PropertyGroupTable = 'PropertyGroup';
     18  TypeEnumeration = 'TypeEnumeration';
     19  TypeFile = 'TypeFile';
     20  TypeGPS = 'TypeGPS';
     21  TypeRelationOne = 'TypeRelationOne';
     22  TypeRelationMany = 'TypeRelationMany';
     23  CustomType = 'TypeCustom';
     24  Enumeration = 'Enumeration';
     25  EnumerationState = 'EnumerationState';
     26  TypeNumber = 'TypeNumber';
     27  TypeString = 'TypeString';
    1828
    1929type
    20   TDbValueType = (vtNone, vtInteger, vtString, vtText, vtDateTime, vtFloat, vtImage, vtBoolean,
    21   vtIPv4, vtMAC, vtIPv6, vtFile, vtGPS, vtEnumeration, vtHyperlink, vtPassword,
    22   vtReference, vtDate, vtTime, vtColor, vtCurrency);
     30  TDbValueType = (vtNone, vtInteger, vtString, vtText, vtDateTime, vtFloat, vtImage,
     31  vtBoolean, vtIPv4, vtIPv6, vtMAC, vtFile, vtGPS, vtCurrency, vtEnumeration,
     32  vtTime, vtDate, vtColor, vtHyperlink, vtRelationOne, vtRelationMany, vtPassword);
    2333
    2434  TChronisType = class;
     
    90100    function AddObject(Name, TableName, Schema: string; GroupId: Integer): Integer;
    91101    function AddProperty(ObjectId: Integer; Name, ColumnName: string; DataType: Integer): Integer;
     102    function AddPropertyNumber(ObjectId: Integer; Name,
     103      ColumnName: string; Default: Integer = 0; Min: Integer = 0;
     104      Max: Integer = High(Integer)): Integer;
     105    function AddPropertyString(ObjectId: Integer; Name, ColumnName: string;
     106      Default: string = ''; MaxLength: Integer = 255): Integer;
    92107    function AddObjectGroup(Name: string): Integer;
     108    function AddEnumeration(Name: string): Integer;
     109    function AddEnumerationState(Enum: Integer; Name: string): Integer;
    93110    procedure LoadTypes;
    94111    constructor Create;
    95112    destructor Destroy; override;
     113  private
    96114  end;
    97115
     
    99117
    100118implementation
     119
     120resourcestring
     121  SUnsupportedType = 'Unsupported property type "%s"';
    101122
    102123{ TChronisTypeList }
     
    159180      NewColumn.TypeDef := Base.Types.FindByTypeIndex(Integer(vtInteger));
    160181      for I := 0 to Properties.Count - 1 do
    161       if Properties[I].Values['Type'] <> IntToStr(20) then begin
     182      if Properties[I].Values['Type'] <> IntToStr(Integer(vtRelationMany)) then begin
    162183        NewColumn := TReportColumn.Create;
    163184        Columns.Add(NewColumn);
     
    165186        NewColumn.ColumnName := Properties[I].Values['ColumnName'];;
    166187        NewColumn.TypeDef := Base.Types.FindById(StrToInt(Properties[I].Values['Type']));
     188        if not Assigned(NewColumn.TypeDef) then
     189          raise Exception.Create(Format(SUnsupportedType, [Properties[I].Values['Type']]));
    167190      end;
    168191
     
    181204        NewItem.Id := StrToInt(Values[I].Values[Obj.PrimaryKey]);
    182205        for C := 0 to Properties.Count - 1 do
    183         if Properties[C].Values['Type'] <> IntToStr(20) then begin
     206        if Properties[C].Values['Type'] <> IntToStr(Integer(vtRelationMany)) then begin
    184207          NewItem.Items.Add(Values[I].Values[Properties[C].Values['ColumnName']]);
    185208        end;
     
    244267    Data.Add('Object', IntToStr(ObjectId));
    245268    Data.Add('ColumnName', ColumnName);
    246     Data.Add('Type', IntToStr(DataType));
     269    Data.Add('CustomType', IntToStr(DataType));
     270    Data.Add('Editable', '1');
    247271    Database.Insert(PropertyTable, Data);
    248272    Result := Database.LastInsertId;
     
    253277end;
    254278
     279function TChronisBase.AddPropertyNumber(ObjectId: Integer; Name,
     280  ColumnName: string; Default: Integer = 0; Min: Integer = 0;
     281  Max: Integer = High(Integer)): Integer;
     282var
     283  DbRows: TDbRows;
     284  Data: TDictionaryStringString;
     285  CustomTypeId: Integer;
     286begin
     287  try
     288    DbRows := TDbRows.Create;
     289    Data := TDictionaryStringString.Create;
     290
     291    Data.Clear;
     292    Data.Add('Type', IntToStr(Integer(vtInteger)));
     293    Database.Insert(CustomType, Data);
     294    CustomTypeId := Database.LastInsertId;
     295
     296    Data.Clear;
     297    Data.Add('CustomType', IntToStr(CustomTypeId));
     298    Data.Add('Min', IntToStr(Min));
     299    Data.Add('Max', IntToStr(Max));
     300    Data.Add('Default', IntToStr(Default));
     301    Database.Insert(TypeNumber, Data);
     302    CustomTypeId := Database.LastInsertId;
     303
     304    Result := AddProperty(ObjectId, Name, ColumnName, CustomTypeId);
     305  finally
     306    Data.Free;
     307    DbRows.Free;
     308  end;
     309end;
     310
     311function TChronisBase.AddPropertyString(ObjectId: Integer; Name,
     312  ColumnName: string; Default: string = ''; MaxLength: Integer = 255): Integer;
     313var
     314  DbRows: TDbRows;
     315  Data: TDictionaryStringString;
     316  CustomTypeId: Integer;
     317begin
     318  try
     319    DbRows := TDbRows.Create;
     320    Data := TDictionaryStringString.Create;
     321
     322    Data.Clear;
     323    Data.Add('Type', IntToStr(Integer(vtString)));
     324    Database.Insert(CustomType, Data);
     325    CustomTypeId := Database.LastInsertId;
     326
     327    Data.Clear;
     328    Data.Add('CustomType', IntToStr(CustomTypeId));
     329    Data.Add('MaxLength', IntToStr(MaxLength));
     330    Data.Add('Default', Default);
     331    Database.Insert(TypeString, Data);
     332    CustomTypeId := Database.LastInsertId;
     333
     334    Result := AddProperty(ObjectId, Name, ColumnName, CustomTypeId);
     335  finally
     336    Data.Free;
     337    DbRows.Free;
     338  end;
     339end;
     340
    255341function TChronisBase.AddObjectGroup(Name: string): Integer;
    256342var
     
    263349    Data.Add('Name', Name);
    264350    Database.Insert(ObjectGroupTable, Data);
     351    Result := Database.LastInsertId;
     352  finally
     353    Data.Free;
     354    DbRows.Free;
     355  end;
     356end;
     357
     358function TChronisBase.AddEnumeration(Name: string): Integer;
     359var
     360  DbRows: TDbRows;
     361  Data: TDictionaryStringString;
     362begin
     363  try
     364    DbRows := TDbRows.Create;
     365    Data := TDictionaryStringString.Create;
     366    Data.Add('Name', Name);
     367    Database.Insert(Enumeration, Data);
     368    Result := Database.LastInsertId;
     369  finally
     370    Data.Free;
     371    DbRows.Free;
     372  end;
     373end;
     374
     375function TChronisBase.AddEnumerationState(Enum: Integer; Name: string
     376  ): Integer;
     377var
     378  DbRows: TDbRows;
     379  Data: TDictionaryStringString;
     380begin
     381  try
     382    DbRows := TDbRows.Create;
     383    Data := TDictionaryStringString.Create;
     384    Data.Add('Enumeration', IntToStr(Enum));
     385    Data.Add('Name', Name);
     386    Database.Insert(EnumerationState, Data);
    265387    Result := Database.LastInsertId;
    266388  finally
  • trunk/chronis.lpi

    r12 r13  
    9797      </Item4>
    9898    </RequiredPackages>
    99     <Units Count="33">
     99    <Units Count="37">
    100100      <Unit0>
    101101        <Filename Value="chronis.lpr"/>
    102102        <IsPartOfProject Value="True"/>
    103103        <UnitName Value="chronis"/>
    104         <EditorIndex Value="8"/>
     104        <EditorIndex Value="12"/>
    105105        <WindowIndex Value="0"/>
    106106        <TopLine Value="14"/>
     
    117117        <TopLine Value="330"/>
    118118        <CursorPos X="1" Y="347"/>
    119         <UsageCount Value="49"/>
     119        <UsageCount Value="45"/>
    120120        <DefaultSyntaxHighlighter Value="Delphi"/>
    121121      </Unit1>
     
    129129        <TopLine Value="118"/>
    130130        <CursorPos X="25" Y="144"/>
    131         <UsageCount Value="103"/>
     131        <UsageCount Value="99"/>
    132132        <DefaultSyntaxHighlighter Value="Delphi"/>
    133133      </Unit2>
     
    141141        <TopLine Value="1"/>
    142142        <CursorPos X="24" Y="14"/>
    143         <UsageCount Value="103"/>
     143        <UsageCount Value="99"/>
    144144        <DefaultSyntaxHighlighter Value="Delphi"/>
    145145      </Unit3>
     
    148148        <IsPartOfProject Value="True"/>
    149149        <UnitName Value="UPersistentForm"/>
    150         <EditorIndex Value="10"/>
     150        <EditorIndex Value="14"/>
    151151        <WindowIndex Value="0"/>
    152152        <TopLine Value="55"/>
     
    160160        <IsPartOfProject Value="True"/>
    161161        <UnitName Value="USqlDatabase"/>
    162         <EditorIndex Value="7"/>
     162        <EditorIndex Value="11"/>
    163163        <WindowIndex Value="0"/>
    164164        <TopLine Value="209"/>
    165         <CursorPos X="36" Y="222"/>
     165        <CursorPos X="1" Y="221"/>
    166166        <UsageCount Value="264"/>
    167167        <Loaded Value="True"/>
     
    172172        <IsPartOfProject Value="True"/>
    173173        <UnitName Value="URegistry"/>
    174         <EditorIndex Value="9"/>
     174        <EditorIndex Value="13"/>
    175175        <WindowIndex Value="0"/>
    176176        <TopLine Value="19"/>
     
    188188        <EditorIndex Value="0"/>
    189189        <WindowIndex Value="0"/>
    190         <TopLine Value="95"/>
    191         <CursorPos X="19" Y="113"/>
     190        <TopLine Value="1"/>
     191        <CursorPos X="15" Y="1"/>
    192192        <UsageCount Value="327"/>
    193193        <Loaded Value="True"/>
     
    203203        <EditorIndex Value="1"/>
    204204        <WindowIndex Value="0"/>
    205         <TopLine Value="134"/>
    206         <CursorPos X="40" Y="141"/>
     205        <TopLine Value="129"/>
     206        <CursorPos X="34" Y="133"/>
    207207        <UsageCount Value="318"/>
    208208        <Loaded Value="True"/>
     
    217217        <ResourceBaseClass Value="Form"/>
    218218        <UnitName Value="ULoginForm"/>
    219         <EditorIndex Value="12"/>
     219        <EditorIndex Value="16"/>
    220220        <WindowIndex Value="0"/>
    221221        <TopLine Value="14"/>
     
    235235        <EditorIndex Value="2"/>
    236236        <WindowIndex Value="0"/>
    237         <TopLine Value="148"/>
    238         <CursorPos X="40" Y="160"/>
     237        <TopLine Value="613"/>
     238        <CursorPos X="1" Y="625"/>
    239239        <UsageCount Value="317"/>
    240240        <Loaded Value="True"/>
     
    255255        <ResourceBaseClass Value="Form"/>
    256256        <UnitName Value="UItemAdd"/>
    257         <EditorIndex Value="11"/>
     257        <EditorIndex Value="15"/>
    258258        <WindowIndex Value="0"/>
    259259        <TopLine Value="85"/>
     
    269269        <TopLine Value="963"/>
    270270        <CursorPos X="3" Y="974"/>
    271         <UsageCount Value="8"/>
     271        <UsageCount Value="4"/>
    272272        <DefaultSyntaxHighlighter Value="Delphi"/>
    273273      </Unit13>
     
    277277        <TopLine Value="43"/>
    278278        <CursorPos X="1" Y="60"/>
    279         <UsageCount Value="15"/>
     279        <UsageCount Value="11"/>
    280280      </Unit14>
    281281      <Unit15>
     
    284284        <TopLine Value="68"/>
    285285        <CursorPos X="1" Y="85"/>
    286         <UsageCount Value="12"/>
     286        <UsageCount Value="8"/>
    287287      </Unit15>
    288288      <Unit16>
     
    292292        <TopLine Value="593"/>
    293293        <CursorPos X="15" Y="606"/>
    294         <UsageCount Value="7"/>
     294        <UsageCount Value="3"/>
    295295      </Unit16>
    296296      <Unit17>
     
    299299        <TopLine Value="2104"/>
    300300        <CursorPos X="3" Y="2109"/>
    301         <UsageCount Value="7"/>
     301        <UsageCount Value="3"/>
    302302      </Unit17>
    303303      <Unit18>
     
    307307        <TopLine Value="1"/>
    308308        <CursorPos X="6" Y="1"/>
    309         <UsageCount Value="18"/>
     309        <UsageCount Value="14"/>
    310310        <DefaultSyntaxHighlighter Value="Delphi"/>
    311311      </Unit18>
     
    315315        <TopLine Value="1"/>
    316316        <CursorPos X="3" Y="21"/>
    317         <UsageCount Value="18"/>
     317        <UsageCount Value="14"/>
    318318        <DefaultSyntaxHighlighter Value="Delphi"/>
    319319      </Unit19>
     
    322322        <IsPartOfProject Value="True"/>
    323323        <UnitName Value="USystem"/>
    324         <EditorIndex Value="6"/>
    325         <WindowIndex Value="0"/>
    326         <TopLine Value="272"/>
    327         <CursorPos X="27" Y="286"/>
    328         <UsageCount Value="44"/>
     324        <IsVisibleTab Value="True"/>
     325        <EditorIndex Value="10"/>
     326        <WindowIndex Value="0"/>
     327        <TopLine Value="185"/>
     328        <CursorPos X="33" Y="176"/>
     329        <UsageCount Value="83"/>
    329330        <Loaded Value="True"/>
    330331        <DefaultSyntaxHighlighter Value="Delphi"/>
     
    336337        <TopLine Value="912"/>
    337338        <CursorPos X="14" Y="929"/>
    338         <UsageCount Value="15"/>
     339        <UsageCount Value="11"/>
    339340      </Unit21>
    340341      <Unit22>
     
    343344        <TopLine Value="1"/>
    344345        <CursorPos X="15" Y="18"/>
    345         <UsageCount Value="13"/>
     346        <UsageCount Value="9"/>
    346347      </Unit22>
    347348      <Unit23>
     
    350351        <TopLine Value="1"/>
    351352        <CursorPos X="11" Y="30"/>
    352         <UsageCount Value="10"/>
     353        <UsageCount Value="6"/>
    353354        <DefaultSyntaxHighlighter Value="Delphi"/>
    354355      </Unit23>
     
    359360        <ResourceBaseClass Value="DataModule"/>
    360361        <UnitName Value="UCore"/>
    361         <EditorIndex Value="5"/>
     362        <EditorIndex Value="9"/>
    362363        <WindowIndex Value="0"/>
    363364        <TopLine Value="3"/>
    364365        <CursorPos X="32" Y="17"/>
    365         <UsageCount Value="28"/>
     366        <UsageCount Value="67"/>
    366367        <Loaded Value="True"/>
    367368        <LoadedDesigner Value="True"/>
     
    374375        <ResourceBaseClass Value="Form"/>
    375376        <UnitName Value="USettingForm"/>
    376         <IsVisibleTab Value="True"/>
    377         <EditorIndex Value="4"/>
    378         <WindowIndex Value="0"/>
    379         <TopLine Value="1"/>
    380         <CursorPos X="29" Y="9"/>
    381         <UsageCount Value="27"/>
     377        <EditorIndex Value="8"/>
     378        <WindowIndex Value="0"/>
     379        <TopLine Value="40"/>
     380        <CursorPos X="45" Y="15"/>
     381        <UsageCount Value="66"/>
    382382        <Loaded Value="True"/>
    383383        <LoadedDesigner Value="True"/>
     
    388388        <IsPartOfProject Value="True"/>
    389389        <UnitName Value="UApplicationInfo"/>
    390         <EditorIndex Value="3"/>
     390        <EditorIndex Value="7"/>
    391391        <WindowIndex Value="0"/>
    392392        <TopLine Value="37"/>
    393393        <CursorPos X="48" Y="56"/>
    394         <UsageCount Value="27"/>
     394        <UsageCount Value="66"/>
    395395        <Loaded Value="True"/>
    396396        <DefaultSyntaxHighlighter Value="Delphi"/>
     
    402402        <TopLine Value="97"/>
    403403        <CursorPos X="26" Y="109"/>
    404         <UsageCount Value="13"/>
     404        <UsageCount Value="9"/>
    405405      </Unit27>
    406406      <Unit28>
     
    409409        <TopLine Value="16"/>
    410410        <CursorPos X="14" Y="58"/>
    411         <UsageCount Value="13"/>
     411        <UsageCount Value="9"/>
    412412      </Unit28>
    413413      <Unit29>
     
    416416        <TopLine Value="87"/>
    417417        <CursorPos X="6" Y="103"/>
    418         <UsageCount Value="13"/>
     418        <UsageCount Value="9"/>
    419419      </Unit29>
    420420      <Unit30>
     
    423423        <TopLine Value="372"/>
    424424        <CursorPos X="7" Y="384"/>
    425         <UsageCount Value="10"/>
     425        <UsageCount Value="6"/>
    426426      </Unit30>
    427427      <Unit31>
     
    430430        <TopLine Value="82"/>
    431431        <CursorPos X="40" Y="94"/>
    432         <UsageCount Value="10"/>
     432        <UsageCount Value="6"/>
    433433      </Unit31>
    434434      <Unit32>
     
    438438        <TopLine Value="301"/>
    439439        <CursorPos X="3" Y="305"/>
    440         <UsageCount Value="10"/>
     440        <UsageCount Value="6"/>
    441441      </Unit32>
     442      <Unit33>
     443        <Filename Value="H:/Lazarus/0.9.31_2.5.1/lcl/dialogs.pp"/>
     444        <UnitName Value="Dialogs"/>
     445        <EditorIndex Value="6"/>
     446        <WindowIndex Value="0"/>
     447        <TopLine Value="487"/>
     448        <CursorPos X="44" Y="500"/>
     449        <UsageCount Value="29"/>
     450        <Loaded Value="True"/>
     451      </Unit33>
     452      <Unit34>
     453        <Filename Value="H:/Lazarus/0.9.31_2.5.1/lcl/controls.pp"/>
     454        <UnitName Value="Controls"/>
     455        <EditorIndex Value="5"/>
     456        <WindowIndex Value="0"/>
     457        <TopLine Value="44"/>
     458        <CursorPos X="3" Y="56"/>
     459        <UsageCount Value="29"/>
     460        <Loaded Value="True"/>
     461      </Unit34>
     462      <Unit35>
     463        <Filename Value="H:/PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     464        <EditorIndex Value="4"/>
     465        <WindowIndex Value="0"/>
     466        <TopLine Value="1"/>
     467        <CursorPos X="24" Y="11"/>
     468        <UsageCount Value="11"/>
     469        <Loaded Value="True"/>
     470      </Unit35>
     471      <Unit36>
     472        <Filename Value="H:/PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericList.inc"/>
     473        <EditorIndex Value="3"/>
     474        <WindowIndex Value="0"/>
     475        <TopLine Value="120"/>
     476        <CursorPos X="1" Y="132"/>
     477        <UsageCount Value="11"/>
     478        <Loaded Value="True"/>
     479      </Unit36>
    442480    </Units>
    443481    <JumpHistory Count="30" HistoryIndex="29">
    444482      <Position1>
    445483        <Filename Value="USystem.pas"/>
    446         <Caret Line="256" Column="10" TopLine="236"/>
     484        <Caret Line="101" Column="25" TopLine="92"/>
    447485      </Position1>
    448486      <Position2>
    449487        <Filename Value="USystem.pas"/>
    450         <Caret Line="257" Column="11" TopLine="236"/>
     488        <Caret Line="274" Column="34" TopLine="274"/>
    451489      </Position2>
    452490      <Position3>
    453491        <Filename Value="USystem.pas"/>
    454         <Caret Line="259" Column="10" TopLine="236"/>
     492        <Caret Line="102" Column="27" TopLine="100"/>
    455493      </Position3>
    456494      <Position4>
    457495        <Filename Value="USystem.pas"/>
    458         <Caret Line="260" Column="12" TopLine="248"/>
     496        <Caret Line="291" Column="24" TopLine="277"/>
    459497      </Position4>
    460498      <Position5>
    461         <Filename Value="Forms/UItemEdit.pas"/>
    462         <Caret Line="92" Column="13" TopLine="89"/>
     499        <Filename Value="Forms/UMainForm.pas"/>
     500        <Caret Line="389" Column="15" TopLine="375"/>
    463501      </Position5>
    464502      <Position6>
    465503        <Filename Value="USystem.pas"/>
    466         <Caret Line="138" Column="36" TopLine="126"/>
     504        <Caret Line="316" Column="3" TopLine="318"/>
    467505      </Position6>
    468506      <Position7>
    469507        <Filename Value="USystem.pas"/>
    470         <Caret Line="92" Column="14" TopLine="69"/>
     508        <Caret Line="31" Column="41" TopLine="20"/>
    471509      </Position7>
    472510      <Position8>
    473511        <Filename Value="USystem.pas"/>
    474         <Caret Line="81" Column="50" TopLine="68"/>
     512        <Caret Line="290" Column="50" TopLine="278"/>
    475513      </Position8>
    476514      <Position9>
    477         <Filename Value="USystem.pas"/>
    478         <Caret Line="109" Column="37" TopLine="104"/>
     515        <Filename Value="Forms/UItemEdit.pas"/>
     516        <Caret Line="141" Column="40" TopLine="134"/>
    479517      </Position9>
    480518      <Position10>
    481         <Filename Value="USystem.pas"/>
    482         <Caret Line="110" Column="6" TopLine="103"/>
     519        <Filename Value="Forms/UItemEdit.pas"/>
     520        <Caret Line="133" Column="34" TopLine="129"/>
    483521      </Position10>
    484522      <Position11>
    485         <Filename Value="Forms/UItemEdit.pas"/>
    486         <Caret Line="92" Column="11" TopLine="89"/>
     523        <Filename Value="Forms/UMainForm.pas"/>
     524        <Caret Line="374" Column="49" TopLine="357"/>
    487525      </Position11>
    488526      <Position12>
    489         <Filename Value="USystem.pas"/>
    490         <Caret Line="150" Column="20" TopLine="137"/>
     527        <Filename Value="Common/USqlDatabase.pas"/>
     528        <Caret Line="221" Column="1" TopLine="209"/>
    491529      </Position12>
    492530      <Position13>
    493         <Filename Value="USystem.pas"/>
    494         <Caret Line="149" Column="23" TopLine="137"/>
     531        <Filename Value="Forms/UMainForm.pas"/>
     532        <Caret Line="388" Column="16" TopLine="375"/>
    495533      </Position13>
    496534      <Position14>
    497535        <Filename Value="USystem.pas"/>
    498         <Caret Line="37" Column="1" TopLine="27"/>
     536        <Caret Line="104" Column="53" TopLine="92"/>
    499537      </Position14>
    500538      <Position15>
    501539        <Filename Value="USystem.pas"/>
    502         <Caret Line="149" Column="35" TopLine="137"/>
     540        <Caret Line="309" Column="69" TopLine="308"/>
    503541      </Position15>
    504542      <Position16>
    505543        <Filename Value="USystem.pas"/>
    506         <Caret Line="81" Column="29" TopLine="74"/>
     544        <Caret Line="102" Column="27" TopLine="91"/>
    507545      </Position16>
    508546      <Position17>
    509         <Filename Value="Forms/UItemView.pas"/>
    510         <Caret Line="110" Column="44" TopLine="98"/>
     547        <Filename Value="Forms/UMainForm.pas"/>
     548        <Caret Line="412" Column="50" TopLine="396"/>
    511549      </Position17>
    512550      <Position18>
    513         <Filename Value="Forms/UItemView.pas"/>
    514         <Caret Line="112" Column="39" TopLine="98"/>
     551        <Filename Value="Common/USqlDatabase.pas"/>
     552        <Caret Line="221" Column="1" TopLine="209"/>
    515553      </Position18>
    516554      <Position19>
    517         <Filename Value="UCore.pas"/>
    518         <Caret Line="13" Column="32" TopLine="3"/>
     555        <Filename Value="USystem.pas"/>
     556        <Caret Line="322" Column="1" TopLine="312"/>
    519557      </Position19>
    520558      <Position20>
    521         <Filename Value="Forms/UMainForm.pas"/>
    522         <Caret Line="323" Column="8" TopLine="309"/>
     559        <Filename Value="Common/USqlDatabase.pas"/>
     560        <Caret Line="221" Column="1" TopLine="209"/>
    523561      </Position20>
    524562      <Position21>
    525         <Filename Value="Forms/UMainForm.pas"/>
    526         <Caret Line="124" Column="8" TopLine="108"/>
     563        <Filename Value="USystem.pas"/>
     564        <Caret Line="300" Column="27" TopLine="300"/>
    527565      </Position21>
    528566      <Position22>
    529567        <Filename Value="Forms/UMainForm.pas"/>
    530         <Caret Line="324" Column="32" TopLine="312"/>
     568        <Caret Line="353" Column="34" TopLine="337"/>
    531569      </Position22>
    532570      <Position23>
    533         <Filename Value="Forms/USettingForm.pas"/>
    534         <Caret Line="3" Column="42" TopLine="10"/>
     571        <Filename Value="Common/USqlDatabase.pas"/>
     572        <Caret Line="221" Column="1" TopLine="209"/>
    535573      </Position23>
    536574      <Position24>
    537         <Filename Value="Forms/USettingForm.pas"/>
    538         <Caret Line="22" Column="17" TopLine="10"/>
     575        <Filename Value="Forms/UMainForm.pas"/>
     576        <Caret Line="353" Column="39" TopLine="337"/>
    539577      </Position24>
    540578      <Position25>
    541         <Filename Value="Forms/USettingForm.pas"/>
    542         <Caret Line="24" Column="20" TopLine="7"/>
     579        <Filename Value="Common/USqlDatabase.pas"/>
     580        <Caret Line="221" Column="1" TopLine="209"/>
    543581      </Position25>
    544582      <Position26>
    545         <Filename Value="Forms/USettingForm.pas"/>
    546         <Caret Line="44" Column="12" TopLine="31"/>
     583        <Filename Value="USystem.pas"/>
     584        <Caret Line="334" Column="20" TopLine="319"/>
    547585      </Position26>
    548586      <Position27>
    549         <Filename Value="Forms/USettingForm.pas"/>
    550         <Caret Line="46" Column="1" TopLine="23"/>
     587        <Filename Value="USystem.pas"/>
     588        <Caret Line="409" Column="37" TopLine="391"/>
    551589      </Position27>
    552590      <Position28>
    553         <Filename Value="Forms/USettingForm.pas"/>
    554         <Caret Line="53" Column="34" TopLine="34"/>
     591        <Filename Value="H:/PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericList.inc"/>
     592        <Caret Line="132" Column="1" TopLine="120"/>
    555593      </Position28>
    556594      <Position29>
    557         <Filename Value="Forms/USettingForm.pas"/>
    558         <Caret Line="47" Column="8" TopLine="35"/>
     595        <Filename Value="Forms/UMainForm.pas"/>
     596        <Caret Line="684" Column="1" TopLine="672"/>
    559597      </Position29>
    560598      <Position30>
    561         <Filename Value="Forms/USettingForm.pas"/>
    562         <Caret Line="59" Column="13" TopLine="47"/>
     599        <Filename Value="Forms/UMainForm.pas"/>
     600        <Caret Line="625" Column="1" TopLine="613"/>
    563601      </Position30>
    564602    </JumpHistory>
Note: See TracChangeset for help on using the changeset viewer.