Официальный сайт студ.городка НГТУ
Программирование и БД » Работа с ODBC в MSVS (С++) 

#1  07.06.07 16:30

asp
Профиль

Работа с ODBC в MSVS (С++)

Делаю

Код: С++:

CDatabase m_db1;
CRecordset m_rs1;
m_db1.OpenEx( _T( "DSN=BSS_TEST;UID=dba" ), CDatabase::openReadOnly | CDatabase::noOdbcDialog );
m_rs1.m_pDatabase = & m_db1;
m_rs1.Open( CRecordset::dynaset, _T("SELECT AUTOKEY FROM ACCOUNTS;") );

И ничего не получаю. Падает в ошибке

Ungandled exception at 0x..... in ....exe
Microsoft C++ exception: CDBException at memory location 0x....

предлагает Break или Continue. На Continue вываливается в

Debug Assertion Failed

и ссылается на файл (которого, разумеется, не существует, как и диска f: в целом) f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxdb.inl Line 70

У кого есть пример работы с этим чудом? Из инета пробовал - то же самое. Ощущение, будто какой-то шаг пропускаю....

Offline

#2  07.06.07 17:12

Re: Работа с ODBC в MSVS (С++)

может, стоит перехватить CDBException и посмотреть откуда он вылетает, а также инфу с этого эксепшена

Offline

#3  07.06.07 20:32

asp
Профиль

Re: Работа с ODBC в MSVS (С++)

utug, где по этому поводу можно порыть? Насколько он мне дал зарыться в него, он пытается поменять поля местами (так и не понял, для чего), в том числе, если вместо запроса NULL. В тех "краях" и валится... Явно не дает посмотреть по причине недостаточности данных (что-то типа "нет срр файла). Уж не ODBC ли "валится"? :((

Offline

#4  10.06.07 23:35

Re: Работа с ODBC в MSVS (С++)

Перед тем как в рекордсете пытаться получить данные, неплохо бы проверить - открыт коннект или нет. Судя по всему, коннект у тебя не открывается, а использовать ты его пытаешься, вот и получаешь ексепшен. Оберни в try.. catch и все увидишь

Offline

#5  12.06.07 20:52

Re: Работа с ODBC в MSVS (С++)

Давно конечно это было помню смутно и т.д. но попробуй вместь Debug поставить Relise (я про текущую конфирацию). В 6ой студии какая то беда была с этим.

Offline

#6  13.06.07 14:10

asp
Профиль

Re: Работа с ODBC в MSVS (С++)

_|ex, да, слышал про такое. Пробовал, эффект нулевой.
Мерзкий, коннект открывается валится на p_rs1->Open:

Код: С++:

CDatabase * p_db1 = new CDatabase;
try
{
	ASSERT(p_db1);
	p_db1->OpenEx( _T( "DSN=BSS_TEST" ), 0 );
	if (p_db1->IsOpen())
	{
		CRecordset * p_rs1 = new CRecordset(p_db1);
		ASSERT(p_rs1);
		p_rs1->m_nFields = 5;
		p_rs1->Open(CRecordset::snapshot, _T("SELECT * FROM ACCOUNTS"), CRecordset::none);
 
		if (p_rs1->IsOpen())
		{
			CString strOut;
 
			while (!p_rs1->IsEOF())
			{
				p_rs1->GetFieldValue(2,strOut);
				p_rs1->MoveNext();
			}
		}
	}
}
catch (char *str)
{
	int x;
}

а в catch даже не пытается падать

Исправлено asp (13.06.07 14:22)

Offline

Программирование и БД » Работа с ODBC в MSVS (С++) 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 2.012 сек.
Выполнено 11 запросов.