根据您使用的查询组件类型,我想您可以在项目文件夹中使用命令行 grep(或任何其他文本搜索工具)来执行此操作。在 DFM 中,对于普通的类似 TQuery 的组件,您将拥有类似于
的内容
SQL.Strings=('select * from mytable')
或者可能(我没有 Delphi 可以检查,在家的乐趣!)
SQL.Text=('从我的表中选择 *')
考虑到这些字符串如何分布在 DFM 内的多个“行”上,并且考虑到您可能需要检查多个变化,我个人会编写一小段 Delphi 来执行此操作。
基本的想法是;遍历给定目录中的所有文件/子文件夹,查找所有 DFM 文件,并将每个文件读入 TStringList,检查您感兴趣的任何 TQuery (etc) SQL 属性,然后编写结果(组件名称、文件名、实际 SQL 字符串)输出到结果文件。真的不应该超过一两个小时的工作。
如果您已经存储了过程,您使用非 TQuery 类型的组件调用,您必须先查看 DFM 内部并查看 SQL 是如何显示的;大概是这样的
CommandText=( 'exec mysproc :id, :value' )
等等
编辑:
在 cmets 中的讨论之后,这是我的一个 DFM 的示例;
(其他属性)
SQL.Strings = (
'选择 D.*,'
'C.DESCRIPTION 作为 CLASS_DESCRIPTION, '
'C.CHQ_NUM_THRESHOLD 作为 CLASS_CHQ_NUM_THRESHOLD,'
'C.CREDIT_LIMIT 作为 CLASS_CREDIT_LIMIT,'
'A.REF 作为 ACCOUNT_REF,'
'A.SORT_CODE 作为 ACCOUNT_SORT_CODE,'
'A.ACCOUNT_NUMBER 作为 ACCOUNT_ACCOUNT_NUMBER,'
'A.PREFERRED_ACCOUNT AS ACCOUNT_PREFERRED_ACCOUNT'
'从 '
'DRAWER_ACCOUNTS A LEFT JOIN DRAWERS D'
'ON D.REF=A.DRAWER_REF'
'LEFT JOIN REF_DRAWER_CLASSES C'
'在 D.DRAWER_CLASS = C.CLASS_ID'
'WHERE A.SORT_CODE=:PSORT AND A.ACCOUNT_NUMBER=:PACC')
(其他属性)
所以我真正需要做的就是找出SQL.Strings = ( 位,然后读取该行的其余部分和所有后续行,删除前导和尾随',直到我到达以@ 结尾的行987654323@ - 至此我完成了。每行的引号中可能包含的任何有趣的 SQL(和 cmets)实际上都无关紧要。您想阅读您感兴趣的每一行,并在每行的第一个和最后一个引号之间剪掉文本。这必须有效,因为我看不到 Delphi 将如何以任何其他方式传输它,它不可能“读取”字符串内容 - 它只是在 stringlist (可能)分成几行和每一行的基础上工作在 DFM 中以 ' 开头和结尾分隔,整个字符串列表内容本身包含在一对括号内。
这有意义吗,还是我仍然错过了什么? :-)