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

📄 eerreverseengineering.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      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 + -