powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC, SQLConnect - строка соединения
7 сообщений из 7, страница 1 из 1
ODBC, SQLConnect - строка соединения
    #34130769
Фотография pacify
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Пишу простенькое приложение для работы с базами данных через ODBC на C++ под Windows и Linux (mingw32/wine).
Тестирую с базами MS Access. Но, по-видимому, нижеприведенный код выдает ошибку из-за неправильной строки соединения.
Подскажите, пожалуйста, правильную строку соединения для MDB-базы. Файл test.mdb существует и корректен -
он без ошибок подключается при указании источника данных "test".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
//#define szSource "test" // источник данных определен в системе и подключается
#define szSource "Driver={Microsoft Access Driver (*.mdb)};DBQ=test.mdb;" // не подключается
  ....
  int nResult;

  SQLRETURN nReturn;
  SQLHENV hEnv;
  SQLHDBC hDBC;
  SQLHSTMT hStmt;

  printf("ODBC Version: %04X,%04X\n",ODBCVER,0x0300);

  nResult = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
  printf("SQLAllocHandle: %d\n",nResult);
  nResult = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3,  0 );
  printf("SQLSetEnvAttr: %d\n",nResult);
  nResult = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC);
  printf("SQLAllocHandle: %d\n",nResult);
  nResult = SQLConnect(hDBC, (SQLTCHAR *)szSource, SQL_NTS, (SQLTCHAR *)szUsername, SQL_NTS, (SQLTCHAR *)szPassword, SQL_NTS);
  printf("SQLConnect: %d\n",nResult);

  printMessage(SQL_HANDLE_DBC, hDBC);
  ....

Нижеприведенный текст ошибки и коды ошибок возвращаются и под Windows, и под Linux (wine).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$ /usr/lib/wine/wine.bin begin.exe
fixme:ver:VERSION_GetLinkedDllVersion Unknown EXE OS version  4 . 0 , please report !!
ODBC Version:  0351 , 0300 
SQLAllocHandle:  0 
SQLSetEnvAttr:  0 
SQLAllocHandle:  0 
SQLConnect: - 1 
ErrorMsg=[unixODBC][Driver Manager]Invalid string or buffer length
ErrorCode= 0 
nResult= 0 
...
Рейтинг: 0 / 0
ODBC, SQLConnect - строка соединения
    #34130858
pandrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pacifyЗдравствуйте. Пишу простенькое приложение для работы с базами данных через ODBC на C++ под Windows и Linux (mingw32/wine).
Тестирую с базами MS Access. Но, по-видимому, нижеприведенный код выдает ошибку из-за неправильной строки соединения.
Подскажите, пожалуйста, правильную строку соединения для MDB-базы. Файл test.mdb существует и корректен -
он без ошибок подключается при указании источника данных "test".

про Unix не скажу, а в Windows создать и проверить соединение с БД, можно используя udl-файл
...
Рейтинг: 0 / 0
ODBC, SQLConnect - строка соединения
    #34131133
itsme8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Был когда-то набрёл на такой интересный сайт
http://www.connectionstrings.com/
...
Рейтинг: 0 / 0
ODBC, SQLConnect - строка соединения
    #34131255
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ODBC есть две функции: SQLConnect() и SQLDriverConnect()
SQLConnect() в качестве первого параметра принимает имя предопределенного DSN. И только имя DSN!
Если не хочешь создавать DSN, а хочешь давать строку подключения напрямую, то надо использовать SQLDriverConnect().
...
Рейтинг: 0 / 0
ODBC, SQLConnect - строка соединения
    #34131395
Фотография pacify
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВ ODBC есть две функции: SQLConnect() и SQLDriverConnect()
SQLConnect() в качестве первого параметра принимает имя предопределенного DSN. И только имя DSN!
Если не хочешь создавать DSN, а хочешь давать строку подключения напрямую, то надо использовать SQLDriverConnect().
Спасибо. SQLDriverConnect() под Windows работает как надо. Запросы к базе данных проходят.
Осталось понять, почему ODBC-драйвер Access под Linux не понимает параметра DBQ.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
/usr/lib/wine/wine.bin begin.exe
...
SQLAllocHandle:  0 
SQLSetEnvAttr:  0 
SQLAllocHandle:  0 
SQLDriverConnect: - 1 
ConnectionString: 
ErrorMsg=[unixODBC]Could not find DSN in connect string
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
/etc/odbcinst.ini:
[{Microsoft Access Driver (*.mdb)}]
Description = Microsoft Access Driver
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage = 1
CPTimeout =
CPReuse =
...
Рейтинг: 0 / 0
ODBC, SQLConnect - строка соединения
    #34131451
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pacifyОсталось понять, почему ODBC-драйвер Access под Linux не понимает параметра DBQ.А фиг его знает... Это надо брать описание данного конкретного драйвера и смотреть в нем. Возможно там надо вместо DBQ писать какое-то другое слово или он вообще не хочет жить без DSN. К сожалению, все ключевые слова строки соединения кроме слов Driver и DSN - драйверо-зависимые.

А может быть оно просто не может найти mdb файл или не может открыть его на чтение-запись?
...
Рейтинг: 0 / 0
ODBC, SQLConnect - строка соединения
    #34131503
Фотография pacify
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА фиг его знает... Это надо брать описание данного конкретного драйвера и смотреть в нем. Возможно там надо вместо DBQ писать какое-то другое слово или он вообще не хочет жить без DSN. К сожалению, все ключевые слова строки соединения кроме слов Driver и DSN - драйверо-зависимые.
Посмотрел исходники mdbtools версии 0.5 отсюда - http://mdbtools.sourceforge.net/
Похоже, оно действительно не поддерживает параметра DBQ.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC, SQLConnect - строка соединения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]