Форум программистов, компьютерный форум CyberForum.ru

ODBC - C++

Восстановить пароль Регистрация
 
gCorn
10 / 10 / 2
Регистрация: 02.08.2011
Сообщений: 28
26.10.2011, 19:19     ODBC #1
Столкнулся с такой проблемой при работе с базой данных.
Вот таким образом я читаю определенную строку из базы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CString str;
    str.Format("SELECT field2 FROM table WHERE field1 = %d;",id);
    
    CRecordset rec(db);
    CDBVariant var;
    
    rec.Open(CRecordset::forwardOnly,str,CRecordset::readOnly);
    
    if(rec.IsEOF())
    {
        return CString("Пусто");
    }
 
    rec.GetFieldValue(short(0),var);
        str=*var.m_pstring;
    rec.Close();
    return str;
Но если поле, где должна быть строка не заполнено, то программа вылетает. Пытался к строке понежнее подойти всякими IsEmpty() но все равно вылетает.

Добавлено через 4 часа 30 минут
там генерируется исключение "Access Violation" при обращении к строке. Помощь нужна срочно =\

Добавлено через 33 минуты
Может можно самому поймать это исключение и как-то обработать?
я как-то не силен в этом...

Добавлено через 1 час 7 минут
пока искал ответ сочинил две оды майкрософтам....
в классе CDBVariant есть поле m_dwType;
которое принимает некоторые значения, отталкиваясь от которого можно понять кое значение из его полей является валидным. В том числе есть значение DBVT_NULL при котором как бы ни одно значение не является валидным, однако на деле если читается пустое поле то это поле вместе со всеми принимает случайное значение зависящее от положения небесных тел или еще чего.
НО! Самое эпичное из того что я выяснил по этой теме, что вроде как когда читаешь пустое строковое поле, то m_dwType не является DBVT_STRING.
msdn дает нам простор для изучения любимых технологий ^^

P.S.: Извиняюсь за репост (я создал такую же тему в разделе Visual c++ и базы данных, называется "VC++ && MS access")
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 19:19     ODBC
Посмотрите здесь:

ODBC, параметры по умолчанию C++
Perl ODBC+mySQL, Изучаю модуль ODBC
Microsoft OLE DB Provider for ODBC Drivers error '8007000e' [Microsoft][ODBC Microsoft Access Driver] Cannot open any more tables. C# ASP.NET
C++ Как сделать инсталяцию ODBC так, чтобы она напрягала клиента наименьшим образом?
VC+ODBC+mdb+memo+ C++
C++ Можно ли с помощью ODBC создавать файлы dBase?
Как открыть конкретную таблицу через ODBC C++
подключение к mysql через odbc на fedora C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 16:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru