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

📄 layer.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    if (SW_Table(allTables[i]).GetEERId() = EERId) then

    begin

      FindTable:= SW_Table(allTables[i]);

      break;

    end;

  end;



end;





procedure SW_Model.GetAllTableNames(stringList :TStringList);

var i: Integer;

begin

  assert(stringList <>nil);



  for i:= 0 to self.allTables.Count-1 do

  begin

    stringList.Add(Sw_Table(allTables[i]).name);

  end;



end;





procedure SW_Model.GetAllTables(stringList :TStringList);

var i: Integer;

begin

  assert(stringList <>nil);



  for i:= 0 to self.allTables.Count-1 do

  begin

    stringList.AddObject(Sw_Table(allTables[i]).name, allTables[i]);

  end;



end;



procedure SW_Model.GetAllRegionNames(stringList: TStringList);

begin

  assert(stringList <>nil);

  origModel.GetEERObjectNameList([EERRegion], stringList);

end;



procedure SW_Model.GetAllRegions(stringList : TStringList);

var objList : TList;

    i: Integer;

    region : TEERRegion;

begin

  assert(stringList <>nil);



  objList := TList.Create;

  origModel.GetEERObjectList([EERRegion], objList);



  for i:=0 to objList.Count-1 do

  begin

    region := TEERRegion(objList[i]);

    stringList.AddObject(region.ObjName,SW_Region.Create(region));

  end;



  objList.Free;

end;





function SW_Model.GetDataTypeName(id :Integer) : String;

begin

  GetDataTypeName := origModel.GetDataTypeName(id);

end;



procedure SW_Model.GetAllTablesInRegion(region: SW_Region; stringList :TStringList);

var objList: TList;

    i : Integer;

    table: TEERTable;

begin

  assert(stringList <> nil);



  objList := TList.Create;

  region.origRegion.GetEERObjsInRegion([EERTable],objList);

  for i:=0 to objList.Count-1 do

  begin

    table := TEERTable(objList[i]);

    stringList.AddObject(table.ObjName, SW_Table.Create(table));

  end;



  objList.Free;

end;











constructor SW_Region.Create(region : TEERRegion);

begin

  self.origRegion := region;

end;















procedure SW_Table.SaveToXMLNode(node :IXMLSWF_TableType);

var i: Integer;

    xmlCol : IXMLSWF_ColumnType;

    col : SW_Column;

begin

  node.OrigTable := self.origTable.Obj_id;

  node.Join_ColumnName := Join_ColumnName;

  node.Join_Width := Join_Width;

  node.NM_Width := NM_Width;



  for i:= 0 to self.Columns.Count-1 do

  begin

    xmlCol := node.SWF_Columns.Add;

    col := SW_Column(Columns[i]);

    col.SaveToXMLNode(xmlCol);

  end;

end;



class function SW_Table.LoadFromXMLNode(node :IXMLSWF_TableType) :SW_Table;

var t :SW_Table;

    origTable :TEERTable;

    cols :IXMLSWF_ColumnsType;

    col: IXMLSWF_ColumnType;

    realCol : SW_Column;

    i,j: Integer;

begin

  t := Layer.Model.FindTable(node.OrigTable);

  if (t = nil) then

    raise ETableDoesntExistException.Create('This table is not in the model any longer.');



  origTable := t.origTable;

  t := SW_Table.Create(origTable);

  t.Join_ColumnName := node.Join_ColumnName;

  t.Join_Width := node.Join_Width;

  t.FNM_Width := node.NM_Width;





  cols := node.SWF_Columns;

  for i:= 0 to cols.Count-1 do

  begin

    try

    col := cols[i];

    realCol := SW_Column.LoadFromXMLNode(col, t);



    for j:=0 to t.columns.Count-1 do

    begin

      if (SW_Column(t.columns[j]).origCol.Obj_id = realCol.origCol.Obj_id) then

      begin

        t.Columns.Delete(j);

        break;

      end;

    end;

    t.Columns.Add(realCol);

    except

    on EColumnDoesntExistException do ;

    end;

  end;



  t.relatedTables.Clear;

  t.primaryKey.Clear;

  t.InitPrimaryKey();

  t.InitRelationships();



  LoadFromXMLNode := t;

