mysql ++ запрос терпит неудачу - PullRequest
1 голос
/ 14 июля 2011

Я новый пользователь mysql ++ и ищу несколько указателей (каламбур).

Проблема : мой оператор обновления не выполнен.

Соединение открыто,Предыдущее утверждение, использующее соединение, работает.

Я уверен, что запись, которую я пытаюсь обновить, существует.Я могу видеть это с помощью инструментов запросов MySQL.Я уверен, что CustomerId указан правильно.

     // declaration of the customer id
     uint32_t CustomerId;

Почему это не удается обновить?

   mysqlpp::Connection conn( true );
   try
   {
      if ( conn.connect( db_rw.Name, db_rw.Host, db_rw.User, db_rw.Password ) )
      {

         // *snip*  insert code here works fine.

         // this query fails
         mysqlpp::Query query = conn.query( "UPDATE customer SET AccountName=%2q, Active=%3, Password=%1 WHERE CustomerId=%0" );
         query.parse();
         mysqlpp::SQLQueryParms parms;
         parms.push_back( mysqlpp::sql_int( CustomerId ) );
         parms.push_back( mysqlpp::sql_blob( data, sizeof(data) ) ); //<- 16 byte binary blob
         parms.push_back( mysqlpp::sql_varchar( widget.AccountName->text().toAscii().data() ) );  // string
         parms.push_back( mysqlpp::sql_bool( widget.ActiveCheckBox->checkState() == Qt::Checked ? 1 : 0 ) );  // 
         mysqlpp::SimpleResult res = query.execute( parms );
      }
   }

Если я отключаю исключения для соединения, оно молча завершается неудачей (result.info () метод ничего не возвращает)

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Было несколько проблем.

Библиотека неправильно экранирует двоичные данные.

Если пользователь, связанный с соединением, не имеет разрешения на обновление, библиотека вылетит, а не выдаст исключение.

1 голос
/ 14 июля 2011

Уоррен избил меня до ответа в списке рассылки, но для потомков:

BLOB данные (Password) должны быть заключены в кавычки и экранированы.

Использование вместо этого SSQLSшаблонных запросов обрабатывает это автоматически.

http://tangentsoft.net/mysql++/doc/html/userman/tutorial.html#id2776204

...