Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Конкатенация двух CString не работает  (Прочитано 16091 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ezus
Опытный

il
Offline Offline

« : 07-07-2008 12:21 » 

Все - крыша уехала.
////////////////////////////////////////////////////////////
   CString stmp1;
   CString stmp2;
   CString txt;
   CString selsql;

   txt = prepText( r->_txt, true );

   stmp1 = "update items set ";
   stmp1 += "txt = '"   + txt + "' ";
   
   stmp2.Format(" where item = %d and event = %d  ",
                   r->_item, r->_event );


   selsql = stmp1 + stmp2;
//////////////////////////////////////////////////////////
"+" не работает.
selsql == stmp1

Хоть какой-нибуть намек на причину.
Что с этим можно сделать?
Спасибо.

Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 07-07-2008 12:32 » 

что делает prepText ?
каковы типы
r->_item
r->_event
?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 07-07-2008 12:34 » 

вот такой код работает
Код:
CString stmp1;
   CString stmp2;
   CString txt;
   CString selsql;

   txt = "1111";//prepText( r->_txt, true );

   stmp1 = "update items set ";
   stmp1 += "txt = '"   + txt + "' ";
   
   stmp2.Format(" where item = %d and event = %d  ",
                   7,8/*r->_item, r->_event */);


   selsql = stmp1 + stmp2;
Записан

ezus
Опытный

il
Offline Offline

« Ответ #3 : 07-07-2008 13:00 » 

r->_item  и r->_event - int

prepText  возвращает строку

{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil\\fcharset204 MS Sans Serif;}}\\r\\n\\viewkind4\\uc1\\pard\\lang1049\\f0\\fs17 \\r\\n\\par }\\r\\n

То что это в принципе работает - это понятно.
Я проверил с теми же данными в тестовом примере - все ОК.
А в самой программе работать не хочет.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 07-07-2008 13:16 » 

тут ведь ещё вот чего... Что подразумевается под "не работает" ?

а может тут
\\r\\n
не нужны двойные слеши ?
Записан

ezus
Опытный

il
Offline Offline

« Ответ #5 : 07-07-2008 14:29 » 

Не работает - это значит, что  a = b + c получаем a == b при непустом b.

А \\r\\n нужны, чтобы они не сработали как \r\n, а сохранились в базе на потом.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 07-07-2008 14:32 » 

ezus, ))) Так у тебя между a и b где ентер затесался, покажи HEX обоих строк перед сложением и HEX результата (длину доставай через GetLength() )
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 07-07-2008 14:34 » 

а в базе всё сохранится, кстати
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 07-07-2008 14:35 » 

Код:
CString stmp1;
   CString stmp2;
   CString txt;
   CString selsql;

   txt = "{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil\\fcharset204 MS Sans Serif;}}\\r\\n\\viewkind4\\uc1\\pard\\lang1049\\f0\\fs17 \\r\\n\\par }\\r\\n";

   stmp1 = "update items set ";
   stmp1 += "txt = '"   + txt + "' ";
  
   stmp2.Format(" where item = %d and event = %d  ",7,8);


   selsql = stmp1 + stmp2;

получается
Код:
update items set txt = '{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset204 MS Sans Serif;}}\r\n\viewkind4\uc1\pard\lang1049\f0\fs17 \r\n\par }\r\n'  where item = 7 and event = 8  

что где пропало ? Улыбаюсь

и всё таки тебе надо \r\n
Записан

ezus
Опытный

il
Offline Offline

« Ответ #9 : 08-07-2008 06:01 » 

Спасибо Всем.

Мой сын обругал меня, что я не хочу докапаться до истины, но
1. Мне уже надоело докапываться, я хочу решать задачи, а не бороться с инструментом. Такие радости для молодых, и я их понимаю, сам через это прошел. Но со временем это надоедает.
2. Просто нет времени - и это главное.

Вместо
s1 = s2 + s3;

написал
s1.Format("%s%s", s2,s3);

Бред, конечно, но сработало.

Еще раз - всем спасибо.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 08-07-2008 06:28 » 

хм, а почему у меня всё нормально складывается ?
Записан

ezus
Опытный

il
Offline Offline

« Ответ #11 : 08-07-2008 07:02 » 

В этом и вопрос. Чтобы на него ответить, похоже, надо рыть слишком глубоко, или ошибка на уровне тупой описки, которую без использования метода "пустой головы" мне не найти.
Или просто переписать код - а на это жалко времени.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 08-07-2008 07:19 » 

да всё делается гораздо проще: отладчик. Всё станет на места в миг Улыбаюсь
Записан

ezus
Опытный

il
Offline Offline

« Ответ #13 : 08-07-2008 12:36 » 

Это я и имею ввиду.
Отладчик на уровне программы ничего не дает.
А дальше надо погружаться в код системы, на что и нет времени.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 08-07-2008 17:01 » 

ezus, не надо никуда погружаться Улыбаюсь Покажи содержимое строк до сложения и содержимое результата
Записан

ezus
Опытный

il
Offline Offline

« Ответ #15 : 09-07-2008 05:26 » new

Спасибо, но это сейчас уже не актуально.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines