UnixODBC и MySQL

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Harunaga
Сообщения: 1
Зарегистрирован: 23 янв 2006, 13:28

Пишу программу, которая должна уметь работать как с MySQL, так и с PostgreSQL и Oracle. Самый легкий путь - ODBC.

Столкнулся с некоторыми проблемами. Делаю запрос select:

Код: Выделить всё

  SQLBindCol(conf->hstmtSQL,1,SQL_C_USHORT, &id, sizeof(id), &errSQL);
  SQLBindCol(conf->hstmtSQL,2,SQL_C_CHAR, &hostname, sizeof(hostname), &errSQL);
  SQLBindCol(conf->hstmtSQL,3,SQL_C_CHAR, &ip, sizeof(ip), &errSQL);
  SQLBindCol(conf->hstmtSQL,4,SQL_C_CHAR, &community, sizeof(community), &errSQL);
  SQLBindCol(conf->hstmtSQL,5,SQL_C_CHAR, &nas_id, sizeof(nas_id), &errSQL);
  SQLBindCol(conf->hstmtSQL,6,SQL_C_CHAR, &if_nas_name, sizeof(if_nas_name), &errSQL);
  SQLBindCol(conf->hstmtSQL,7,SQL_C_UTINYINT, &type, sizeof(type), &errSQL);

result=SQLExecDirect(conf->hstmtSQL,
    "SELECT id, hostname, ip, rcommunity, nas_id, if_nas_name, type FROM devices WHERE status=1",SQL_NTS);

  i=0;
  result=SQLFetch(conf->hstmtSQL);
  while(result != SQL_NO_DATA)
  {
    conf->routers[i].name=strdup(hostname);
    conf->routers[i].alias=strdup(nas_id);
    conf->routers[i].id=id;
    conf->routers[i].if_nas_name=strdup(if_nas_name);
    conf->routers[i].ip=inet_addr(ip);
    conf->routers[i].community=strdup(community);
    conf->routers[i].type=type;
    result=SQLFetch(conf->hstmtSQL);
    i++;
  }
Проблема в том, что, например, поле nad_id может имет значение NULL, в этом случае при выполнении очередного SQLFetch значение буфера nas_id никак не изменится. Как определить, что присутствует NULL?

И еще проблема. При дисконекте второй раз невозможно соединиться базой из того же процесса, появляется ошибка:

Character set 'koi8r' is not a compiled character set and is not specified in the '/usr/local/share/mysql/charsets/Index.xml' file

[unixODBC][MySQL][ODBC 3.51 Driver]Can't initialize character set koi8r (path: /usr/local/share/mysql/charsets/) (2019)

Причем все приложения, не использующие ODBC, работают с MySQL нормально.

В чем может быть дело?
Ответить