소스 검색

Add support for domain character sets. Show collation and character set in domain GUI. Don't abort debug builds if senddebug fails (e.g. due to server not running).

Reinier Olislagers 11 년 전
부모
커밋
10e0f50bcd
9개의 변경된 파일152개의 추가작업 그리고 50개의 파일을 삭제
  1. 4 1
      TurboBird.lpi
  2. 18 9
      comparison.pas
  3. 10 4
      main.pas
  4. 2 3
      querywindow.pas
  5. 5 1
      scriptdb.pas
  6. 14 10
      systables.pas
  7. 64 7
      viewdomain.lfm
  8. 29 15
      viewdomain.lrs
  9. 6 0
      viewdomain.pas

+ 4 - 1
TurboBird.lpi

@@ -440,7 +440,7 @@
     </Other>
   </CompilerOptions>
   <Debugging>
-    <Exceptions Count="3">
+    <Exceptions Count="4">
       <Item1>
         <Name Value="EAbort"/>
       </Item1>
@@ -450,6 +450,9 @@
       <Item3>
         <Name Value="EFOpenError"/>
       </Item3>
+      <Item4>
+        <Name Value="EProcess"/>
+      </Item4>
     </Exceptions>
   </Debugging>
 </CONFIG>

+ 18 - 9
comparison.pas

@@ -309,6 +309,7 @@ var
   ModuleName, EntryPoint, Params: string;
   Line: string;
   CheckConstraint: string; //for domain check constraints
+  CharacterSet: string;
   Collation: string;
   DomainType, DefaultValue: string;
   DomainSize: Integer;
@@ -438,7 +439,7 @@ begin
       if (x = 8) and cxDomains.Checked then // Domains
       for i:= 0 to dbObjectsList[x].Count - 1 do
       begin
-        dmSysTables.GetDomainInfo(fdbIndex, dbObjectsList[x].Strings[i], DomainType, DomainSize, DefaultValue, CheckConstraint, Collation);
+        dmSysTables.GetDomainInfo(fdbIndex, dbObjectsList[x].Strings[i], DomainType, DomainSize, DefaultValue, CheckConstraint, CharacterSet, Collation);
 
         Line:= 'Create Domain ' + dbObjectsList[x].Strings[i] + ' as ' + DomainType;
         // String size
@@ -451,6 +452,9 @@ begin
         // Check constraint, if any:
         if CheckConstraint <> '' then
           Line:= Line + ' ' + CheckConstraint;
+        // Character set for text types, if any:
+        if CharacterSet <> '' then
+          Line:= Line + ' CHARACTER SET ' +  CharacterSet;
         // Collation for text types, if any:
         if Collation <> '' then
           Line:= Line + ' COLLATE ' +  Collation;
@@ -989,10 +993,10 @@ end;
 procedure TfmComparison.CheckModifiedDomains;
 var
   i: Integer;
-  CheckConstraint, Collation: string;
+  CheckConstraint, CharacterSet, Collation: string;
   DomainName: string;
   DomainType, DefaultValue: string;
-  CCheckConstraint, CCollation: string;
+  CCheckConstraint, CCharacterSet, CCollation: string;
   CDomainType, CDefaultValue: string;
   DomainSize, CDomainSize: Integer;
 begin
@@ -1010,14 +1014,15 @@ begin
     DomainName:= dbExistingObjectsList[8][i];
 
     // Read all domain properties
-    dmSysTables.GetDomainInfo(fdbIndex, DomainName, DomainType, DomainSize, DefaultValue, CheckConstraint, Collation);
-    dmSysTables.GetDomainInfo(cbComparedDatabase.ItemIndex, DomainName, CDomainType, CDomainSize, CDefaultValue, CCheckConstraint, CCollation);
+    dmSysTables.GetDomainInfo(fdbIndex, DomainName, DomainType, DomainSize, DefaultValue, CheckConstraint, CharacterSet, Collation);
+    dmSysTables.GetDomainInfo(cbComparedDatabase.ItemIndex, DomainName, CDomainType, CDomainSize, CDefaultValue, CCheckConstraint, CCharacterSet, CCollation);
 
     // Compare
     if (DomainType <> CDomainType) or
        (DomainSize <> CDomainSize) or
        (DefaultValue <> CDefaultValue) or
        (CheckConstraint <> CCheckConstraint) or
