C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 6 - Продолжаем открывать Recordset / ODBC / Visual C++

Шаг 6 - Продолжаем открывать Recordset

Вот полное описание функции Open:

virtual BOOL Open( UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE,
	LPCTSTR lpszSQL = NULL, DWORD dwOptions = none );
throw( CDBException, CMemoryException );

Как видите при открытии набора записей есть несколько типов:

CRecordset::dynaset   
CRecordset::snapshot   
CRecordset::dynamic   
CRecordset::forwardOnly   

snapshot - набор записей типа моментального снимка (Snapshot-type Recordset). Набор записей статического типа или, другими словами, типа моментального снимка (Snapshot-type Recordset) содержит копию данных, которую нельзя изменять. Этот тип набора записей удобно использовать для поиска записи, удовлетворяющей какому-либо критерию, или при генерации отчетов. Следует помнить, что при использовании этого набора записей содержимое всех полей заносится в память, что может потребовать значительных ресурсов памяти.

Смотрим как это сделать:

void CDatebaseDlg::OnOpen() 
{ 
	CDatabase cdbMyDB;
	cdbMyDB.OpenEx("DSN=123");
	if (cdbMyDB.IsOpen()) 
	{
		CRecordset cr(&cdbMyDB);
		try
		{
	   		cr.Open(CRecordset::snapshot,
				"SELECT Family FROM TABLE1", CRecordset::readOnly );
			if (cr.IsOpen()) AfxMessageBox("Open");
  		         cr.Close(); 
		}
		catch(CDBException cdb)
		{
			AfxMessageBox(cdb.m_strStateNativeOrigin);
		}
	}
	else  AfxMessageBox("Not Open");
	cdbMyDB.Close();
}

Для связи с базой данных мы применили новую функцию OpenEx. Она сразу открывает и инициализирует связь с базой данных и рекомендована к использованию. В ней я указал драйвер в формате DNS=name.

И выделенное жирным открытие набора строк. Этот набор строк можно проверить открытием небезызвестной IsOpеn. Этот код защищен от ошибок. Например при ошибочном SQL операторе типа SELECT Family FROM TABLEw1 вы получите сообщение:

6_1.gif (4030 b)

То есть Вы спокойно взяв этот код за основу можете создать строку ввода SQL и дать пользователю сформировать запрос, который Вы отобразите. Если он ошибется, ничего страшного не будет.

Этот код можно сократить и он будет работать !!!

void CDatebaseDlg::OnOpen() 
{ 
	CRecordset cr(NULL);
	try
	{
		cr.Open(CRecordset::snapshot,
			"SELECT Family FROM TABLE1", CRecordset::readOnly ); 
		if (cr.IsOpen()) AfxMessageBox("Open");
			cr.Close(); 
	}
	catch(CDBException cdb)
	{
		AfxMessageBox(cdb.m_strStateNativeOrigin);
	}
}

Как видите, в указание драйвера я поставил NULL. Что будет ? ODBC спросит Вас какой. Вот так:

6_2.gif (7938 b)


| |
Автор Каев Артем.
[AD]