首页 > 解决方案 > Delphi - 登录后的多个用户(会话)(FireDAC)

问题描述

我正在使用 FireDAC 驱动程序和 MSSQL 数据库系统在 Delphi 中开发 Windows 桌面应用程序。目前,我在理解多个会话(用户)应该如何工作方面遇到了问题。现在,我有三个测试用户,当我使用其中任何一个登录时,每个会话都具有相同的数据和功能。我不想要那个。我希望每个用户(每个会话)都有不同的数据和功能。

请注意,这与分布式系统不同,在分布式系统中,任务由网络中的主机分发。我对分布式系统不感兴趣。我有一个桌面应用程序。

有人可以解释如何实现这一点(不同的用户(会话)=不同的数据和功能)?

标签: sql-serverdelphifiredac

解决方案


您在评论中指出,您想要的是让多个用户能够在同一个或多个表中看到不同的数据行

这实际上非常简单:您只需要为每个用户(或用户类型)定义确定他们应该能够看到哪些数据行的标准,然后编写一个Where仅选择这些行的子句。在数据库中硬编码用户的身份以及允许他们查看哪些数据以及允许他们对数据执行哪些操作通常是一个坏主意。

如果不详细说明您想要做什么,很难给出具体示例,但以下简单示例可能会有所帮助。

假设您有一张客户表,其中一个用户与美国打交道,第二个用户与法国打交道,第三个用户与世界其他地区打交道。

在您的应用程序中,您可以使用枚举类型来表示:

type
  TRegion = (rtUSA, rtFR, rtRoW);  // RoW = Rest of the World

然后您可以编写一个函数来生成WhereSQL Select 语句的子句,如下所示:

function GetRegionWhereClause(const ARegion : TRegion) : String;
begin
  Result := ' Where ';
  case ARegion of
    rtUSA : Result := Result + ' Customer.Country = ''USA''';
    rtFR : Result := Result + ' Customer.Country = ''FR''';
    rtRoW : Result := Result + ' not Customer.Country in (''USA'', ''FR'')'
  end;  { case }
end;

然后,您可以在生成 Sql 时调用GetRegionWhereClause以打开 Customers 表。

类似地,为每个用户类型定义允许他们对数据执行的操作(更新、插入、删除)。但是实现它更多的是一个有选择地启用和禁用应用程序中的 gui 功能以执行相关任务的问题。


推荐阅读