BCB6无法从“ AnsiString”转换为“ TObject”

时间:2018-07-03 07:38:17

标签: type-conversion c++builder c++builder-6 tdataset tcombobox

将字符串变量转换为TObject时遇到问题。

我有一个查询,向我返回两列。在第一列中,我具有varchar值,可以将其转换为字符串,在第二列中,我具有int值。

我想用这些值用这种方式填充组合框:

cbx1-> AddItem (DataSet1->DataSet->Fields->Field[0]->AsString, (TObject *) (int) DataSet1->DataSet->Fields->Field[1];

当我提到int类型的第二个值时,我收到了一些灌木,例如xD等。

通过尝试将此值转换为字符串,例如:

String temp = IntToStr (DataSet1->DataSet->Fields->Field[1]);
cbx1-> AddItem (DataSet1->DataSet->Fields->Field[0]->AsString, (TObject *) temp;

我收到一条错误消息:

  

无法从“ AnsiString”转换为“ TObject”

我不知道我可以做些什么来转换此值。

1 个答案:

答案 0 :(得分:1)

您不能将AnsiString 强制转换为TObject*指针。您只能将整数值或指针值转换为TObject*指针。 AnsiString都不是。

无论如何,您始终无法从第二个字段正确检索int Field[1]是指向TField集合中实际Fields对象的指针。该指针就是您要存储在ComboBox中的内容,int表示的TField

您需要调用Fields[1]->AsInteger来获取第二个字段的int值,类似于使用Fields[0]->AsString来获取第一个字段的字符串值的方法:

cbx1->AddItem(
    DataSet1->DataSet->Fields->Field[0]->AsString,
    (TObject*) DataSet1->DataSet->Fields->Field[1]->AsInteger
    // in C++, using reinterpret_cast is preferred over C-style casting:
    // reinterpret_cast<TObject*>(DataSet1->DataSet->Fields->Field[1]->AsInteger)
);

这与您的previous question中的代码没什么不同:

cbx1->AddItem("one",(TObject*)1);

您现在只需将文字"one"1放入等效类型的运行时变量。