Firedac中DataModule的使用
由于工作需要,用delphi编写了一个简单的数据库管理程序。数据库用SQLite,使用delphi自带的firedac控件实现连接、查询等功能。刚开始用没经验,在每个使用数据库的窗体上都放了一套fdconnection、fdquery、datasource,后两者有的还不止一套(需要同时打开两个以上数据表查询的)。基本功能实现后,就想着能不能优化一下,把fdconnection、fdquery、datasource都放在一个数据模块中集中管理。按照网上的方法,新建了数据模块datamodule,并根据需要,将对应的连接、查询、数据源都放了进去,一运行,问题来了。
先是窗体上的dbedit控件总是出错,一个窗体改完后运行通过,再运行另一个窗体,又提示原窗体的控件出错,这样反反复复改了若干次,后来发现,是fdquery中初始SQL未设置,在设dbedit的数据源时字段名只能输入不能选择,再加上有几个fdquery重复使用后,造成数据源混乱。
改进方法:数据模块中fdquery每张表建一个,特殊条件查询的再单建,这样在数据模块中调试好SQL语句后,每个窗体上dbedit都可以直接选数据源字段名,确保不出现对应错误。
接下来又发现一个问题:一个窗体上的查询关闭后进入另一个窗体,发现前者对后者有影响。可是清空SQL并重新打开query后,问题依然如故。几番对照终于发现,在前一窗体中修改了fdquery的filter属性,退出时没有改回来,这就导致了上述问题的发生。
最后总结:使用数据模块确实便于数据库的集中管理,不用到每个窗体上设置连接、查询等,同时,SQL语句也可以在fdquery中提前写好,方便各窗体上dbedit等控件的设置,此外,如一些全局变量等也可以设置在数据模块单元中,引用后即可使用。但要注意的就是fdquery使用中一些参数的变化,有些即使清空sql后依然有影响。