📄 eerreverseengineering.pas
字号:
if(CompareText(DMDB.CurrentDBConn.DriverName, 'MySQL')=0)then
RevEngTypeCBox.ItemIndex:=1 //MySQL funcs
else if(CompareText(DMDB.CurrentDBConn.DriverName, 'Oracle')=0)then
begin
//CheckORCLFuncCBox:=True;
RevEngTypeCBox.ItemIndex:=2; //Oracle funcs
SubstCBox.ItemIndex:=1;
ImportSchemaCBox.Enabled:=True;
BuildRelationsCBox.Visible:=False; //CLX Bug workaround
BuildRelationsCBox.Checked:=True;
BuildRelationsCBox.Visible:=True; //CLX Bug workaround
UseNativeRelationsRBtn.Visible:=False; //CLX Bug workaround
UseNativeRelationsRBtn.Enabled:=True;
UseNativeRelationsRBtn.Checked:=True;
UseNativeRelationsRBtn.Visible:=True; //CLX Bug workaround
end
else if(CompareText(DMDB.CurrentDBConn.DriverName, 'SQLite')=0)then
begin
RevEngTypeCBox.ItemIndex:=3; //SQLite funcs
SubstCBox.ItemIndex:=3;
end
else if(CompareText(DMDB.CurrentDBConn.DriverName, 'MSSQL')=0)then
begin
RevEngTypeCBox.ItemIndex:=4; //MSSQL funcs
SubstCBox.ItemIndex:=4;
BuildRelationsCBox.Visible:=False; //CLX Bug workaround
BuildRelationsCBox.Checked:=True;
BuildRelationsCBox.Visible:=True; //CLX Bug workaround
UseNativeRelationsRBtn.Visible:=False; //CLX Bug workaround
UseNativeRelationsRBtn.Enabled:=True;
UseNativeRelationsRBtn.Checked:=True;
UseNativeRelationsRBtn.Visible:=True; //CLX Bug workaround
end
else
begin
RevEngTypeCBox.ItemIndex:=0;
SubstCBox.ItemIndex:=2;
end;
break;
end
else
break;
end;
end;
procedure TEERReverseEngineeringForm.SubmitBtnClick(Sender: TObject);
var theTables: TStringList;
theSubst: TStringList;
i: integer;
xcount: integer;
begin
//Turn off the models FK settings
EERModel.CreateFKRefDefIndex:=False;
EERModel.TableNameInRefs:=False;
EERModel.FKPrefix:='';
EERModel.FKPostfix:='';
theTables:=TStringList.Create;
theSubst:=TStringList.Create;
try
for i:=0 to TablesLBox.Items.Count-1 do
if(TablesLBox.State[i]=cbChecked)then
theTables.Add(TablesLBox.Items[i]);
try
xcount:=StrToInt(TblCountEd.Text);
except
xcount:=5;
end;
if(UseSubstCBox.Checked)then
theSubst.Text:=SubstMemo.Lines.Text
else
theSubst:=nil;
//Limit StdIns Records
i:=0;
if(LimitStdInsCBox.Checked)then
begin
try
i:=StrToInt(LimitStdInsEd.Text);
except
i:=20;
end;
end;
//Do the reverse engineering
case RevEngTypeCBox.ItemIndex of
0:
DMDBEER.EERReverseEngineer(EERModel, DMDB.CurrentDBConn, theTables, xcount, BuildRelationsCBox.Checked, BuildRelPrimKeyRBtn.Checked, theSubst, StatusLbl, CreateStdInsertsCBox.Checked, i);
1:
DMDBEER.EERMySQLReverseEngineer(EERModel, DMDB.CurrentDBConn, theTables, xcount, BuildRelationsCBox.Checked, BuildRelPrimKeyRBtn.Checked, theSubst, StatusLbl, CreateStdInsertsCBox.Checked, i);
2:
DMDBEER.EERORCLReverseEngineer(EERModel, DMDB.CurrentDBConn, theTables, xcount, BuildRelationsCBox.Checked, BuildRelPrimKeyRBtn.Checked, theSubst, StatusLbl, CreateStdInsertsCBox.Checked, i,
ImportSchemaCBox.Checked, PutDefValsInQuotesCBox.Checked);
3:
DMDBEER.EERSQLiteReverseEngineer(EERModel, DMDB.CurrentDBConn, theTables, xcount, BuildRelationsCBox.Checked, BuildRelPrimKeyRBtn.Checked, theSubst, StatusLbl, CreateStdInsertsCBox.Checked, i);
4:
DMDBEER.EERMSSQLReverseEngineer(EERModel, DMDB.CurrentDBConn, theTables, xcount, BuildRelationsCBox.Checked, BuildRelPrimKeyRBtn.Checked, theSubst, StatusLbl, CreateStdInsertsCBox.Checked, i, CollapseTablesCBox.Checked);
end;
finally
theTables.Free;
theSubst.Free;
end;
EERModel.ModelHasChanged;
DMEER.RefreshPalettes;
ModalResult:=mrOK;
end;
function TEERReverseEngineeringForm.SetData(theModel: TEERModel): Boolean;
begin
EERModel:=theModel;
GetSubstNames;
GetDBConnSBtnClick(self);
//When not connected, close
SetData:=(DMDB.CurrentDBConn<>nil);
CreateStdInsertsCBoxClick(self);
BuildRelationsCBoxClick(self);
UseSubstCBoxClick(self);
end;
procedure TEERReverseEngineeringForm.SelAllTablesSBtnClick(
Sender: TObject);
var i: integer;
begin
for i:=0 to TablesLBox.Items.Count-1 do
TablesLBox.State[i]:=cbChecked;
end;
procedure TEERReverseEngineeringForm.DeselectAllTablesSBtnClick(Sender: TObject);
var i: integer;
begin
for i:=0 to TablesLBox.Items.Count-1 do
TablesLBox.State[i]:=cbUnChecked;
end;
procedure TEERReverseEngineeringForm.CancelBtnClick(Sender: TObject);
begin
ModalResult:=mrAbort;
end;
procedure TEERReverseEngineeringForm.FormKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if((Key=Key_Return)or(Key=Key_Enter))and
(ActiveControl<>SubstMemo)then
SubmitBtnClick(self);
if(Key=Key_F1)then
DMMain.ShowHelp('db', 'reveng');
end;
procedure TEERReverseEngineeringForm.GetSubstNames;
var theIniFile: TMemIniFile;
theStringList: TStringList;
i: integer;
begin
SubstCBox.Items.Clear;
theIniFile:=TMemIniFile.Create(DMMain.SettingsPath+DMMain.ProgName+'_DatabaseInfo.ini');
try
theStringList:=TStringList.Create;
try
theIniFile.ReadSectionValues(EERModel.DatabaseType+'_DatatypeSubst', theStringList);
for i:=0 to theStringList.Count-1 do
SubstCBox.Items.Add(theStringList.ValueFromIndex[i]);
finally
theStringList.Free;
end;
finally
theIniFile.Free;
end;
end;
procedure TEERReverseEngineeringForm.SubstCBoxCloseUp(Sender: TObject);
var theIniFile: TMemIniFile;
s: string;
begin
theIniFile:=TMemIniFile.Create(DMMain.SettingsPath+DMMain.ProgName+'_DatabaseInfo.ini');
try
s:=Copy(SubstCBox.Items[SubstCBox.ItemIndex], 1, Pos(' ', SubstCBox.Items[SubstCBox.ItemIndex])-1)+
'_'+EERModel.DatabaseType+'_DatatypeSubst';
theIniFile.ReadSectionValues(s, SubstMemo.Lines);
finally
theIniFile.Free;
end;
end;
procedure TEERReverseEngineeringForm.UseSubstCBoxClick(Sender: TObject);
begin
SubstCBox.Enabled:=UseSubstCBox.Checked;
SubstMemo.Enabled:=UseSubstCBox.Checked;
end;
procedure TEERReverseEngineeringForm.SchemaCBoxCloseUp(Sender: TObject);
var i: integer;
begin
TablesLBox.Items.Assign(AllTables);
if(SchemaCBox.ItemIndex>0)then
begin
i:=0;
while(i<TablesLBox.Items.Count)do
begin
if(SchemaCBox.Items[SchemaCBox.ItemIndex]<>Copy(TablesLBox.Items[i], 1, Pos('.', TablesLBox.Items[i])-1))then
TablesLBox.Items.Delete(i)
else
inc(i);
end;
end;
SelAllTablesSBtnClick(self);
end;
procedure TEERReverseEngineeringForm.CreateStdInsertsCBoxClick(
Sender: TObject);
begin
LimitStdInsCBox.Enabled:=CreateStdInsertsCBox.Checked;
LimitStdInsEd.Enabled:=CreateStdInsertsCBox.Checked;
end;
procedure TEERReverseEngineeringForm.BuildRelationsCBoxClick(
Sender: TObject);
begin
RevEngTypeCBoxCloseUp(self);
end;
procedure TEERReverseEngineeringForm.RevEngTypeCBoxCloseUp(
Sender: TObject);
begin
//Native Relations only work for Oracle and MSSQL
UseNativeRelationsRBtn.Enabled:=
((Pos('Oracle', RevEngTypeCBox.Items[RevEngTypeCBox.ItemIndex])>0)or
(Pos('MSSQL', RevEngTypeCBox.Items[RevEngTypeCBox.ItemIndex])>0))and
BuildRelationsCBox.Checked;
BuildRelPrimKeyRBtn.Enabled:=(Not((Pos('Oracle', RevEngTypeCBox.Items[RevEngTypeCBox.ItemIndex])>0)or
(Pos('MSSQL', RevEngTypeCBox.Items[RevEngTypeCBox.ItemIndex])>0)))and
BuildRelationsCBox.Checked;
BuildRelTblNamesRBtn.Enabled:=BuildRelPrimKeyRBtn.Enabled;
//Deselect UseNativeRelationsRBtn when it's not enabled
if(Not(UseNativeRelationsRBtn.Enabled))and
(UseNativeRelationsRBtn.Checked)then
BuildRelPrimKeyRBtn.Checked:=True;
if(UseNativeRelationsRBtn.Enabled)and(Not(UseNativeRelationsRBtn.Checked))then
UseNativeRelationsRBtn.Checked:=True;
//ImportSchema only works with oracle
ImportSchemaCBox.Enabled:=(Pos('Oracle', RevEngTypeCBox.Items[RevEngTypeCBox.ItemIndex])>0);
//PutDefValsInQuotesCBox only works with oracle
PutDefValsInQuotesCBox.Enabled:=(Pos('Oracle', RevEngTypeCBox.Items[RevEngTypeCBox.ItemIndex])>0);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -