将字符串变量转换为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”
我不知道我可以做些什么来转换此值。
答案 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
放入等效类型的运行时变量。