gpt4 book ai didi

mysql - 保持 zTable 始终打开是可取的吗?

转载 作者:行者123 更新时间:2023-11-29 05:21:32 26 4
gpt4 key购买 nike

我正在开发一个产品和收银员注册系统。

我的主要表格是筛选请求并从中打开其他注册屏幕(计量单位、产品、付款、客户等)

对于这些屏幕中的每一个,我在数据模块中都有一个 zTable。以及每个窗体的 OnShow/OnClose,打开/关闭 zTables。

作为主屏幕,我需要这些打开的 zTable,我的问题是:我是否建议在主窗体中打开它们并在我的应用程序运行的整个过程中保持它们打开?

最佳答案

Delphi 应用程序基本上可以访问两种类型的数据库系统,即客户端-服务器 (C/S) 数据库系统和基于文件系统的数据库系统。我提到这一点的原因是,在决定是否可以在应用程序运行期间让表格保持打开状态时,涉及不同的技术考虑因素。因此,了解给定应用访问的是哪种类型非常重要。

这两种类型之间的主要区别在于哪个进程负责文件 i/o 并维护数据库、您的应用程序或单独的服务器进程(如 Sql Server/Interbase/Firebird/MySql)的完整性。

对于基于文件系统的数据库,您的应用程序负责执行文件 i/o(即使它是通过 Dll 与 Sqlite 一样),如果数据库访问涉及写入数据库,则有如果您的应用程序崩溃,或者用户通过 TaskMan 或 Ctl-Alt-Del 杀死它,那么数据库的文件将被损坏或处于不一致状态,从而导致数据库可能无法使用。文件 i/o 需要内存中的结构,这些结构有被野指针等事物破坏的风险,如果您的应用程序中发生这种情况,则数据面临的风险比由工业级服务器,打开它们的时间越长,风险就越大。

因此,与一般的文件访问一样,让文件打开的时间超过您真正需要的时间确实不是很好的做法。当您的应用程序关闭时,让它们打开以稍后关闭确实是在自找麻烦。

如果您的数据库是基于服务器的,您可以采取更轻松的观点,因为确保文件更新按应有的方式处理是服务器的责任,并且服务器倾向于在客户端相当的假设下进行编码可能只是“离开”而无需自行整理,并且在比典型的客户端 Delphi 应用程序更安全的环境中运行。

不过,这不是借口,因为 Delphi 应用程序没有通过调用 ApplyUpdates(如果您的数据集类型支持它)或在客户端之后尽快为您的数据集类型调用等价物来及时进行内务处理数据已更改,或者在关闭时不会自行整理(例如,通过关闭与服务器的连接,因为即使未主动使用连接,打开的连接也会消耗服务器资源)。

除了您的应用程序崩溃的可能性之外,您离开发送服务器的时间越长,用户认为他所做的更改没有中继回服务器,另一个用户以某种方式更改数据的风险就越大与此人所做的不一致。

无论如何,尽管除了让表保持打开之外还有很多其他功能,但无论您的数据库是基于服务器还是基于文件,对您“是否建议”的回答都是不,不是,很少值得一提的是,还有严重的技术/实际因素反对它,尤其是对于基于文件的数据库。但是,与基于文件的数据库相比,在使用基于服务器的数据库时让表保持打开状态的风险要小得多,只要您不做诸如等到应用程序关闭之前才写回任何已更改数据的操作到服务器。

即使使用基于文件的数据库(实际上我会说“特别是”),也有很多关于使用内存数据集(如 Delphi 的本地 TClientDataSet)作为用户通过 GUI 与之交互并保留它的数据库对象的说法到其他数据集组件,在短时间内工作,与数据库本身进行交互。

顺便说一句,这并没有什么区别,但我假设当你说“zTables”时,你指的是作为 Zeos 库组件的数据集。

关于mysql - 保持 zTable 始终打开是可取的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25201826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com