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

📄 eerplacemodel.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 3 页
字号:

  ModalResult:=mrOK;
end;

procedure TEERPlaceModelForm.AddLinkModel(Link: Boolean);
var theList: TList;
  i, j, Obj_id: integer;
  theLinkedModel: TEERLinkedModel;
  theObj: TEERObj;
  xoff, yoff: integer;
  theSrcTable, theDestTable: TEERTable;
begin
  if(Model2Place<>nil)then
  begin
    theList:=TList.Create;
    try
      xoff:=10000;
      yoff:=10000;

      for i:=0 to Model2Place.ComponentCount-1 do
        if(Model2Place.Components[i].ClassParent=TEERObj)then
          if(TEERObj(Model2Place.Components[i]).Selected)then
          begin
            theList.Add(Model2Place.Components[i]);

            if(xoff>TEERObj(Model2Place.Components[i]).Obj_X)then
              xoff:=TEERObj(Model2Place.Components[i]).Obj_X;
            if(yoff>TEERObj(Model2Place.Components[i]).Obj_Y)then
              yoff:=TEERObj(Model2Place.Components[i]).Obj_Y;
          end;

      if(theList.Count>0)then
      begin
        theLinkedModel:=nil;
        try
          if(Link)then
          begin
            //--------------------------------------------------
            //Create new TEERLinkedModel
            theLinkedModel:=TEERLinkedModel.Create(EERModel);

            theLinkedModel.ModelName:=Model2Place.GetModelName;
            theLinkedModel.IDModel:=Model2Place.IDModel;
            theLinkedModel.IsStoredInDB:=IsStoredInDB;
            if(IsStoredInDB)then
            begin
              theLinkedModel.DriverName:=DMDB.CurrentDBConn.DriverName;
              theLinkedModel.DBConnName:=DMDB.CurrentDBConn.Name;
              theLinkedModel.HostCaption:=DMDB.CurrentDBConn.Params.Values['HostCaption'];
              theLinkedModel.HostName:=DMDB.CurrentDBConn.Params.Values['HostName'];
              theLinkedModel.Database:=DMDB.CurrentDBConn.Params.Values['Database'];
              theLinkedModel.User:=DMDB.CurrentDBConn.Params.Values['User_Name'];
            end
            else
            begin
              theLinkedModel.ModelFilename:=
                ExtractRelativePath(ExtractFilePath(Application.ExeName),
                  Model2Place.ModelFilename);

              //To expand the RelativePath
              //fname:=ExpandFileName(theLinkedModel.ModelFilename)
            end;

            EERModel.LinkedModels.Add(theLinkedModel);
          end;

          //--------------------------------------------------
          //Check and add Datatypes

          //--------------------------------------------------
          //Add the Objects except Relations
          for i:=0 to theList.Count-1 do
          begin
            if(TEERObj(theList[i]).ClassNameIs('TEERRegion'))then
            begin
              theObj:=EERModel.NewRegion(0, 0,
                TEERRegion(theList[i]).Obj_W,
                TEERRegion(theList[i]).Obj_H,
                False);

              Obj_id:=theObj.Obj_id;
              TEERRegion(theObj).Assign(TEERRegion(theList[i]));
              theObj.ParentEERModel:=EERModel;
              theObj.Parent:=EERModel;
              theObj.Obj_id:=Obj_id;
              theObj.Obj_X:=TEERRegion(theList[i]).Obj_X+PlacePos.X-xoff;
              theObj.Obj_Y:=TEERRegion(theList[i]).Obj_Y+PlacePos.Y-yoff;
              if(Link)then
              begin
                theObj.IsLinkedObject:=True;
                theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
                theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
              end;

              theObj.RefreshObj;
            end
            else if(TEERObj(theList[i]).ClassNameIs('TEERImage'))then
            begin
              theObj:=EERModel.NewImage(0, 0,
                TEERImage(theList[i]).Obj_W,
                TEERImage(theList[i]).Obj_H,
                False);

              Obj_id:=theObj.Obj_id;
              TEERImage(theObj).Assign(TEERImage(theList[i]));
              theObj.ParentEERModel:=EERModel;
              theObj.Parent:=EERModel;
              theObj.Obj_id:=Obj_id;
              theObj.Obj_X:=TEERImage(theList[i]).Obj_X+PlacePos.X-xoff;
              theObj.Obj_Y:=TEERImage(theList[i]).Obj_Y+PlacePos.Y-yoff;
              if(Link)then
              begin
                theObj.IsLinkedObject:=True;
                theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
                theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
              end;

              theObj.RefreshObj;
            end
            else if(TEERObj(theList[i]).ClassNameIs('TEERNote'))then
            begin
              theObj:=EERModel.NewNote(0, 0,
                False);

              Obj_id:=theObj.Obj_id;
              TEERNote(theObj).Assign(TEERNote(theList[i]));
              theObj.ParentEERModel:=EERModel;
              theObj.Parent:=EERModel;
              theObj.Obj_id:=Obj_id;
              theObj.Obj_X:=TEERNote(theList[i]).Obj_X+PlacePos.X-xoff;
              theObj.Obj_Y:=TEERNote(theList[i]).Obj_Y+PlacePos.Y-yoff;
              if(Link)then
              begin
                theObj.IsLinkedObject:=True;
                theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
                theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
              end;

              theObj.RefreshObj;
            end
            else if(TEERObj(theList[i]).ClassNameIs('TEERTable'))then
            begin
              theObj:=EERModel.NewTable(0, 0,
                False);

              Obj_id:=theObj.Obj_id;
              TEERTable(theObj).Assign(TEERTable(theList[i]));
              theObj.ParentEERModel:=EERModel;
              theObj.Parent:=EERModel;
              theObj.Obj_id:=Obj_id;
              theObj.Obj_X:=TEERTable(theList[i]).Obj_X+PlacePos.X-xoff;
              theObj.Obj_Y:=TEERTable(theList[i]).Obj_Y+PlacePos.Y-yoff;
              if(Link)then
              begin
                theObj.IsLinkedObject:=True;
                theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
                //theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
              end;
              // Add LinkedID either way to enable reestabling relations
              theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;

              TEERTable(theObj).RelStart.Clear;
              TEERTable(theObj).RelEnd.Clear;
              for j:=1 to 4 do
                TEERTable(theObj).Rel[j].Clear;

              theObj.RefreshObj;
            end;
          end;

          //--------------------------------------------------
          //Add Relations
          for i:=0 to theList.Count-1 do
          begin
            if(TEERObj(theList[i]).ClassNameIs('TEERRel'))then
            begin
              theSrcTable:=EERModel.GetEERObjectByLinkedID(
                TEERRel(theList[i]).SrcTbl.Obj_id);
              theDestTable:=EERModel.GetEERObjectByLinkedID(
                TEERRel(theList[i]).DestTbl.Obj_id);

              //Only add Relation if source and dest table are in the model
              if(theSrcTable<>nil)and(theDestTable<>nil)then
              begin
                theObj:=EERModel.NewRelation(TEERRel(theList[i]).RelKind,
                  theSrcTable, theDestTable, False);

                Obj_id:=theObj.Obj_id;
                TEERRel(theObj).Assign(TEERRel(theList[i]));
                theObj.ParentEERModel:=EERModel;
                theObj.Parent:=EERModel;
                theObj.Obj_id:=Obj_id;
                theObj.Obj_X:=TEERNote(theList[i]).Obj_X+PlacePos.X-xoff;
                theObj.Obj_Y:=TEERNote(theList[i]).Obj_Y+PlacePos.Y-yoff;
                TEERRel(theObj).SrcTbl:=theSrcTable;
                TEERRel(theObj).DestTbl:=theDestTable;
                if(Link)then
                begin
                  theObj.IsLinkedObject:=True;
                  theObj.IDLinkedModel:=theLinkedModel.IDLinkedModel;
                  theObj.Obj_id_Linked:=TEERObj(theList[i]).Obj_id;
                end;

                theObj.RefreshObj;
              end;
            end;
          end;

          //If the model is not linked, remove temporary Obj_id_Linked from
          //tables which were used while adding relations
          if(Not(Link))then
            for i:=0 to theList.Count-1 do
               TEERObj(theList[i]).Obj_id_Linked:=0;

          EERModel.ModelHasChanged;

          EERModel.Refresh;
        except
          if(Link)then
            theLinkedModel.Free;
        end;
      end
      else
        MessageDlg(DMMain.GetTranslatedMessage('You have to select at least one Object.', 243),
          mtInformation, [mbOK], 0);
    finally
      theList.Free;
    end;
  end;
