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