gpt4 book ai didi

delphi - 从 DBExpress TSQLQuery 获取字段列表

转载 作者:行者123 更新时间:2023-12-03 15:47:29 25 4
gpt4 key购买 nike

我在从程序用户在运行时定义的查询中获取字段列表时遇到问题。我让用户在备忘录控件中输入 SQL 查询,然后我想让他们浏览将返回的字段并执行诸如格式化输出、求和列值等操作。因此,我必须获取列名称,以便它们有地方输入附加信息。

如果没有参数,我会做得很好,但我还必须让他们为查询定义过滤器参数。因此,如果我想将参数设置为 null,我必须知道参数的数据类型是什么。

我使用的是 Delphi 2006。我使用 DBExpress 组件 TSQLConnection 和 TSQLQuery 连接到 Firebird 2.1 数据库。以前,我成功地使用了:

for i := 0 to Qry.Params.Count - 1 do Qry.Params[i].value := varNull;

当我尝试使用日期参数时,我发现遇到了问题。直到那时我的所有参数都是整数(记录 ID),这只是一个巧合。事实证明 varNull 只是一个值为 1 的枚举常量,因此我得到了可接受的结果(没有记录),工作正常。

我只需要一个字段列表。也许我应该只解析 SQL 语句的 SELECT 子句。我认为将 Qry.Prepared 设置为 True 会给我一个字段列表,但没有这样的运气。它需要参数值。

如果你有什么想法,我很想听听。感谢您的帮助。

最佳答案

再次回复“因为我感兴趣”。我的方法可以工作(与我的查询一起使用),因为它们已使用预设为正确类型的参数数据类型进行了预定义:)

鉴于您甚至没有选择它所操作的字段,我不确定您期望查询如何知道或派生参数的数据类型。

所以我认为您的查询设置和用户输入方法需要更多关注。我不久前刚刚查了一下我是如何做到这一点的。我不使用参数化查询 - 我只是从用户那里获取“参数值”并将它们直接放入 SQL 中。所以你的 sql 将读取:

选择 s.hEmployee、e.sLastName
来自 PR_Paystub s
INNER JOIN PR_Employee e ON e.hKey = s.hEmployee
WHERE s.dtPaydate > '01/01/2008'

因此不需要参数类型知识。不会阻止您的用户输入垃圾,但这会返回到输入控制:)

关于delphi - 从 DBExpress TSQLQuery 获取字段列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260521/

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