Первым делом поздравляю всех с наступающим!
Люди возникла такая проблема есть цикл:
while (is.get(ch)) //Читаем из файла
{
string a = "insert into ATSlog(log) values(\"";
if ( ch != '\n' )//собираем строку....
{ //пробовал getline
str += ch; //все то же самое
} //
else
{
a += str;//собираем запрос
a += c; //----------
char *ab = new char [a.size()];// выделяем место под массив char
strcpy(ab, a.data()); //string в char ???
//
//if (mysql_query(&mysql,ab))
{
cout<<"Er1\n";
exiterr(3);
}
str = "";
delete[] ab;
a="";
}
}
Суть в следующем: из файла постоянно читается информация,
потом она вставляется в mysql запрос, происходит это следующим образом
есть первая часть запроса к ней плюсуется информация из файла и плюс
третья часть которая закрывает запрос. Потом (т.к. этот запрос типа string ) все конвертируется в char "strcpy(ab, a.data()); ", вставляется в запрос и он идет на исполнение.
Проблема заключается в следующем: при первом прохождении цикла все проходит хорошо, запрос собирается и исполняется запись в базу тоже происходит, НО на втором проходе запрос НЕ собирается т.е. берется только первая его часть (хотя проверяли ... есть все части) а остальное каким то образом обрубается?!
Вопрос простой :) ПОЧЕМУ??? Ведь логично подумать если первый раз прошел то и второй пройдет.....или нет??!!
Жду ваших советов и предложений...
>Жду ваших советов и предложений...Что никто не знает? Или слушком простой вопрос что в лом ответить?
Я забыл сказать что данные идут с сом порта и уже выяснил что от туда проскакивает какой то символ (толи конец строки то ли еще что то) но вот какой? и как его обрубить?
>
>>Жду ваших советов и предложений...
>
>Что никто не знает? Или слушком простой вопрос что в лом ответить?
>
>Я забыл сказать что данные идут с сом порта и уже выяснил
>что от туда проскакивает какой то символ (толи конец строки то
>ли еще что то) но вот какой? и как его обрубить?
>
могу сказать, что у меня mesql работал без проблем
но у меня был чиста С
может, везде syslog или printf натыкать?
скорее всего с буфером проблемы, но в С++ с отлавливанием ошибок проблемы
Незнаю, как насчет обрубания, но если "a.size()" - это аналог "strlen(char *)", то я бы в выделении памяти ставил "[a.size()+1]" всместо "[a.size()]", потому как последний нолик (ограничитель строки ASCII) вылезет за пределы твоего "char *ab". Возможно, в этом и проблема.
>Незнаю, как насчет обрубания, но если "a.size()" - это аналог "strlen(char *)",
>то я бы в выделении памяти ставил "[a.size()+1]" всместо "[a.size()]", потому
>как последний нолик (ограничитель строки ASCII) вылезет за пределы твоего "char
>*ab". Возможно, в этом и проблема.Спасибо проблема уже решена :)
Надо было просто последние символы обрубать и '\n' и '\0'
они делали перевод строки и запрос не складывался :)
>>Незнаю, как насчет обрубания, но если "a.size()" - это аналог "strlen(char *)",
>>то я бы в выделении памяти ставил "[a.size()+1]" всместо "[a.size()]", потому
>>как последний нолик (ограничитель строки ASCII) вылезет за пределы твоего "char
>>*ab". Возможно, в этом и проблема.
>
>Спасибо проблема уже решена :)
>Надо было просто последние символы обрубать и '\n' и '\0'
>они делали перевод строки и запрос не складывался :)странный код
а зачем тебе так необходимо из стринга char* делать??
>странный код
>а зачем тебе так необходимо из стринга char* делать??это я собираю запрос для mysql в него надо вставлять данные а это
проще делать со строками, а конвертировать в чар надо т.к. запрос может быть тока чар* остальное не проходит :(Но на самом деле все уже сделано.... :)
И между прочим работает!
>>странный код
>>а зачем тебе так необходимо из стринга char* делать??
>
>это я собираю запрос для mysql в него надо вставлять данные а
>это
>проще делать со строками, а конвертировать в чар надо т.к. запрос может
>быть тока чар* остальное не проходит :(
>
>Но на самом деле все уже сделано.... :)
>И между прочим работает!
ну работать то работает но естетики ни какой:)
почему бы не сделать так:
mysql_query(&mysql,a.c_str()) ???
ну в крайнем случае mysql_query(&mysql,(char *)a.c_str())
>ну работать то работает но естетики ни какой:)
>почему бы не сделать так:
>mysql_query(&mysql,a.c_str()) ???
>ну в крайнем случае mysql_query(&mysql,(char *)a.c_str())спасибо попробую.
Просто я недавно тока начал писать и многое еще
приходиться выдумывать на ходу а потом уже если получится
приводить в божеский вид :)