BCB6 не может привести от AnsiString к TObject - PullRequest
0 голосов
/ 03 июля 2018

У меня проблема с преобразованием строковой переменной в 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 Ответ

0 голосов
/ 04 июля 2018

Нельзя привести 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 с переменными времени выполнения эквивалентных типов.

...