⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editortable.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  if(EERTable.Indices.Count>0)then
    ShowIndex(TEERIndex(EERTable.Indices[0]).obj_id);

  TablePrefixComboBox.ItemIndex:=EERTable.TablePrefix;
  TableTypeCBox.ItemIndex:=EERTable.TableType;

  nmTableCBox.Checked:=EERTable.GetnmTableStatus;

  TemporaryCBox.Checked:=EERTable.Temporary;

  StdInsertMemo.Text:=EERTable.StandardInserts.Text;

  //---------------------------------------------
  //TableOptions
  NextAutoIncEd.Text:=EERTable.TableOptions.Values['NextAutoIncVal'];
  TblPasswordEd.Text:=EERTable.TableOptions.Values['TblPassword'];
  DelayKeyTblUpdatesCBox.Checked:=(EERTable.TableOptions.Values['DelayKeyTblUpdates']='1');
  PackKeysCBox.Checked:=(EERTable.TableOptions.Values['PackKeys']='1');
  //  RowSettings
  AverageRowLengthEd.Text:=EERTable.TableOptions.Values['AverageRowLength'];
  RowChecksumCBox.Checked:=(EERTable.TableOptions.Values['RowChecksum']='1');
  MinRowNumberEd.Text:=EERTable.TableOptions.Values['MinRowNumber'];
  MaxRowNumberEd.Text:=EERTable.TableOptions.Values['MaxRowNumber'];
  if(EERTable.TableOptions.Values['RowFormat']<>'')then
    RowFormatLU.ItemIndex:=StrToInt(EERTable.TableOptions.Values['RowFormat']);

  TblDataDirEd.Text:=EERTable.TableOptions.Values['TblDataDir'];
  TblIndexDirEd.Text:=EERTable.TableOptions.Values['TblIndexDir'];
  //  Raid
  UseRaidCBox.Checked:=(EERTable.TableOptions.Values['UseRaid']='1');
  if(EERTable.TableOptions.Values['RaidType']<>'')then
    RaidTypeLU.ItemIndex:=StrToInt(EERTable.TableOptions.Values['RaidType']);

  ChunksEd.Text:=EERTable.TableOptions.Values['Chunks'];
  ChunkSizeEd.Text:=EERTable.TableOptions.Values['ChunkSize'];


  //---------------------------------------------
  //Comments
  CommentsMemo.Text:=EERTable.Comments;


  //Store previous tablename
  if(EERTable.PrevTableName='')then
    EERTable.PrevTableName:=EERTable.ObjName;


  //Store previous colname for DB-Sync
  for i:=0 to EERTable.Columns.Count-1 do
    if(TEERColumn(EERTable.Columns[i]).PrevColName='')then
      TEERColumn(EERTable.Columns[i]).PrevColName:=TEERColumn(EERTable.Columns[i]).ColName;

  if(EERModel.ReadOnly)or
    (EERTable.IsLinkedObject)then
  begin
    SubmitBtn.Visible:=False;
  end;
end;

procedure TEditorTableForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if(Not(DiscardChanges))and
    (Not(EERModel.ReadOnly))and
    (Not(EERTable.IsLinkedObject))then
    ApplyChanges;

  EERModel.LastTableEditorPage:=PageControlTreeView.Selected.AbsoluteIndex;
  DMEER.TableSplitterPos:=OptionsPnl.Height;

  Screen.Cursor:=crDefault;

  Action:=caFree;

  Application.MainForm.SetFocus;
end;

procedure TEditorTableForm.ApplyChanges;
var i, j: integer;
  s: string;
  doLogAction,
  UpdateFKColumnNames: Boolean;
  originalTableName: string;
  theTbl: TEERTable;
  theRel: TEERRel;
