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

📄 dbgw.pas

📁 数据库封装原代码 1. 该代码可以免费使用, 该代码的名字暂时定为"哲别" 2. 如果你需要使用该代码, 请注明该代码的原来作者: Jacky Zhou 3. 如果你发现该代码有bug,可以自己修改
💻 PAS
📖 第 1 页 / 共 3 页
字号:

    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 + -