我正在使用FireDAC驱动程序和MSSQL数据库系统在Delphi中使用Windows桌面应用程序。目前,我在理解多个会话(用户)应该如何工作方面遇到了问题。现在,我有三个测试用户,当我使用其中任何一个登录时,每个会话都具有相同的数据和功能。我不希望这样。我希望每个用户(每个会话)都有不同的数据和功能。
请注意,这与分布式系统不同,后者的任务由网络中的主机分发。我对分布式系统不感兴趣。我有一个桌面应用程序。
有人可以解释如何实现这一点(不同的用户(会话)=不同的数据和功能)?
答案 0 :(得分:0)
您已在评论中指出,您希望多个用户能够在同一个表中查看不同的数据行
这实际上非常简单:你只需要为每个用户(或用户类型)定义确定他们应该能够看到哪些数据行的标准,然后编写一个Where
子句,仅选择那些行。在数据库中对用户的身份进行硬编码以及允许他们查看哪些数据以及允许他们对数据执行哪些操作通常是一个坏主意。
如果不详细了解您想要做的事情,很难给出一个具体的例子,但下面的简单示例可能有所帮助。
假设您有一个客户表,一个用户可以与美国打交道,第二个用户与法国打交道,第三个用户与世界其他地方打交道。
在您的应用中,您可以使用枚举类型来表示:
type
TRegion = (rtUSA, rtFR, rtRoW); // RoW = Rest of the World
然后你可以编写一个函数来生成SQL Select语句的Where
子句,如下所示:
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以打开Customers表时,可以调用GetRegionWhereClause
。
同样为每个用户类型定义允许他们对数据执行哪些操作(更新,插入,删除)。但实现这个问题更多的是选择性地启用和禁用应用程序中的gui功能以执行相关任务。