Delphi带包编译问题
系统使用了主程序+运行包+带包编译DDL的框架.
主程序和DLL都带包便宜:共享Application
由于在自定义控件中使用了BDE的TQuery所以
在自定义包里requires了bdertl包,而bdertl包含了DBTables.pas文件
问题:
现在想修改DBTables.pas原文件中的返回错误的两个函数,将其返回的错误信息
汉化,我将DBTables.pas文件复制到我的自定义控件的路径下,并在Library path
中设置其路径下优先于$(DELPHI)\Lib,但是编译后,达不到预期效果.
如果使用不带包编译的时候则没问题.
引起该问题的原因分析:
1. 由于bdertl是系统包,不能被重编译,而我的系统又要求带包编译,所以当要使用
到DBTables.pas的时候,系统还是连接到bdertl70.bpl,所以提示内容还是英文.
2. 不带包编译的话,由于编译的时候,会自动连接到我修改过的DBTables.pas,所以
能达到效果.
尝试过的方法:
1. 将bdertl另存为其他名字,然后编译,例如bdertl_ex.bpl,自定义包去掉原来的
bdertl,requires bdertl_ex.dcp.
出现问题,由于BDE只有dcu没有pas,所以在安装控件的时候会提示BDE已经存在于bdertl中了,
没办法安装.
2.将修改过的DBTables.pas生成dcu后,替换原来$(DELPHI)\Lib下的DBTables.dcu文件,
重编译,失败.
问题:
1. 是否bdertl.bpl是不会被重新编译的?
2. 如果另外生成一个bdertl_ex.bpl的话,怎么避免与原来的bdertl冲突,即不会报bdertl已经包含了BDE.dcu了.
3. 是否有其他办法来解决,例如能不能在应用了DBTables.pas的地方加入编译指令,告诉编译器,
如果遇到应用DBTables.pas时,直接连接到DBTables而不要去包bdertl中找.
声明:
1. 请不要说什么BDE不好,使用ADO之类的.
2. 希望能有其他的方案,但是要满足要求,例如在TQuery的OnxxxError事件中写代码,try之类的,但这些都存在一些问题,
例如返回一个错误99999 is not a valid value for field '编码'.The allowed range is 0 to 19999
我要如何翻译成:输入的数值99999并不匹配[编码]的取值范围. 允许的范围应该是从0到19999
这些如果修改原代码的情况下,只要DBConsts中的SBcdFieldRangeError的相关内容汉化则行,但是如果通过try之类的话
我们得到的可能只有一串错误信息或错误代码.
期待答案,欢迎讨论.