end;

procedure TEERPlaceModelForm.DisplayLinkedModels(EERModel: TEERModel);
var i, j: integer;
  theLMNode, theTreeNode: TTreeNode;
begin
  self.EERModel:=EERModel;

  Caption:='Linked Models';

  Menu:=nil;
  LMPnl.Visible:=True;

  Width:=LMPnl.Width;
  Height:=LMPnl.Height;

  DriverNameCBox.Items.Text:=DMDB.DatabaseTypes.Text;

  for i:=0 to EERModel.LinkedModels.Count-1 do
  begin
    theLMNode:=LMTreeView.Items.Add(nil,
      TEERLinkedModel(EERModel.LinkedModels[i]).ModelName);
    theLMNode.Data:=EERModel.LinkedModels[i];
    theLMNode.ImageIndex:=0;

    for j:=0 to EERModel.ComponentCount-1 do
      if(EERModel.Components[j].ClassParent=TEERObj)then
        if(TEERObj(EERModel.Components[j]).IsLinkedObject)and
          (TEERObj(EERModel.Components[j]).IDLinkedModel=
            TEERLinkedModel(EERModel.LinkedModels[i]).IDLinkedModel)then
        begin
          theTreeNode:=LMTreeView.Items.AddChild(theLMNode,
            TEERObj(EERModel.Components[j]).ObjName);
          theTreeNode.Data:=EERModel.Components[j];

          if(EERModel.Components[j] is TEERRegion)then
            theTreeNode.ImageIndex:=1
          else if(EERModel.Components[j] is TEERTable)then
            theTreeNode.ImageIndex:=2
          else if(EERModel.Components[j] is TEERRel)then
            theTreeNode.ImageIndex:=3
          else if(EERModel.Components[j] is TEERStoredProc)then
            theTreeNode.ImageIndex:=4
          else if(EERModel.Components[j] is TEERNote)then
            theTreeNode.ImageIndex:=5
          else if(EERModel.Components[j] is TEERImage)then
            theTreeNode.ImageIndex:=6;
        end;

  end;

  if(EERModel.LinkedModels.Count>0)then
    LMTreeView.Selected:=LMTreeView.Items[0];

  RefreshLinkedModelSettings;
