Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Boost ODBC проблемы соединения


Автор: boostcoder 5.9.2010, 04:41
всем доброго утра.

по работе с БД - новичек. прошу не пинать за глупые вопросы.

и так...
нужно поработать с БД из клиентского приложения. есть удаленный MySQL сервер, который прекрасно работает.
для "общения" с сервером, выбрал http://code.google.com/p/boost-rdb/, ибо самая абстрактная.
накатал микропримерчик:
Код

#include <iostream>
#include <boost/rdb/sql.hpp>
#include <boost/rdb/odbc.hpp>

using namespace boost::rdb::sql;
using namespace boost::rdb::odbc;

/***************************************************************************/

int main(int argc, char** argv) {
   try {
      database db("server=123.45.67.89 database=anyDB", "anyuser", "blablabla");
   } catch (const std::exception& e) {
      std::cout << e.what() << std::endl;
   }

   return EXIT_SUCCESS;
}

/***************************************************************************/

попробовал скомпилить, и понял, что не хватает либ/хидеров.
лазая по гуглу, понял, что нужен ODBC коннектор. скачал, собрал, проинсталил http://dev.mysql.com/downloads/connector/odbc/#downloads.
все, теперь мой экзампл компилится.
при запуске получаю это:
Цитата

[MySQL][ODBC 5.1 Driver]Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

не понимаю, почему он пытается коннектиться на локальную БД?
по сей либе только http://www.yorel.be/boost/libs/rdb/doc/html/rdb/tutorial.html дока.
БД на том конце провода живая. могу к ней подключиться используя mysql терминал.

зы
модераторы, перенесите в соответствующий раздел. я так и не понял к какому разделу моя тема соотносится.

Автор: jonie 5.9.2010, 12:53
ну есть мнение что коннекшен стринг у вас неверный.
тут можнт глянуть http://www.connectionstrings.com/mysql

Автор: boostcoder 6.9.2010, 17:53
перепробовал десятки комбинаций. не коннектиться.
в общем, подумав в более удобной обстановке, пришел к выводу, что boost.rdb мне нужна только из-за возможности писать SQL запрос в виде С++ кода. в остальном, оно мне не нравится. http://soci.sourceforge.net/ как-то по лучше спроектирована. но SQL запросы писать в ней нужно по старинке  smile 

но при попытке скомпилить минимальный пример:
Код

#include <iostream>
#include <boost/fusion/include/io.hpp>
#include <boost/rdb/sql.hpp>
#include <boost/rdb/odbc.hpp>

using namespace boost::rdb::sql;
using namespace boost::rdb::odbc;

BOOST_RDB_BEGIN_TABLE(person) 
   BOOST_RDB_COLUMN(id, integer)
   BOOST_RDB_COLUMN(name, varchar<20>)
   BOOST_RDB_COLUMN(age, integer)
BOOST_RDB_END_TABLE(person) 

template<class T>
std::string to_str(const T& obj) {
   std::ostringstream os;
   obj.str(os);
   return os.str();
}

int main() {
   person p;
   std::string str = to_str(select(p.name, p.age).where(p.id == 0));
   std::cout << str << std::endl;

   return 0;
}


получаю такую ошибку:
Цитата

boost/rdb/sql/expression.hpp: In instantiation of 'boost::rdb::sql::extract_placeholders_from_list::result<boost::rdb::sql::extract_placeholders_from_list(const boost::fusion::vector<>&, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >&)>':

boost/utility/result_of.hpp:68:1:   instantiated from 'boost::detail::result_of_nested_result<boost::rdb::sql::extract_placeholders_from_list, boost::rdb::sql::extract_placeholders_from_list(const boost::fusion::vector<>&, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >&)>'

boost/utility/result_of.hpp:75:1:   instantiated from 'boost::detail::result_of_impl<boost::rdb::sql::extract_placeholders_from_list, boost::rdb::sql::extract_placeholders_from_list(const boost::fusion::vector<>&, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >&), false>'

boost/utility/detail/result_of_iterate.hpp:24:109:   instantiated from 'boost::result_of<boost::rdb::sql::extract_placeholders_from_list(const boost::fusion::vector<>&, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >&)>'

boost/fusion/algorithm/iteration/detail/fold.hpp:48:80:   instantiated from 'boost::fusion::detail::fold_apply<boost::fusion::vector<>, boost::fusion::vector_iterator<boost::fusion::vector<boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::integer, person_<0>::age_base> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, 0>, boost::rdb::sql::extract_placeholders_from_list>'

boost/fusion/algorithm/iteration/detail/fold.hpp:209:57:   instantiated from 'boost::fusion::detail::result_of_unrolled_fold<boost::fusion::vector<>, boost::fusion::vector_iterator<boost::fusion::vector<boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::integer, person_<0>::age_base> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, 0>, boost::rdb::sql::extract_placeholders_from_list, 2>'

boost/rdb/sql/select.hpp:18:74:   instantiated from 'boost::rdb::sql::result_of::extract_placeholders_from_map_entry<boost::rdb::ct::map_entry<boost::rdb::sql::sql2003::exprs, boost::fusion::vector<boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::integer, person_<0>::age_base> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >'

boost/rdb/sql/expression.hpp:436:15:   instantiated from 'boost::rdb::sql::extract_placeholders_from_map::result<boost::rdb::ct::map_entry<boost::rdb::sql::sql2003::exprs, boost::fusion::vector<boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::integer, person_<0>::age_base> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::fusion::vector<> >'

boost/rdb/detail/static_map.hpp:56:17:   instantiated from 'boost::rdb::ct::result_of::accumulate<boost::rdb::ct::map<boost::rdb::sql::sql2003::exprs, boost::fusion::vector<boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::integer, person_<0>::age_base> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::rdb::ct::map0>, boost::rdb::sql::extract_placeholders_from_map, boost::fusion::vector<>, boost::rdb::ct::map_tag>'

boost/rdb/sql/expression.hpp:455:15:   instantiated from 'boost::rdb::sql::result_of::placeholders_from_map<boost::rdb::ct::map<boost::rdb::sql::sql2003::exprs, boost::fusion::vector<boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::integer, person_<0>::age_base> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::rdb::ct::map0> >'

boost/rdb/sql/select.hpp:78:67:   instantiated from 'boost::rdb::sql::select_statement<boost::rdb::sql::sql2003, boost::rdb::sql::sql2003::exprs, boost::rdb::ct::map<boost::rdb::sql::sql2003::exprs, boost::fusion::vector<boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::varchar<20u>, person_<0>::name_base> >, boost::rdb::sql::expression<boost::rdb::sql::column<person_<0>, boost::rdb::core::integer, person_<0>::age_base> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::rdb::ct::map0>, boost::rdb::sql::sql2003>'

boost/rdb/sql/expression.hpp:18:160: error: no type named 'placeholder_vector' in 'const struct boost::fusion::vector<>'


логично. потому что в boost::fusion::vector<>, нет свойства placeholder_vector.
лазание по хидерам, успехов не принесло.
буду благодарен любой помощи.
спасибо.

Автор: boostcoder 16.9.2010, 01:09
up.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)