这个列表框中填充了Delphi (Radstudio, Firedac)中数据库列的名称。根据用户选择的listboxitem,相关列的数据应该被加载到另一个listbox中。
要读取特定的列,我使用以下代码:
SQL.Add ('SELECT '
+ QuotedStr(Trim(ListBoxName.Selected.Text))
+ ' from TABLE_NAME');
open;
到目前为止一切顺利。然而,当我试图访问列的数据时,会出现一个错误,说'Field…未找到"。
ListBoxItem.Text := VarToStr(FieldValues[ListBoxName.Selected.Text]); ==> Field 'field_name' not found!
我想问题是第一行的qoutedstr()。但是不使用它会导致包含数字和的列的名称出现错误。。
那么,我做错了什么?
您正在执行SQL查询SELECT 'field_name' from TABLE_NAME
,换句话说,您正在返回字符串文字,而不是命名表字段的内容。这就是为什么FieldValues['field_name']
不能在结果集中找到这样一个字段——它真的不存在。
由于您选择的文本是一个表字段的名称,您需要删除QuotedStr()
:
SQL.Text := 'SELECT ' + Trim(ListBoxName.Selected.Text) + ' from TABLE_NAME';
Open;
您将执行SQL查询SELECT field_name from TABLE_NAME
,然后FieldValues['field_name']
将工作。
如果在field_name
上仍然得到错误,那么字段的名称可能包含需要转义的保留字符,但使用'...'
不是转义它们的正确方法。根据您的数据库,您可能需要使用`...`
或"..."
或[...]
来代替。
或者,您可以使用FireDAC的"标识符替换转义序列"。或者"替换变量"而是让FireAC为您处理特定于数据库的转义。请看一下如何在Delphi中引用FireDAC中的字段名。