end;

procedure TEERPlaceModelForm.RefreshLinkedModelSettings;
begin
  if(LMTreeView.Selected<>nil)then
    if(LMTreeView.Selected.Data<>nil)then
    begin
      if(TObject(LMTreeView.Selected.Data) is TEERLinkedModel)then
      begin
        if(Not(TEERLinkedModel(LMTreeView.Selected.Data).IsStoredInDB))then
        begin
          LinkedFromFileRBtn.Enabled:=True;
          LinkedFromDBRBtn.Enabled:=True;
          LinkedFromFileRBtn.Checked:=True;

          FilenameEd.Enabled:=True;
          FilenameEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).ModelFilename;

          DBConnEd.Enabled:=False;
          DBConnEd.Text:='';
          DriverNameCBox.Enabled:=False;
          DriverNameCBox.ItemIndex:=-1;
          HostEd.Enabled:=False;
          HostEd.Text:='';
          IPEd.Enabled:=False;
          IPEd.Text:='';
          DBEd.Enabled:=False;
          DBEd.Text:='';
          ModelIDEd.Enabled:=False;
          ModelIDEd.Text:='';
          UserEd.Enabled:=False;
          UserEd.Text:='';
        end
        else
        begin
          LinkedFromFileRBtn.Enabled:=True;
          LinkedFromDBRBtn.Enabled:=True;
          LinkedFromDBRBtn.Checked:=True;

          FilenameEd.Enabled:=False;
          FilenameEd.Text:='';

          DBConnEd.Enabled:=True;
          DBConnEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).DBConnName;
          DriverNameCBox.Enabled:=True;
          DriverNameCBox.ItemIndex:=DriverNameCBox.Items.IndexOf(TEERLinkedModel(LMTreeView.Selected.Data).DriverName);
          HostEd.Enabled:=True;
          HostEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).HostCaption;
          IPEd.Enabled:=True;
          IPEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).HostName;
          DBEd.Enabled:=True;
          DBEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).Database;
          ModelIDEd.Enabled:=True;
          ModelIDEd.Text:=IntToStr(TEERLinkedModel(LMTreeView.Selected.Data).IDModel);
          UserEd.Enabled:=True;
          UserEd.Text:=TEERLinkedModel(LMTreeView.Selected.Data).User;
        end;
      end
      else
      begin
        LinkedFromFileRBtn.Enabled:=False;
        LinkedFromDBRBtn.Enabled:=False;

        FilenameEd.Enabled:=False;
        FilenameEd.Text:='';

        DBConnEd.Enabled:=False;
        DBConnEd.Text:='';
        DriverNameCBox.Enabled:=False;
        DriverNameCBox.ItemIndex:=-1;
        HostEd.Enabled:=False;
        HostEd.Text:='';
        IPEd.Enabled:=False;
        IPEd.Text:='';
        DBEd.Enabled:=False;
        DBEd.Text:='';
        ModelIDEd.Enabled:=False;
        ModelIDEd.Text:='';
        UserEd.Enabled:=False;
        UserEd.Text:='';
      end;
    end;
end;

procedure TEERPlaceModelForm.ApplyLinkedModelSettings;
begin
  if(LMTreeView.Selected<>nil)then
    if(LMTreeView.Selected.Data<>nil)then

⌨️ 快捷键说明

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