我正在编写一个使用 FireDac 组件访问多用户数据库的程序。
我有一个“客户”表,其中存储了一些客户数据。
用户应该始终看到数据库中存储的当前实际数据。
问题:
假设有 2 个用户(用户 A 和用户 B)记录了它。 所以我的应用程序在 2 台不同的电脑上打开了 2 次。
两者同时登录并看到相同的数据记录。
用户 A 决定将第一个客户的姓名从“John Doe”编辑为“Tom Smith”,并将其保存 (.Post
) 到数据库中。
新名称现已正确存储在数据库中。
用户 B 仍在查看客户 #1,并且看不到所做的更改(这很好,因为他在更改后没有浏览或刷新此数据记录)。 但是,如果用户 B 浏览到客户 #2,然后返回到客户 #1,他仍然会看到旧数据(“John Doe”而不是“Tom Smith”)。
--
因此,如果用户浏览数据集,他会看到查询获取数据时的数据值。
--
当前解决方案:
每次数据集“显示”不同的记录时,都会触发“AfterScroll”/“BeforeScroll”事件。
所以我所做的是在这些事件中调用 FDQuery1.Refresh 以确保显示实际数据。
--
修改所述事件是我的问题的“正确”解决方案还是有更好的方法来实现我想要的?
我希望您理解我的问题并感谢您的阅读。
最佳答案
您可以使用单独的通知机制,向所有感兴趣的客户广播“新订单到达”、“客户记录已修改”等事件。
某些数据库包含对此技术的内置支持(例如 Firebird events )。它避免了频繁重新加载数据,因此可以最大限度地减少网络流量并提高应用程序响应能力。
另请参阅:Database Alerts (FireDAC)
The DBMS alert refers to a database notification or alert sent by a database trigger or stored procedure with the purpose of notifying a database client about some events at database side.
但您并不限于这些 FireDac 特定警报。您可以使用许多其他方式和协议(protocol)(例如套接字、HTTP、MQTT、STOMP 等)在客户端之间构建自己的、独立于数据库的通知系统。
关于delphi - 浏览数据集时显示实际数据库数据(FireDac、FDQuery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33408658/