数据库列没有找到,即使它存在(firedac)



这个列表框中填充了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中的字段名。

相关内容

最新更新