系统使用了主程序+运行包+带包编译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之类的话
我们得到的可能只有一串错误信息或错误代码.
期待答案,欢迎讨论.
在自定义包里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之类的话
我们得到的可能只有一串错误信息或错误代码.
期待答案,欢迎讨论.
解决方案 »
- Delphi TADOQuery带参数查询出错
- 【押宝党散分总裁】每天散分!(2)
- 如何将几个数据库表封装在可执行exe中
- 按照EXCEL字段创建表
- 拜年了!关于出学.帮兄弟推荐一本书. 请指点
- 对类精通的同志请看看,怎么出现这个奇怪的问题
- 求争Delphi开发论文
- mdi背景,我的mdi 背景可以更换(可更换的放在一文件夹中,),可我怎么换回原来的?
- 关于function SendBuf(var Buf; Count: Integer): Integer的问题.
- 如何得出Richedit当前位置的行号和列号?
- vc 中 BYTE *pBuffer 如何 转换为delphi中 pBuffer: PByte
- SELECT 订单号 from 订单表 where substring(订单号,3,6)='200905' 这句查询报错!
带包编译了,与修改单元放到本地就没有什么关系了。你应该将这个单元的BPL重新编译才行。
2、看看这几个字符串是否以资源的形式进行保存(resourcestring),是的话可以从修改资源入手(Delphi大部份提示信息应该都是资源)
2.是写在resourcestring中,可以考虑这种方案,今晚回去试试!