BCB6 не может привести от AnsiString к TObject
У меня проблема с преобразованием строковой переменной в TObject
,
У меня есть запрос, который возвращает мне два столбца. В первом столбце у меня есть varchar
значения, которые я перевожу в строки, а во втором столбце у меня есть int
ценности.
Я хочу заполнить ComboBox следующим образом:
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 ответ
Вы не можете разыграть AnsiString
значение для TObject*
указатель. Вы можете привести только целочисленное значение или значение указателя к TObject*
указатель. AnsiString
не из тех.
Вы не получаете int
значение из 2-го поля правильно в любом случае. Field[1]
это указатель на фактический TField
объект в Fields
коллекция. Этот указатель - то, что вы пытаетесь сохранить в вашем ComboBox, а НЕ int
значение, которое TField
представляет собой.
Вам нужно позвонить Fields[1]->AsInteger
чтобы получить int
значение 2-го поля, аналогично тому, как вы используете Fields[0]->AsString
чтобы получить строковое значение 1-го поля:
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)
);
Это ничем не отличается от кода в вашем предыдущем вопросе:
cbx1->AddItem("one",(TObject*)1);
Вы сейчас просто размещаете литералы "one"
а также 1
с переменными времени выполнения эквивалентных типов.