| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Cannot convert 'AnsiString' to 'const char *' |
| Автор: Stentor 14.3.2006, 11:26 |
| Копутер пишет «Cannot convert 'AnsiString' to 'const char *'» Как конвертировать??? Вообще, задача такая: Идёт поиск в БД по фамилии, если запись не найдена, то появляется сообщение (не найдено) AnsiString name; name=Edit1->Text; MainForm->Table1->Locate("Фамилия",name,TLocateOptions() << loCaseInsensitive); if(!MainForm->Table1->Locate("Фамилия",name,TLocateOptions() << loCaseInsensitive)) MessageBox(0," Не найден: "+name," Запись не найдена ",0); Чего бы такое написать, чтобы в сообщении было: «Не найден: Петров»? Как правильно сделать? |
| Автор: maxim1000 14.3.2006, 11:31 | ||
вроде бы так...
|
| Автор: Stentor 14.3.2006, 11:45 |
| 1. MessageBox(0,(" Не найден: "+name).c_str()," Запись не найдена ",0); 2. AnsiString("не найден:")+name).c_str() Оба варианта работают без ошибок, только не делают т0, что надо. В результате выдает только «Не найден:». А фамилию не пишет. Что я не так делаю? AnsiString name; name=Edit1->Text; MainForm->Table1->Locate("Фамилия",name,TLocateOptions() << loCaseInsensitive); if(!MainForm->Table1->Locate("Фамилия",name,TLocateOptions() << loCaseInsensitive)) MessageBox(0,(" Не найден: "+name).c_str()," Запись не найдена",0); |
| Автор: Stentor 14.3.2006, 12:33 |
| ??????? |
| Автор: tigger 14.3.2006, 12:42 | ||
| Я обычно делал так выношу строку перед MessageBox
если не поможет попробуй через Application->MessageBoxA(); |
| Автор: CatOleg 14.3.2006, 12:49 |
| AnsiString name,ErrorMessage; name = Edit1->Text; ErrorMessage = "Не найден : " + name; Application->MessageBoxA(ErrorMessage.c_str(),"Error",0); |
| Автор: Stentor 15.3.2006, 12:38 |
| maxim1000, AnsiString name; MessageBox(0,(AnsiString("Не найдено:")+name).c_str()," Запись не найдена ",0); - работает как положено. А вчера не хотело. Похоже, что я скобочку одну пропустил. Только тогда не пойму как прога откомпилировалась без ошибок… Тему можно закрывать. Спасибо всем! |
| Автор: Aver91 16.7.2009, 19:54 |
| чтобы тем не плодить, отвечу тут. возникла такая же проблема, как заголовок темы. суть в чем. в компонент Edit вводится слово или словосочетание. это будет строка ansistring. эту строку нужно перевести в символьный массив типа char, для записи в файл и прочей работой как с обычной строкой( под обычной строкой подразумеваю последовательность char символов, ограниченных '\0'), либо прошу подсказать функции для работы со строкой ansistring, подобные: 1)strlen 2)strcopy 3)fputs/fgets/fgetc для ansistring 4)и подобные |
| Автор: Aver91 16.7.2009, 20:47 | ||
проблема решилась.
|
| Автор: WebS 28.11.2009, 18:40 | ||
а у ми такой вопрос:
ошибка.., как норм сложить их? |
| Автор: Alexeis 28.11.2009, 18:46 |
| char* не поддерживает конкатинацию плюсом, тока AnsiString. Можно к AnsiString приплюсовать char*. |
| Автор: WebS 28.11.2009, 20:13 |
| Спасибо, всё ок |
| Автор: 123lexx321 30.1.2011, 10:34 |
| у меня похожий вопрос. Нужно значения матрицы переписать в массив пишу b[c++]=StrToInt(StringGrid1->cells[col][row]); ошибка ' ' is not a valid integer value Уже который день мучаюсь чувствую что ушёл куда то в дебри |
| Автор: Dem_max 30.1.2011, 11:19 | ||
ну не знаю у меня все работает
|
| Автор: 123lexx321 30.1.2011, 11:52 |
| у меня b[] объявлен как char, ну и соответственно все элементы матрицы символы. может можно как то проще вывести элементы из StringGrid в Label (в определённом порядке) |
| Автор: Dem_max 30.1.2011, 12:00 |
| объяви как int |
| Автор: 123lexx321 31.1.2011, 18:07 |
| у меня b[] объявлен как char, ну и соответственно все элементы матрицы символы. может можно как то проще вывести элементы из StringGrid в Label (в определённом порядке) |
| Автор: Dem_max 31.1.2011, 19:34 | ||||
тогда проще
|
| Автор: 123lexx321 1.2.2011, 18:35 | ||
| Итог тот же. is not a valid integer value Вообще лечше весь код выложу чтоб было понятно что куда
цикл начинается с центра матрицы, на нем же и ошибка появляется |
| Автор: xvr 2.2.2011, 13:03 |
Видимо где то у вас в гриде лежит нечто не похожее на число. StrToInt на это бросает эксепшен, который вы и видите |
| Автор: 123lexx321 2.2.2011, 18:03 | ||
ну там как бы во всем гриде символы лежат |
| Автор: xvr 2.2.2011, 22:46 | ||
Ну тогда StrToInt имеет полное право бросать эксепщены - она ожидает увидеть на входе строку с числом в ней, а не произвольный символ. Т.е. "0", "123" или "8765" подойдут, а "Число" - даст эксепшен Если вам нужен код первого символа из ячейки грида, то так и пишите:
И то сломается, если в ячейке грида будет пустая строка (т.е. не будет у нее первого символа) |
| Автор: 123lexx321 3.2.2011, 18:28 |
мне нужно данные всего грида(данные это текс) вывести в определённом порядке на экран (Label? Edit?) Может есть какие то идеи, как это по другому можно сделать? Лучше наглядно |
| Автор: xvr 3.2.2011, 20:46 | ||||
Грид - это 2х мерный массив. Label - это 1 строка. Как вы представляете себе вывод 2х мерного массива в виде 1 строки? Если вам надо соединить вместе текст из всех ячеек грида и вывести то, что получилось, то так и пишите:
|
| Автор: 123lexx321 4.2.2011, 16:57 | ||||||
сделал как написано. выдаёт illegal structure operation |
| Автор: xvr 4.2.2011, 18:59 |
| В каком месте выдает? |
| Автор: 123lexx321 4.2.2011, 19:11 | ||
на этом b+=StringGrid1->Cells[col][row]; |
| Автор: Dem_max 4.2.2011, 19:20 |
| потому что за пределы Cells[col][row]; наверное выходим |
| Автор: 123lexx321 4.2.2011, 19:21 | ||
да нет, начинается как раз с центра матрицы, как и задумано.... |
| Автор: xvr 4.2.2011, 19:39 | ||||
Не должно. Дайте всю функцию, что то там у вас не так описано |
| Автор: 123lexx321 4.2.2011, 19:53 | ||
вот
|
| Автор: xvr 5.2.2011, 16:39 |
| В строке 44 тип переменной b должен быть не массив символов, а AnsiString. Внимательно посмотрите мое исходное сообщение - строка 1 в листинге |
| Автор: 123lexx321 5.2.2011, 18:57 | ||
Да точно. Ох уж эта моя невнимательность. Спасибо большое. Все заработало. |