begin
  if(DoCellEdit)then
  begin
    if(EditorTableFieldEdit.Visible)then
      TEditorTableFieldEdit(EditorTableFieldEdit).ApplyChanges(-1);
    if(EditorTableFieldDatatypeInplaceEditor.Visible)then
      EditorTableFieldDatatypeInplaceEditor.ApplyChanges(-1);
  end;

  EERTable.PrimaryColumnsFirst;

  //Update Table Name
  if(ActiveControl=TableNameEd)then
    TableNameEdExit(self)
  else
    EERTable.ObjName:=TableNameEd.Text;

  EERTable.TableType:=TableTypeCBox.ItemIndex;
  EERTable.TablePrefix:=TablePrefixComboBox.ItemIndex;

  EERTable.SetnmTableStatus(nmTableCBox.Checked);

  EERTable.Temporary:=TemporaryCBox.Checked;

  //Remove returns from the end of the stdinserts
  s:=StdInsertMemo.Text;
  while(Copy(s, Length(s), 1)=#10)or(Copy(s, Length(s), 1)=#13)do
    s:=Copy(s, 1, Length(s)-1);

  EERTable.StandardInserts.Text:=s+#13#10;


  //---------------------------------------------
  //TableOptions
  try
    if(NextAutoIncEd.Text<>'')then
      EERTable.TableOptions.Values['NextAutoIncVal']:=IntToStr(StrToIntDef(NextAutoIncEd.Text, 0))
    else
      EERTable.TableOptions.Values['NextAutoIncVal']:='';
  except
  end;
  EERTable.TableOptions.Values['TblPassword']:=TblPasswordEd.Text;
  EERTable.TableOptions.Values['DelayKeyTblUpdates']:=IntToStr(Ord(DelayKeyTblUpdatesCBox.Checked));
  EERTable.TableOptions.Values['PackKeys']:=IntToStr(Ord(PackKeysCBox.Checked));

  //  RowSettings
  try
    if(AverageRowLengthEd.Text<>'')then
      EERTable.TableOptions.Values['AverageRowLength']:=IntToStr(StrToIntDef(AverageRowLengthEd.Text, 0))
    else
      EERTable.TableOptions.Values['AverageRowLength']:='';
  except
  end;
  EERTable.TableOptions.Values['RowChecksum']:=IntToStr(Ord(RowChecksumCBox.Checked));
  try
    if(MinRowNumberEd.Text<>'')then
      EERTable.TableOptions.Values['MinRowNumber']:=IntToStr(StrToIntDef(MinRowNumberEd.Text, 0))
    else
      EERTable.TableOptions.Values['MinRowNumber']:='';
  except
  end;
  try
    if(MaxRowNumberEd.Text<>'')then
      EERTable.TableOptions.Values['MaxRowNumber']:=IntToStr(StrToIntDef(MaxRowNumberEd.Text, 0))
    else
      EERTable.TableOptions.Values['MaxRowNumber']:='';
  except
  end;

  EERTable.TableOptions.Values['RowFormat']:=IntToStr(RowFormatLU.ItemIndex);

  EERTable.TableOptions.Values['TblDataDir']:=TblDataDirEd.Text;
  EERTable.TableOptions.Values['TblIndexDir']:=TblIndexDirEd.Text;
  //  Raid
  EERTable.TableOptions.Values['UseRaid']:=IntToStr(Ord(UseRaidCBox.Checked));
  EERTable.TableOptions.Values['RaidType']:=IntToStr(RaidTypeLU.ItemIndex);

  try
    if(ChunksEd.Text<>'')then
      EERTable.TableOptions.Values['Chunks']:=IntToStr(StrToIntDef(ChunksEd.Text, 0))
    else
      EERTable.TableOptions.Values['Chunks']:='';
  except
    EERTable.TableOptions.Values['Chunks']:='2';
  end;

  try
    if(ChunkSizeEd.Text<>'')then
      EERTable.TableOptions.Values['ChunkSize']:=IntToStr(StrToIntDef(ChunkSizeEd.Text, 0))
    else
      EERTable.TableOptions.Values['ChunkSize']:='';
  except
    EERTable.TableOptions.Values['ChunkSize']:='64';
  end;


  EERTable.Comments:=CommentsMemo.Text;

  //Store previous tablename for DB-Sync only after change
  if(EERTable.PrevTableName=EERTable.ObjName)then
  begin
    EERTable.PrevTableName:='';
    UpdateFKColumnNames:=False;
  end
  else
  begin
    UpdateFKColumnNames:=True;
    originalTableName:=SourceEERTable.ObjName;
  end;

  //Store previous colname for DB-Sync only after change
  for i:=0 to EERTable.Columns.Count-1 do
    if(TEERColumn(EERTable.Columns[i]).PrevColName=TEERColumn(EERTable.Columns[i]).ColName)then
      TEERColumn(EERTable.Columns[i]).PrevColName:='';



  //-------------------------------------------

  try
    //Get Obj XML for undo
    UndoXML:=SourceEERTable.GetObjAsXMLModel;

    //Log action only when user has changed the object
    if(SourceEERTable.ObjIsEqualTo(EERTable))then
      doLogAction:=False
    else
      doLogAction:=True;

    //Assigned changed table to original source table
    SourceEERTable.Assign(EERTable);
    //EERTable.Parent:=self;


    //-------------------------------------------
    //Do Refresh Stuff

    //Update FK Cols after table rename
    if(UpdateFKColumnNames)then
      for i:=0 to EERModel.ComponentCount-1 do
        if(EERModel.Components[i].ClassNameIs('TEERTable'))then
        begin
          theTbl:=TEERTable(EERModel.Components[i]);

          for j:=0 to theTbl.Columns.Count-1 do
            if(Copy(TEERColumn(theTbl.Columns[j]).ColName, 1, Length(originalTableName))=
              originalTableName)then
            begin
              TEERColumn(theTbl.Columns[j]).ColName:=SourceEERTable.ObjName+
                Copy(TEERColumn(theTbl.Columns[j]).ColName, Length(originalTableName)+1,
                  Length(TEERColumn(theTbl.Columns[j]).ColName));

              theTbl.RefreshObj;
              
              break;
            end;
        end
        else if(EERModel.Components[i].ClassNameIs('TEERRel'))then
        begin
          theRel:=TEERRel(EERModel.Components[i]);

          for j:=0 to theRel.FKFields.Count-1 do
            if(Copy(theRel.FKFields.ValueFromIndex[j], 1, Length(originalTableName))=
              originalTableName)then
            begin
              theRel.FKFields.ValueFromIndex[j]:=SourceEERTable.ObjName+
                Copy(theRel.FKFields.ValueFromIndex[j], Length(originalTableName)+1,
                  Length(theRel.FKFields.ValueFromIndex[j]));
            end;
        end;

    EERModel.CheckAllRelations;

    SourceEERTable.RefreshStrechedImg:=True;

    SourceEERTable.RefreshObj;
    SourceEERTable.Invalidate;

    DMEER.RefreshPalettes;

    //Log the Action
    if(doLogAction)then
      EERModel.LogAction(at_EditObj,
        SourceEERTable.Obj_id,
        'BeforeEdit='+UndoXML+#13#10+
        'AfterEdit='+SourceEERTable.GetObjAsXMLModel+#13#10);
  except
    on x: Exception do
    begin
      s:=DMMain.GetTranslatedMessage('Changes cannot be applied to object.'+#13#10+
        'The object may have been deleted.', 1);
      //Don't display access violation
      if(Copy(x.Message, 1, 10)<>'Access vio')then
        s:=s+#13#10#13#10+x.Message;

      MessageDlg(s, mtError, [mbOK], 0);
    end;
  end;
end;

procedure TEditorTableForm.ColumnGridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var i, xpos: integer;
  theSize: TSize;
  theDatatype: TEERDatatype;
begin
  with ColumnGrid.Canvas do
  begin
    if(ARow>0)then
    begin
      if(gdSelected in State)or(gdFocused in State)then
      begin
        Brush.Color:=$00FFF3E8;
        Pen.Style:=psClear;

        if(gdFocused in State)then
        begin
          Pen.Style:=psSolid;
          Pen.Color:=$00FF8A00;
        end;
      end
      else
      begin
        Pen.Style:=psClear;
        Brush.Color:=clWhite;
      end;

      //Draw Selection
      Brush.Style:=bsSolid;
      Rectangle(Rect.Left, Rect.Top, Rect.Right{-1}, Rect.Bottom-1);

      if(ARow<=EERTable.Columns.Count)then
      begin
        case ACol of
          0:
            //Primary Key or Normal Field Icon
            if(TEERColumn(EERTable.Columns[ARow-1]).PrimaryKey)then
              DatatypesImgList.Draw(ColumnGrid.Canvas,
                Rect.Left+1, Rect.Top+1, 7)
            else if(TEERColumn(EERTable.Columns[ARow-1]).IsForeignKey)then
              DatatypesImgList.Draw(ColumnGrid.Canvas,
                Rect.Left+1, Rect.Top+1, 12)
            else
              DatatypesImgList.Draw(ColumnGrid.Canvas,
                Rect.Left+1, Rect.Top+1, 6);
          1:
            //Column Name
            TextOut(Rect.Left+3, Rect.Top+2, TEERColumn(EERTable.Columns[ARow-1]).ColName);
          2:
            //Datatype Icon
            DatatypesImgList.Draw(ColumnGrid.Canvas,
              Rect.Left+3, Rect.Top+1, EERModel.GetDataTypeGroup(TEERColumn(EERTable.Columns[ARow-1]).idDatatype));
          3:
            //Datatype
            TextOut(Rect.Left+1, Rect.Top+2, EERModel.GetDataTypeName(TEERColumn(EERTable.Columns[ARow-1]).idDatatype)+
              TEERColumn(EERTable.Columns[ARow-1]).DatatypeParams);
          4:
            //Not Null
            if(TEERColumn(EERTable.Columns[ARow-1]).NotNull=True)then
              DatatypesImgList.Draw(ColumnGrid.Canvas,
                Rect.Left+1, Rect.Top+1, 8)
            else
            begin
              Brush.Color:=clWhite;
              FillRect(Rect);
            end;
          5:
            //Auto Inc
            if(TEERColumn(EERTable.Columns[ARow-1]).AutoInc=True)then
              DatatypesImgList.Draw(ColumnGrid.Canvas,
                Rect.Left+1, Rect.Top+1, 8)
            else
            begin
              Brush.Color:=clWhite;
              FillRect(Rect);
            end;
          6:
            //Options
            begin
              xpos:=Rect.Left+3;

              theDatatype:=TEERDatatype(EERModel.GetDataType(TEERColumn(EERTable.Columns[ARow-1]).idDatatype));

              for i:=0 to theDatatype.OptionCount-1 do
              begin
                if(TEERColumn(EERTable.Columns[ARow-1]).OptionSelected[i])then
                  DatatypesImgList.Draw(ColumnGrid.Canvas,
                    xpos, Rect.Top+1, 11)
                else
                  DatatypesImgList.Draw(ColumnGrid.Canvas,
                    xpos, Rect.Top+1, 9);

                TextOut(xpos+16, Rect.Top+2, theDatatype.Options[i]);
                theSize:=TextExtent(theDatatype.Options[i]);

                xpos:=xpos+theSize.cx+16+10;
              end;
            end;
          7:
            //Default value
            TextOut(Rect.Left+3, Rect.Top+2, TEERColumn(EERTable.Columns[ARow-1]).DefaultValue);
          8:
            //Comments
            TextOut(Rect.Left+3, Rect.Top+2, TEERColumn(EERTable.Columns[ARow-1]).Comments);
        end;
      end
      else
        if(ACol=0)then
          DatatypesImgList.Draw(ColumnGrid.Canvas,
            Rect.Left+1, Rect.Top+1, 5);

      //Draw Bottom Line
      Pen.Style:=psSolid;
      Pen.Color:=clGray;
      MoveTo(Rect.Left, Rect.Bottom-1);
      LineTo(Rect.Right-1{$IFDEF LINUX}+1{$ENDIF}, Rect.Bottom-1);
    end
    //Draw Header
    else
    begin
      Brush.Color:=clButton;
      Brush.Style:=bsSolid;
      FillRect(Rect);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -