📄 editortable.pas
字号:
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 + -