📄 dbgw.pas
字号:
Result := strCondition;
except
Result := '';
end
end;
//-----------------------------------------------------------------------------
// FormatValueAppToDB和FormatValueDBToApp方法暂时还没有完善
// 这两个方法是用来格式化值,因为UI层的数据显示可能和数据库的值不一样
// 所以需要转换一下
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// FormatValueAppToDB
//-----------------------------------------------------------------------------
function TdmDBGW.FormatValueAppToDB(const varFieldValue : Variant; const strFieldType : String) : String;
begin
try
if VarIsNull(varFieldValue) then
Result := 'NULL'
else
Result := varFieldValue;
except
Result := '';
end
end;
//-----------------------------------------------------------------------------
// FormatValueDBToApp
//-----------------------------------------------------------------------------
function TdmDBGW.FormatValueDBToApp(const varFieldValue : Variant; const strFieldType : String) : Variant;
begin
try
if VarIsNull(varFieldValue) then
begin
if strFieldType = 'string' then
Result := ''
else if strFieldType = 'int' then
Result := 0
else
//This is set to 'NULL', it is will used in many places. so, we should be careful it
// Result := 'NULL';
Result := varFieldValue;
end
else
Result := varFieldValue;
except
Result := '';
end
end;
//-----------------------------------------------------------------------------
// InitConnectionPool
//-----------------------------------------------------------------------------
procedure TdmDBGW.InitConnectionPool;
var
i : Integer;
connection : TQuery;
begin
try
m_StackConnections := TStack.Create;
for i := 1 to MAX_DB_CONNECTION do
begin
connection := TQuery.Create(self);
connection.AutoCalcFields := true;
connection.DatabaseName := m_db.DatabaseName;
m_StackConnections.Push(connection);
end;
except
end
end;
//-----------------------------------------------------------------------------
// GetConnection
//-----------------------------------------------------------------------------
function TdmDBGW.GetConnection() : TQuery;
begin
Result := m_StackConnections.Pop;
end;
//-----------------------------------------------------------------------------
// GetConnection
//-----------------------------------------------------------------------------
procedure TdmDBGW.ReleaseConnection(connection : TQuery);
begin
m_StackConnections.Push(connection);
end;
//-----------------------------------------------------------------------------
// Refresh
//-----------------------------------------------------------------------------
procedure TdmDBGW.Refresh(etyList : TEtyList);
begin
LoadEntityList(etyList);
end;
//-----------------------------------------------------------------------------
// GetAllEntityMapField
// 该方法获得all Entity Class对应的Field
//-----------------------------------------------------------------------------
function TdmDBGW.GetAllEntityMapField() : TEtyList;
var
xmlFile : TXMLDocument;
list : IXMLNodeList;
i : Integer;
etyEntityMapField : IEntity;
listEntityMapField : TEtyList;
strXMLFileName, strEntityName, strTableName, strValue : String;
handle : Cardinal;
win32FindData : WIN32_FIND_DATA;
strFileName : string;
label Label_Continue;
label Label_Exit;
begin
xmlFile := TXMLDocument.Create(self);
listEntityMapField := TEtyList.Create(TEtyEntityMapField.Create);
try
strFileName := m_strEntityMapPath + '*.xml';
handle := FindFirstFile(PChar(strFileName), win32FindData);
if (handle = INVALID_HANDLE_VALUE) then
begin
result := nil;
exit;
end;
while (true) do
begin
//scan xml files
if (win32FindData.cFileName[0] = '.') or (win32FindData.cFileName = '..') then
goto Label_Continue;
strXMLFileName := m_strEntityMapPath + win32FindData.cFileName;
//get entity map file name
xmlFile.LoadFromFile(strXMLFileName);
xmlFile.Active := true;
list := xmlFile.DocumentElement.ChildNodes[ID_FIELDS].ChildNodes;
strEntityName := xmlFile.DocumentElement.ChildNodes[ID_ENTITY_NAME].NodeValue;
strTableName := xmlFile.DocumentElement.ChildNodes[ID_TABLE_NAME].NodeValue;
//save the data to entity
for i := 0 to list.Count - 1 do
begin
etyEntityMapField := TEtyEntityMapField.Create;
//entity name
etyEntityMapField.SetAttributeValue(ID_ENTITY_NAME, strEntityName);
//entity field name
strValue := list[i].ChildNodes[FD_ENTITY_FIELD_NAME].NodeValue;
etyEntityMapField.SetAttributeValue(FD_ENTITY_FIELD_NAME, strValue);
//table name
etyEntityMapField.SetAttributeValue(ID_TABLE_NAME, strTableName);
//table field name
strValue := list[i].ChildNodes[ID_TABLE_FIELD_NAME].NodeValue;
etyEntityMapField.SetAttributeValue(ID_TABLE_FIELD_NAME, strValue);
//field type
strValue := list[i].ChildNodes[ID_TABLE_FIELD_TYPE].NodeValue;
etyEntityMapField.SetAttributeValue(ID_TABLE_FIELD_TYPE, strValue);
//is pk
strValue := list[i].ChildNodes[ID_ISPK].NodeValue;
etyEntityMapField.SetAttributeValue(ID_ISPK, strValue);
//add etyEntityMapField to listEntityMapField
listEntityMapField.AddEntity(etyEntityMapField);
end;
Label_Continue:
if not FindNextFile(handle, win32FindData) then
goto Label_Exit;
end;
Label_Exit:
Result := listEntityMapField;
finally
xmlFile.Free;
end
end;
//-----------------------------------------------------------------------------
// GetEntityMapField
// 该方法获得Entity Class对应的Field
//-----------------------------------------------------------------------------
function TdmDBGW.GetEntityMapField(const strEntityName : String = '') : TEtyList;
var
i : Integer;
etyEntityMapField : IEntity;
listEntityMapField : TEtyList;
begin
listEntityMapField := TEtyList.Create(TEtyEntityMapField.Create);
for i := 0 to m_listAllEntityMapField.GetEntityCount - 1 do
begin
etyEntityMapField := m_listAllEntityMapField.GetEntity(i);
if (Trim(LowerCase(etyEntityMapField.GetAttributeValue(ID_ENTITY_NAME))) = Trim(LowerCase(strEntityName))) then
begin
//add etyEntityMapField to listEntityMapField
listEntityMapField.AddEntity(etyEntityMapField);
end;
end;
Result := listEntityMapField;
end;
//-----------------------------------------------------------------------------
// GetTableName
//-----------------------------------------------------------------------------
function TdmDBGW.GetTableName(const strEntityName : String) : String;
var
xmlFile : TXMLDocument;
begin
xmlFile := TXMLDocument.Create(self);
try
//get entity map file name
xmlFile.LoadFromFile(GetAppPath() + ID_ENTITY_MAP_PATH + '\' + strEntityName + '.xml');
xmlFile.Active := true;
Result := xmlFile.DocumentElement.ChildNodes[ID_TABLE_NAME].NodeValue;
finally
xmlFile.Free;
end
end;
//-----------------------------------------------------------------------------
// GetTableFieldName
//-----------------------------------------------------------------------------
function TdmDBGW.GetTableFieldName(const strTableName : String; const strEntityFieldName : String) : String;
var
i : Integer;
etyEntityMapField : IEntity;
begin
try
for i := 0 to m_listAllEntityMapField.GetEntityCount - 1 do
begin
etyEntityMapField := m_listAllEntityMapField.GetEntity(i);
if (Trim(LowerCase(etyEntityMapField.GetAttributeValue(ID_TABLE_NAME))) = Trim(LowerCase(strTableName))) and
(Trim(LowerCase(etyEntityMapField.GetAttributeValue(ID_ENTITY_FIELD_NAME))) = Trim(LowerCase(strEntityFieldName))) then
begin
Result := Trim(etyEntityMapField.GetAttributeValue(ID_TABLE_FIELD_NAME));
exit;
end;
end;
Result := '';
except
Result := '';
end;
end;
//-----------------------------------------------------------------------------
// GetLoadType
//-----------------------------------------------------------------------------
function TdmDBGW.GetLoadType(const strEntityName : String) : String;
var
xmlFile : TXMLDocument ;
begin
//get entity map file name
xmlFile := TXMLDocument.Create(self);
xmlFile.LoadFromFile(GetAppPath() + ID_ENTITY_MAP_PATH + '\' + strEntityName + '.xml');
xmlFile.Active := true;
result := xmlFile.DocumentElement.ChildNodes.Nodes[ID_LOAD_TYPE].NodeValue;
xmlFile.Free;
end;
//-----------------------------------------------------------------------------
// GetTableFieldType
//-----------------------------------------------------------------------------
function TdmDBGW.GetTableFieldType(const strTableName : String; const strFieldName : String) : String;
var
i : Integer;
etyEntityMapField : IEntity;
begin
try
for i := 0 to m_listAllEntityMapField.GetEntityCount - 1 do
begin
etyEntityMapField := m_listAllEntityMapField.GetEntity(i);
if (Trim(LowerCase(etyEntityMapField.GetAttributeValue(ID_TABLE_NAME))) = Trim(LowerCase(strTableName))) and
(Trim(LowerCase(etyEntityMapField.GetAttributeValue(ID_TABLE_FIELD_NAME))) = Trim(LowerCase(strFieldName))) then
begin
Result := Trim(etyEntityMapField.GetAttributeValue(ID_TABLE_FIELD_TYPE));
exit;
end;
end;
Result := '';
except
Result := '';
end
end;
//-----------------------------------------------------------------------------
// DataModuleCreate
//-----------------------------------------------------------------------------
procedure TdmDBGW.DataModuleCreate(Sender: TObject);
begin
//it is implemented by derived classes
end;
//-----------------------------------------------------------------------------
// m_dbBeforeConnect
//-----------------------------------------------------------------------------
procedure TdmDBGW.m_dbBeforeConnect(Sender: TObject);
begin
//it is implemented by derived classes
end;
//-----------------------------------------------------------------------------
// m_dbAfterConnect
//-----------------------------------------------------------------------------
procedure TdmDBGW.m_dbAfterConnect(Sender: TObject);
begin
InitConnectionPool;
Init;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -