sql-server - Delphi - 登录后的多个用户(会话)(FireDAC)
问题描述
我正在使用 FireDAC 驱动程序和 MSSQL 数据库系统在 Delphi 中开发 Windows 桌面应用程序。目前,我在理解多个会话(用户)应该如何工作方面遇到了问题。现在,我有三个测试用户,当我使用其中任何一个登录时,每个会话都具有相同的数据和功能。我不想要那个。我希望每个用户(每个会话)都有不同的数据和功能。
请注意,这与分布式系统不同,在分布式系统中,任务由网络中的主机分发。我对分布式系统不感兴趣。我有一个桌面应用程序。
有人可以解释如何实现这一点(不同的用户(会话)=不同的数据和功能)?
解决方案
您在评论中指出,您想要的是让多个用户能够在同一个或多个表中看到不同的数据行
这实际上非常简单:您只需要为每个用户(或用户类型)定义确定他们应该能够看到哪些数据行的标准,然后编写一个Where
仅选择这些行的子句。在数据库中硬编码用户的身份以及允许他们查看哪些数据以及允许他们对数据执行哪些操作通常是一个坏主意。
如果不详细说明您想要做什么,很难给出具体示例,但以下简单示例可能会有所帮助。
假设您有一张客户表,其中一个用户与美国打交道,第二个用户与法国打交道,第三个用户与世界其他地区打交道。
在您的应用程序中,您可以使用枚举类型来表示:
type
TRegion = (rtUSA, rtFR, rtRoW); // RoW = Rest of the World
然后您可以编写一个函数来生成Where
SQL 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 功能以执行相关任务的问题。
推荐阅读
- python - 在python中使用和或一起总是正确的
- c - 架构 x86_64 的未定义符号:“_swap”,引用自:swap-315897.o 中的 _main ld:未找到架构 x86_64 的符号
- php - sql 使列名不重复并在同一个表中显示所有其他值
- powerdesigner - SAP PowerDesigner 链接到其他模型并反映所做的更改
- javascript - 如何使用 React 钩子对两个输入求和?
- symfony - 注释范式
- c++ - 最小迭代次数
- php - file_get_contents 突然返回 false
- bash - 如何在 Bash 中减去这两个列表
- excel - VBA:如何使用变量作为范围内的参数?