+       (CharacterSet <> CCharacterSet) or
        (Collation <> CCollation) then
     begin
       meLog.Lines.Add(' ' + DomainName);
@@ -1524,7 +1529,7 @@ end;
 procedure TfmComparison.ScriptModifiedDomains;
 var
   i: Integer;
-  CheckConstraint, Collation: string;
+  CheckConstraint, CharacterSet, Collation: string;
   DomainName: string;
   DomainType, DefaultValue: string;
   DomainSize: Integer;
@@ -1540,7 +1545,7 @@ begin
   for i:= 0 to ModifiedDomainsList.Count - 1 do
   begin
     DomainName:= ModifiedDomainsList[i];
-    dmSysTables.GetDomainInfo(fdbIndex, DomainName, DomainType, domainSize, DefaultValue, CheckConstraint, Collation);
+    dmSysTables.GetDomainInfo(fdbIndex, DomainName, DomainType, DomainSize, DefaultValue, CheckConstraint, CharacterSet, Collation);
     fQueryWindow.meQuery.Lines.Add('');
     Line:= 'Alter DOMAIN ' + DomainName + ' type ' + DomainType;
     if Pos('char', LowerCase(DomainType)) > 0 then
@@ -1549,11 +1554,15 @@ begin
 
     // todo: verify if this check constraint clause works correctly
     if Trim(CheckConstraint) <> '' then
-      FQueryWindow.meQuery.Lines.Add(Trim(CheckConstraint));
+      FQueryWindow.meQuery.Lines.Add(CheckConstraint);
+
+    // todo: verify if this character set clause works correctly
+    if Trim(CharacterSet) <> '' then
+      FQueryWindow.meQuery.Lines.Add('characterset '+CharacterSet);
 
     // todo: verify if this collation clause works correctly
     if Trim(Collation) <> '' then
-      FQueryWindow.meQuery.Lines.Add('collation '+Trim(Collation));
+      FQueryWindow.meQuery.Lines.Add('collation '+Collation);
 
     if Trim(DefaultValue) <> '' then
     begin

+ 10 - 4
main.pas

@@ -1418,7 +1418,11 @@ begin
     detRollBack: Source:='Rollback: ';
     else Source:='Unknown event. Please fix program code.';
   end;
-  SendDebug(Source + Msg);
+  try
+    SendDebug(Source + Msg);
+  except
+    // Ignore errors (e.g. debug server not active)
+  end;
 end;
 
 
@@ -2408,6 +2412,7 @@ var
   SelNode: TTreeNode;
   ADomainName: string;
   CheckConstraint: string;
+  CharacterSet: string;
   Collation: string;
   DomainType: string;
   DomainSize: Integer;
@@ -2440,7 +2445,7 @@ begin
     PageControl1.ActivePage:= ATab;
 
     dbIndex:= SelNode.Parent.Parent.OverlayIndex;
-    dmSysTables.GetDomainInfo(dbIndex, ADomainName, DomainType, DomainSize, DefaultValue, CheckConstraint, Collation);
+    dmSysTables.GetDomainInfo(dbIndex, ADomainName, DomainType, DomainSize, DefaultValue, CheckConstraint, CharacterSet, Collation);
     ATab.Tag:= dbIndex;
     if Pos('default', LowerCase(DefaultValue)) = 1 then
       DefaultValue:= Trim(Copy(DefaultValue, 8, Length(DefaultValue)));
@@ -2457,8 +2462,9 @@ begin
       laType.Caption:= DomainType;
       laSize.Caption:= IntToStr(DomainSize);
       laDefault.Caption:= DefaultValue;
-      //todo: add caption with check constraint
-      //todo: add caption with character set/collation
+      laCheckConstraint.Caption:= CheckConstraint;
+      laCharacterSet.Caption:= CharacterSet;
+      laCollation.Caption:= Collation;
     end;
     ADomainForm.Show;
   end;

+ 2 - 3
querywindow.pas

@@ -659,8 +659,8 @@ begin
     end;
 
     if (Pos('select', MassagedSQL) = 1) then
-      // todo: low priority misses insert...returning,
-      // update...returning, merge.. returning...
+      { todo: low priority misses insert...returning,
+       update...returning, merge.. returning...}
       Result:= qtSelectable
     else
     begin
@@ -1459,7 +1459,6 @@ begin
       ATab.ImageIndex:= 2;
       SQLScript.Script.Text:= Script;
       {$IFDEF DEBUG}
-      //todo: debug
       SendDebug('going to run script: '+SQLScript.Script.Text);
       {$Endif}
       SQLScript.ExecuteScript;

+ 5 - 1
scriptdb.pas

@@ -166,6 +166,7 @@ function ScriptAllDomains(dbIndex: Integer; var List: TStringList): Boolean;
 var
   Count: Integer;
   i: Integer;
+  CharacterSet: string;
   Collation: string;
   DomainType: string;
   DomainSize: Integer;
@@ -178,7 +179,7 @@ begin
   dmSysTables.SortDependencies(List);
   for i:= 0 to List.Count - 1 do
   begin
-    dmSysTables.GetDomainInfo(dbIndex, List[i], DomainType, DomainSize, DefaultValue, CheckConstraint, Collation);
+    dmSysTables.GetDomainInfo(dbIndex, List[i], DomainType, DomainSize, DefaultValue, CheckConstraint, CharacterSet, Collation);
 
     List[i]:= 'Create Domain ' + List[i] + ' as ' + DomainType;
     if (Pos('CHAR', DomainType) > 0) or (Pos('CSTRING', DomainType) > 0) then
@@ -187,6 +188,9 @@ begin
     // Check constraint, if any:
     if CheckConstraint <> '' then
       List[i]:= List[i] + ' ' + CheckConstraint;
+    // Character set for text types, if any
+    if CharacterSet <> '' then
+      List[i]:= List[i] + ' CHARACTER SET ' + CharacterSet;
     // Collation for text types, if any:
     if Collation <> '' then
       List[i]:= List[i] + ' COLLATE ' +  Collation;

+ 14 - 10
systables.pas

@@ -6,7 +6,7 @@ interface
 
 uses
   Classes, SysUtils, sqldb, IBConnection, FileUtil, LResources, Forms, Controls,
-  Dialogs;
+  Dialogs, dbugintf;
 
 type
 
@@ -66,7 +66,7 @@ type
     function GetExceptionInfo(ExceptionName: string; var Msg, Description, SqlQuery: string): Boolean;
     // Gets information about domain
     procedure GetDomainInfo(dbIndex: Integer; DomainName: string; var DomainType: string;
-      var DomainSize: Integer; var DefaultValue: string; var CheckConstraint: string; var Collation: string);
+      var DomainSize: Integer; var DefaultValue: string; var CheckConstraint: string; var CharacterSet: string; var Collation: string);
     function GetConstraintForeignKeyFields(AIndexName: string; SqlQuery: TSQLQuery): string;
 
     function GetDBUsers(dbIndex: Integer; ObjectName: string = ''): string;
@@ -178,7 +178,7 @@ begin
     sqQuery.SQL.Text:= 'SELECT RDB$RELATION_NAME FROM RDB$RELATIONS where RDB$SYSTEM_FLAG=1 ' +
       'order by RDB$RELATION_NAME'
   else
-  if TVIndex = 8 then // Domains
+  if TVIndex = 8 then // Domains, excluding system-defined domains
     sqQuery.SQL.Text:= 'select RDB$FIELD_NAME from RDB$FIELDS where RDB$Field_Name not like ''RDB$%''  order by rdb$Field_Name'
   else
   if TVIndex = 9 then // Roles
@@ -635,16 +635,19 @@ end;
 (************  View Domain info  ***************)
 
 procedure TdmSysTables.GetDomainInfo(dbIndex: Integer; DomainName: string; var DomainType: string;
-  var DomainSize: Integer; var DefaultValue: string; var CheckConstraint: string; var Collation: string);
+  var DomainSize: Integer; var DefaultValue: string; var CheckConstraint: string; var CharacterSet: string; var Collation: string);
 const
   // Select domain and associated collation (if text type domain)
   // note weird double join fields required...
   QueryTemplate= 'select f.*, '+
-    'c.rdb$collation_name '+
+    'coll.rdb$collation_name, '+
+    'cs.rdb$character_set_name '+
     'from rdb$fields as f '+
