The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"UnixODBC и MySQL"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"UnixODBC и MySQL"  
Сообщение от Harunaga on 24-Янв-06, 09:24 
Пишу программу, которая должна уметь работать как с 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 нормально.

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

Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

  • UnixODBC и MySQL, Hordi, 10:48 , 24-Янв-06, (1)   +
    • UnixODBC и MySQL, Harunaga, 17:38 , 24-Янв-06, (2)   +
      • UnixODBC и MySQL, Harunaga, 16:10 , 25-Янв-06, (3)  

Сообщения по теме [Сортировка по времени, UBB]


1. "UnixODBC и MySQL"  
Сообщение от Hordi email on 24-Янв-06, 10:48 
В этих строках
>  SQLBindCol(conf->hstmtSQL,1,SQL_C_USHORT, &id, sizeof(id), &errSQL);
>  SQLBindCol(conf->hstmtSQL,2,SQL_C_CHAR, &hostname, sizeof(hostname), &errSQL);
...

errSQL - переменная, которая будет содержать длину полученного поля, поэтому для каждого из полей это должна быть собственная переменная, а не общая как у тебя.
После выполнения SQLFetch ты сможешь сравнить эту переменную с SQL_NULL_DATA и узнать то что спрашиваешь.

Вроде так...

Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "UnixODBC и MySQL"  
Сообщение от Harunaga on 24-Янв-06, 17:38 
>В этих строках
>>  SQLBindCol(conf->hstmtSQL,1,SQL_C_USHORT, &id, sizeof(id), &errSQL);
>>  SQLBindCol(conf->hstmtSQL,2,SQL_C_CHAR, &hostname, sizeof(hostname), &errSQL);
>...
>
>errSQL - переменная, которая будет содержать длину полученного поля, поэтому для каждого
>из полей это должна быть собственная переменная, а не общая как
>у тебя.
>После выполнения SQLFetch ты сможешь сравнить эту переменную с SQL_NULL_DATA и узнать
>то что спрашиваешь.
>
>Вроде так...

Действительно, заработало, спасибо. А вот как решить вторую проблему? Она возникает со всеми приложениями, использующими ODBC.

Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "UnixODBC и MySQL"  
Сообщение от Harunaga on 25-Янв-06, 16:10 
Ошибка в mysql-client.

Решение проблемы:

--- mysys.orig/my_init.c        Thu Dec  1 01:36:00 2005
+++ mysys/my_init.c     Wed Jan 25 17:37:18 2006
@@ -152,6 +152,7 @@
       DBUG_PRINT("error",("%s",errbuff[0]));
     }
   }
+  free_charsets();
   my_once_free();

   if ((infoflag & MY_GIVE_INFO) || print_info)

Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру