用Delphi XE采用的DataSnap建立一个相对简单的数据库应用程序。
因为在我的应用程序的一些安全性在数据库级别的处理,我需要从我的客户端应用程序传递用户的SQL凭据我DataSnap服务器。
(我试图使DataSnap服务器无国籍如果可能的话,所以承认,我将不得不在每次调用做到这一点。)
我使用在客户端ClientDatasets(CDS),所以我可以用OnBeforeGetRecords从CDS通过在客户端上的OwnerData OleVariant数据到服务器上相应的TDataSetProvider。 但是,这意味着每一个数据模块上的每一个CDS必须有做这个事件,这似乎是混乱和不便。 我不禁感到,必须有一种方法来以比更高级别的消息传递给服务器。
我真正喜欢的是像这样在服务器端的DSServerClass级别:
Procedure TMyServerContainer.MyServerClassCreateInstance(DSCreateInstanceEventObject: TDSCreateInstanceEventObject);
begin
// Server detects request for data from client app
fUsername := GetUsernameFromClientSomehow;
fPassword := GetPasswordFromClientSomehow;
// create data modules and initialise
MyDataModule := TMyDataModule.Create(nil);
MyDataModule.InitialiseWithSQLCredentials(fUsername, fPassword);
DSCreateInstanceEventObject.ServerClassInstance := MyDataModule;
End;
可以在认证管理器组件帮助我在这里? 任何其他的想法? 还是我坚持OnBeforeGetRecords?
非常感谢。