-    'left join rdb$collations as c on '+
-    'f.rdb$collation_id=c.rdb$collation_id and '+
-    'f.rdb$character_set_id=c.rdb$character_set_id '+
+    'left join rdb$collations as coll on '+
+    'f.rdb$collation_id=coll.rdb$collation_id and '+
+    'f.rdb$character_set_id=coll.rdb$character_set_id '+
+    'inner join rdb$character_sets as cs on '+
+    'coll.rdb$character_set_id=cs.rdb$character_set_id '+
     'where f.rdb$field_name=''%s'' ';
 begin
   Init(dbIndex);
@@ -662,6 +665,7 @@ begin
     DomainSize:= sqQuery.FieldByName('RDB$FIELD_LENGTH').AsInteger;
     DefaultValue:= trim(sqQuery.FieldByName('RDB$DEFAULT_SOURCE').AsString);
     CheckConstraint:= trim(sqQuery.FieldByName('RDB$VALIDATION_SOURCE').AsString); //e.g. CHECK (VALUE > 10000 AND VALUE <= 2000000)
+    CharacterSet:= trim(sqQuery.FieldByName('rdb$character_set_name').AsString);
     Collation:= trim(sqQuery.FieldByName('rdb$collation_name').AsString);
   end
   else
@@ -873,9 +877,9 @@ end;
 
 function TdmSysTables.GetDomainTypeSize(dbIndex: Integer; DomainTypeName: string): Integer;
 var
-  DomainType, DefaultValue, CheckConstraint, Collation: string;
+  DomainType, DefaultValue, CheckConstraint, CharacterSet, Collation: string;
 begin
-  GetDomainInfo(dbIndex, DomainTypeName, DomainType, Result, DefaultValue, CheckConstraint, Collation);
+  GetDomainInfo(dbIndex, DomainTypeName, DomainType, Result, DefaultValue, CheckConstraint, CharacterSet, Collation);
 end;
 
 

+ 64 - 7
viewdomain.lfm

@@ -1,16 +1,16 @@
 object fmViewDomain: TfmViewDomain
   Left = 330
-  Height = 164
+  Height = 264
   Top = 216
   Width = 617
   Caption = 'fmViewDomain'
-  ClientHeight = 164
+  ClientHeight = 264
   ClientWidth = 617
   KeyPreview = True
   OnClose = FormClose
   OnKeyDown = FormKeyDown
   Position = poScreenCenter
-  LCLVersion = '1.2.0.3'
+  LCLVersion = '1.2.2.0'
   object Label1: TLabel
     Left = 11
     Height = 13
@@ -50,8 +50,8 @@ object fmViewDomain: TfmViewDomain
     Left = 120
     Height = 18
     Top = 80
-    Width = 54
-    Caption = 'laName'
+    Width = 43
+    Caption = 'laSize'
     Font.Color = 10234153
     Font.Name = 'courier 10 pitch [bitstream]'
     ParentColor = False
@@ -69,8 +69,8 @@ object fmViewDomain: TfmViewDomain
     Left = 120
     Height = 18
     Top = 112
-    Width = 54
-    Caption = 'laName'
+    Width = 61
+    Caption = 'laDefault'
     Font.Color = 10234153
     Font.Name = 'courier 10 pitch [bitstream]'
     ParentColor = False
@@ -102,4 +102,61 @@ object fmViewDomain: TfmViewDomain
     ParentFont = False
     TabOrder = 1
   end
+  object Label6: TLabel
+    Left = 11
+    Height = 13
+    Top = 140
+    Width = 80
+    Caption = 'Check constraint'
+    ParentColor = False
+  end
+  object laCheckConstraint: TLabel
+    Left = 120
+    Height = 18
+    Top = 140
+    Width = 128
+    Caption = 'laCheckConstraint'
+    Font.Color = 10234153
+    Font.Name = 'courier 10 pitch [bitstream]'
+    ParentColor = False
+    ParentFont = False
+  end
+  object Label7: TLabel
+    Left = 11
+    Height = 13
+    Top = 176
+    Width = 66
+    Caption = 'Character set'
+    ParentColor = False
+  end
+  object laCharacterSet: TLabel
+    Left = 120
+    Height = 18
+    Top = 176
+    Width = 105
+    Caption = 'laCharacterSet'
+    Font.Color = 10234153
+    Font.Name = 'courier 10 pitch [bitstream]'
+    ParentColor = False
+    ParentFont = False
+  end
+  object laCollation: TLabel
+    Left = 120
+    Height = 18
+    Top = 216
+    Width = 73
+    Caption = 'laCollation'
+    Font.Color = 10234153
+    Font.Name = 'courier 10 pitch [bitstream]'
+    ParentColor = False
+    ParentFont = False
+  end
+  object Label8: TLabel
+    Left = 11
+    Height = 13
+    Top = 216
+    Width = 41
+    Caption = 'Collation'
+    ParentColor = False
+  end
 end