end;

  {

function SW_Table.SaveToString() :String;

var str,tmpString :String;

    i : Integer;

begin

  assert(IsStillConsistent());

  

  str:= '(';

  str := str + 'EERId=' + IntToStr(GetEERId()) + delimiter;

  str := str + 'Join_ColumnName=' + Join_ColumnName + delimiter;

  str := str + 'Join_Width=' + IntToStr(Join_Width) + delimiter;

  str := str + 'NM_Width=' + IntToStr(NM_Width) + delimiter;



  tmpString := 'Columns=(';

  for i:=0 to Columns.Count-1 do

  begin

    tmpString := tmpString + SW_Column(Columns[i]).SaveToString + delimiter;

  end;

  if (Columns.Count > 0) THEN Delete(tmpString,Length(tmpString),1);  //delete the last delimiter

  tmpString := tmpString + ')';



  str := str + tmpString;



  SaveToString :=  str + ')';

end;



class function SW_Table.LoadFromString(s: String) :SW_Table;

var tmpTable: SW_Table;

    stringList :TStringList;

    cols_string, join_columnName :String;

    Join_width, nm_width: Integer;

    Columns : TObjectList;

    i: Integer;

begin

  stringList := TSTringList.Create;

  Delete(s,1,1);

  Delete(s,Length(s),1);



  IntelligentSplit(s, delimiter,stringList);



  tmpTable := Layer.Model.FindTable(StrToInt(stringList.Values['EERId']));

  Join_ColumnName := stringList.Values['Join_ColumnName'];

  Join_Width := -1;

  NM_Width := -1;

  if (stringList.Values['Join_Width'] <> '') then

  begin

    Join_Width := StrToInt(stringList.Values['Join_Width']);

    NM_Width := StrToInt(stringList.Values['NM_Width']);

  end;



  tmpTable := tmpTable.DeepCopy();

  tmpTable.Fjoin_columnName := Join_ColumnName;

  tmpTable.Fjoin_width := Join_Width;

  tmpTable.Fnm_width := NM_Width;



  cols_string := stringList.Values['Columns'];

  stringList.Clear();



  //remove the enclosing bracket-pair

  Delete(cols_string,1,1);

  Delete(cols_string,Length(cols_string),1);



  IntelligentSplit(cols_string, delimiter, stringList);



  Columns:= TObjectList.Create();

  for i:= 0 to stringList.Count-1 do

  begin

    Columns.Add(SW_Column.LoadFromString(stringList[i],tmpTable));

  end;



  tmpTable.Fcolumns.Free;

  tmpTable.Fcolumns := Columns;



  //SetFKRelations(tmpTable);

  LoadFromString := tmpTable;

end;



   }



procedure SW_Table.GetFkColumns(list: TObjectList);

var i : Integer;

    tmpCol : SW_Column;

begin

  assert(list <> nil);

  assert(list.OwnsObjects = false);

  

  for i:= 0 to columns.Count-1 do

  begin

    tmpCol := SW_Column(columns[i]);

    if (tmpCol.IsForeignKey) then list.Add(tmpCol);

  end;



end;



procedure SetFKRelations(table: SW_Table);

var i,j,k:Integer;

    rel: TEERRel;

    fieldName, origKeyname : String;

    tmpCol : SW_Column;

begin

  //for all relations that end here

  for i:=0 to table.origTable.RelEnd.Count-1 do

  begin

    rel:= table.origTable.RelEnd[i];

    table.relatedTables.Add( TEERTable(rel.SrcTbl).ObjName );



    for j:=0 to rel.FKFields.Count-1 do

    begin

      fieldName := rel.FKFields.ValueFromIndex[j];

      origKeyname := rel.FKFields.Names[j];



      for k:= 0 to table.Columns.Count-1 do

      begin

        tmpCol := SW_Column(table.columns[k]);

        if (tmpCol.name =  fieldName) then

        begin

          tmpCol.FIsForeignKey := true;

          tmpCol.FfkTablename := TEERTable(rel.SrcTbl).ObjName;

          tmpCol.FfkColname := origKeyname;

          break;

        end;

      end;

    end;

  end;

end;



procedure SW_Table.InitPrimaryKey();

var i : Integer;

    tmpCol : SW_Column;

begin

  assert(columns <> nil);

  assert(primaryKey <> nil);

  assert(primaryKey.Count = 0);



  for i:=0 to origTable.Columns.Count-1 do

  begin

    tmpCol := SW_Column.Create(TEERColumn(origTable.Columns[i]), self);



    if (TEERColumn(origTable.Columns[i]).PrimaryKey) then

      primaryKey.AddObject(tmpCol.name, tmpCol);

  end;



end;



//fills the relatedTables-stringlist

//set the FK-related attributes of the columns

procedure SW_Table.InitRelationships();

var i,j,k: Integer;

    rel : TEERRel;

    tmpCol : SW_Column;

    fieldName, origKeyname : String;

begin

  assert(RelatedTables <> nil);

  assert(RelatedTables.Count  = 0);

  assert(columns <> nil);



  RelatedTables.Sorted := true;

  RelatedTables.Duplicates:= dupIgnore;



  //for all relations that end here

  for i:=0 to origTable.RelEnd.Count-1 do

  begin

    rel:= origTable.RelEnd[i];

    relatedTables.Add( TEERTable(rel.SrcTbl).ObjName );



    for j:=0 to rel.FKFields.Count-1 do

    begin

      fieldName := rel.FKFields.ValueFromIndex[j];

      origKeyname := rel.FKFields.Names[j];



⌨️ 快捷键说明

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