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 руб./мес


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




 43 - Улучшаем CDaoDialog или как изменяются записи / DAO / Visual C++

Шаг 43 - Улучшаем CDaoDialog или как изменяются записи

Во первых мы подправим имя функции void SetRecorset(CDaoRecordset* m_pSet); просто ошибка вышла на SetRecordset. Проблем здесь нет просто в двух местах.

Есть более значительная поправка. По первых давайте разберемся как редактируются записи. Вот схема.

43_1.gif (1723 b)

Набор записей может быть открыт только для чтения, а мы будем с Вами пытаться писать и как результат ошибки. Вот мы и изменим нашу функцию SaveData предусматривая данную ситуацию.

void CDaoDialog::SaveData()
{
	if (!(m_pRecordset->IsEOF()))
	{ 
		if (m_pRecordset->CanUpdate()) 	// если разрешено обновление
		{ 
			m_pRecordset->Edit();		
			UpdateData(TRUE);		
			m_pRecordset->Update();		
		}
	}
}

Но и это еще не все. Дело в том, что мы автоматически сохраняем все поля, которым есть аналоги на диалоге. Это так. Но а вдруг мы не все поля будет отображать на диалоге например идентификаторы а хотим их обновлять? Или просто хотим изменить записи в обход DDX из элементов. Надо дать возможность перед тем как записи будут изменены что-то сделать пользователю. Вот мы и создадим виртуальную функцию OnSave. Это будет виртуальная функция, которую можно в любой момент перегрузить и вписать в нее свой особенный код сохранения.

class CDaoDialog : public CDialog
{
// Construction
public:
	virtual void OnSave();
	void Last();
	......
}

void CDaoDialog::OnSave()
{

}

И будет вызывать эту функцию при вызове Save после DDX.

void CDaoDialog::SaveData()
{
	if (!(m_pRecordset->IsEOF()))
	{ 
		if (m_pRecordset->CanUpdate()) 	 // если разрешено обновление
		{ 
			m_pRecordset->Edit();		
			UpdateData(TRUE);	
			OnSave();			// для будущих классов
			m_pRecordset->Update();		
		}
	}
}

В проекте находится класс CDaoDialog упакованный для использования в Component Gallery как ogx файл.


Загрузить проект | | |
Автор Каев Артем.
[AD]