+ 29 - 15
viewdomain.lrs

@@ -1,11 +1,11 @@
 { This is an automatically generated lazarus resource file }
 
 LazarusResources.Add('TfmViewDomain','FORMDATA',[
-  'TPF0'#13'TfmViewDomain'#12'fmViewDomain'#4'Left'#3'J'#1#6'Height'#3#164#0#3
-  +'Top'#3#216#0#5'Width'#3'i'#2#7'Caption'#6#12'fmViewDomain'#12'ClientHeight'
-  +#3#164#0#11'ClientWidth'#3'i'#2#10'KeyPreview'#9#7'OnClose'#7#9'FormClose'#9
-  +'OnKeyDown'#7#11'FormKeyDown'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'
-  +#6#7'1.2.0.3'#0#6'TLabel'#6'Label1'#4'Left'#2#11#6'Height'#2#13#3'Top'#2#15#5
+  'TPF0'#13'TfmViewDomain'#12'fmViewDomain'#4'Left'#3'J'#1#6'Height'#3#8#1#3'To'
+  +'p'#3#216#0#5'Width'#3'i'#2#7'Caption'#6#12'fmViewDomain'#12'ClientHeight'#3
+  +#8#1#11'ClientWidth'#3'i'#2#10'KeyPreview'#9#7'OnClose'#7#9'FormClose'#9'OnK'
+  +'eyDown'#7#11'FormKeyDown'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6
+  +#7'1.2.2.0'#0#6'TLabel'#6'Label1'#4'Left'#2#11#6'Height'#2#13#3'Top'#2#15#5
   +'Width'#2'@'#7'Caption'#6#11'Domain name'#11'ParentColor'#8#0#0#6'TLabel'#6
   +'Label3'#4'Left'#2#11#6'Height'#2#13#3'Top'#2'0'#5'Width'#2'0'#7'Caption'#6#9
   +'Data type'#11'ParentColor'#8#0#0#6'TLabel'#6'laType'#4'Left'#2'x'#6'Height'
@@ -13,18 +13,32 @@ LazarusResources.Add('TfmViewDomain','FORMDATA',[
   +#156#0#9'Font.Name'#6#28'courier 10 pitch [bitstream]'#11'ParentColor'#8#10
   +'ParentFont'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#11#6'Height'#2#13#3'Top'#2
   +'P'#5'Width'#2#19#7'Caption'#6#4'Size'#11'ParentColor'#8#0#0#6'TLabel'#6'laS'
-  +'ize'#4'Left'#2'x'#6'Height'#2#18#3'Top'#2'P'#5'Width'#2'6'#7'Caption'#6#6'l'
-  +'aName'#10'Font.Color'#4'))'#156#0#9'Font.Name'#6#28'courier 10 pitch [bitst'
+  +'ize'#4'Left'#2'x'#6'Height'#2#18#3'Top'#2'P'#5'Width'#2'+'#7'Caption'#6#6'l'
+  +'aSize'#10'Font.Color'#4'))'#156#0#9'Font.Name'#6#28'courier 10 pitch [bitst'
   +'ream]'#11'ParentColor'#8#10'ParentFont'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2
   +#11#6'Height'#2#13#3'Top'#2'p'#5'Width'#2'@'#7'Caption'#6#13'Default Value'
   +#11'ParentColor'#8#0#0#6'TLabel'#9'laDefault'#4'Left'#2'x'#6'Height'#2#18#3
-  +'Top'#2'p'#5'Width'#2'6'#7'Caption'#6#6'laName'#10'Font.Color'#4'))'#156#0#9
+  +'Top'#2'p'#5'Width'#2'='#7'Caption'#6#9'laDefault'#10'Font.Color'#4'))'#156#0
+  +#9'Font.Name'#6#28'courier 10 pitch [bitstream]'#11'ParentColor'#8#10'Parent'
+  +'Font'#8#0#0#5'TEdit'#6'edName'#4'Left'#2'x'#6'Height'#2#13#3'Top'#2#16#5'Wi'
+  +'dth'#3'2'#1#10'AutoSelect'#8#11'BorderStyle'#7#6'bsNone'#10'Font.Color'#7#6
+  +'clNavy'#10'ParentFont'#8#8'ReadOnly'#9#8'TabOrder'#2#0#4'Text'#6#9'edGenNam'
+  +'e'#0#0#7'TBitBtn'#7'bbClose'#4'Left'#3'N'#2#6'Height'#2#24#3'Top'#2#0#5'Wid'
+  +'th'#2#27#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#4' X  '#5'Color'#4
+  +#219#242#247#0#10'Font.Style'#11#6'fsBold'#0#7'OnClick'#7#12'bbCloseClick'#10
+  +'ParentFont'#8#8'TabOrder'#2#1#0#0#6'TLabel'#6'Label6'#4'Left'#2#11#6'Height'
+  +#2#13#3'Top'#3#140#0#5'Width'#2'P'#7'Caption'#6#16'Check constraint'#11'Pare'
+  +'ntColor'#8#0#0#6'TLabel'#17'laCheckConstraint'#4'Left'#2'x'#6'Height'#2#18#3
+  +'Top'#3#140#0#5'Width'#3#128#0#7'Caption'#6#17'laCheckConstraint'#10'Font.Co'
+  +'lor'#4'))'#156#0#9'Font.Name'#6#28'courier 10 pitch [bitstream]'#11'ParentC'
+  +'olor'#8#10'ParentFont'#8#0#0#6'TLabel'#6'Label7'#4'Left'#2#11#6'Height'#2#13
+  +#3'Top'#3#176#0#5'Width'#2'B'#7'Caption'#6#13'Character set'#11'ParentColor'
+  +#8#0#0#6'TLabel'#14'laCharacterSet'#4'Left'#2'x'#6'Height'#2#18#3'Top'#3#176
+  +#0#5'Width'#2'i'#7'Caption'#6#14'laCharacterSet'#10'Font.Color'#4'))'#156#0#9
   +'Font.Name'#6#28'courier 10 pitch [bitstream]'#11'ParentColor'#8#10'ParentFo'
-  +'nt'#8#0#0#5'TEdit'#6'edName'#4'Left'#2'x'#6'Height'#2#13#3'Top'#2#16#5'Widt'
-  +'h'#3'2'#1#10'AutoSelect'#8#11'BorderStyle'#7#6'bsNone'#10'Font.Color'#7#6'c'
-  +'lNavy'#10'ParentFont'#8#8'ReadOnly'#9#8'TabOrder'#2#0#4'Text'#6#9'edGenName'
-  +#0#0#7'TBitBtn'#7'bbClose'#4'Left'#3'N'#2#6'Height'#2#24#3'Top'#2#0#5'Width'
-  +#2#27#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#4' X  '#5'Color'#4#219
-  +#242#247#0#10'Font.Style'#11#6'fsBold'#0#7'OnClick'#7#12'bbCloseClick'#10'Pa'
-  +'rentFont'#8#8'TabOrder'#2#1#0#0#0
+  +'nt'#8#0#0#6'TLabel'#11'laCollation'#4'Left'#2'x'#6'Height'#2#18#3'Top'#3#216
+  +#0#5'Width'#2'I'#7'Caption'#6#11'laCollation'#10'Font.Color'#4'))'#156#0#9'F'
+  +'ont.Name'#6#28'courier 10 pitch [bitstream]'#11'ParentColor'#8#10'ParentFon'
+  +'t'#8#0#0#6'TLabel'#6'Label8'#4'Left'#2#11#6'Height'#2#13#3'Top'#3#216#0#5'W'
+  +'idth'#2')'#7'Caption'#6#9'Collation'#11'ParentColor'#8#0#0#0
 ]);

+ 6 - 0
viewdomain.pas

@@ -19,7 +19,13 @@ type
     Label3: TLabel;
     Label4: TLabel;
     Label5: TLabel;
+    Label6: TLabel;
+    Label7: TLabel;
+    Label8: TLabel;
     laDefault: TLabel;
+    laCheckConstraint: TLabel;
+    laCharacterSet: TLabel;
+    laCollation: TLabel;
     laType: TLabel;
     laSize: TLabel;
     procedure bbCloseClick(Sender: TObject);