C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ODBC и C++Builder 6.0, Знатоки, отзовитесь...
Mr.Dan
  Отправлено: 05.02.2004, 18:42


Не зарегистрирован







Всем привет!!!

Перешарил кучу форумов, но так и не встречал такой проблемы, которая у меня возникает, вернее никто так и не смог объяснить.
Значит пытаюсь работать с ODBC. Конфигурация такая: Windows XP, С++Builder 6.0.

Что делал:
1) implib.exe /a odbc32.lib windows\system32\odbc32.dll
implib.exe /a odbccp32.lib windows\system32\odbccp32.dll
2) Добавил эти либы в проект через меню Project->Add to Project...
3) В прогу включил нужные заголовки:
#include
#include
#include
4) В проге пишу такой код:
CODE
const short SQL_MAX=255;
   UCHAR   szDSN[ SQL_MAX+1 ];
   UCHAR   szDescription[ 256 ];
   short   wDSNLen;
   short   wDesLen;
   int retCode;
   SQLHENV  hEnv=NULL;
   AnsiString DSNName;
   SQLAllocEnv( &hEnv );
   retCode = SQLDataSources( hEnv, SQL_FETCH_FIRST,
                      szDSN, SQL_MAX+1, &wDSNLen,
                      szDescription, 256, &wDesLen );


При запуске этот код отрабатывает нормально, но если я пытаюсь добавить цикл, в котором будут последовательно перебираться DSN, т.е делаю так:
CODE
const short SQL_MAX=255;
 UCHAR   szDSN[ SQL_MAX+1 ];
 UCHAR   szDescription[ 256 ];
 short   wDSNLen;
 short   wDesLen;
 int retCode;
 SQLHENV  hEnv=NULL;
 AnsiString DSNName;
 SQLAllocEnv( &hEnv );
 retCode = SQLDataSources( hEnv, SQL_FETCH_FIRST,
                    szDSN, SQL_MAX+1, &wDSNLen,
                    szDescription, 256, &wDesLen );
   while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO )
 {
    DSNName = (AnsiString)((char *)szDSN);
    retCode = SQLDataSources( hEnv, SQL_FETCH_NEXT,
                       szDSN, SQL_MAX+1, &wDSNLen,
                       szDescription, 256, &wDesLen );
 }
 SQLFreeEnv( hEnv );


То уже в этом случае программа ругается: Access violation at address...
Но почему?! Без цикла отрабатывает, а в цикле ругается??? Более того пробовал использовать другие ф-ии ODBC API, там примерно такая же ситуация, только ругалось уже более конкретно: Access violation at address...in module 'ODBC32.DLL'. Никак не могу понять... или библиотека импорта криво построилась или на этом мысли заканчиваются.....

Хэлп!!! Помогите, а то уже совсем ничего не понимаю.......что, где я сделал неправильно?!

Заранее благодарен.

olegenty
Отправлено: 18.02.2004, 10:13


Ветеран

Группа: Модератор
Сообщений: 2412



Ответ не совсем в тему, но можешь посмотреть вот эти компоненты. Они бесплатны и с исходниками. По крайней мере, сможешь исходники посмотреть.
http://www.torry.net/db/direct/db_odbc/modbc.zip
Когда-то я ими пользовался. Ничего, работали.

Вернуться в Работа с базами данных в C++Builder