我正在采取我的第一个绊脚石进入DB感知控件(任何好的教程?)。
我有一个包含6列的MySql表,并设法将其加载到TDbGrid中。
然而,其中一列是另一个表的索引。这是一个条形码,而不是显示,我想显示与之关联的产品名称。
我该怎么做?
(我可以隐藏左侧的“装订线”(?),显示当前行吗?)
由于
答案 0 :(得分:4)
你应该总是从SQL端执行连接,然后比programaticaly更容易
如:
SELECT mytable.id, mytable.column1, another_table.barcode
FROM mytable
JOIN another_table ON another_table.id = mytable.barcode_id
要删除装订线,您需要在选项中取消选中DBGrid属性dgIndicator
。
对于“DB-Aware控件”,你应该尝试delphi帮助。
答案 1 :(得分:2)
使用查询而不是表。然后,使用连接选择产品名称,如下所示:
SELECT
t.*,
p.name
FROM
YourTable t
INNER JOIN Product p on p.barcode = t.barcode
我使用t。*,因为我不知道确切的列。在实践中,我不会使用select *
,而是指定特定的列。如果您打算使用*
,则可以通过将数据集/查询中的TField对象的Visible属性设置为False
来隐藏特定列。
我不知道您使用哪些组件连接到表,但是大多数组件都有一个查询对应项,允许您插入SQL而不是表名。
可以通过转到对象检查器中的属性Options
隐藏装订线,展开它,然后将dgIndicator
设置为False
。
答案 2 :(得分:0)
仅供记录:对于像Paradox和DBF这样的ISAM数据库,典型的解决方案将是所谓的master-detail tables relations
,它仍然适用于SQL。虽然效率很低而且很慢。你肯定会阅读关于SQL的som书。
答案 3 :(得分:-1)
使用TQuery组件而不是TTable,并使用上面建议的select语句设置SQL属性。如果只是添加要在sql语句中显示的列,则可以按预期获得结果。至于“装订线”,你必须在运行时以某种方式破解网格。