Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Иерархия вызовов функций при организации модального диалога




После вызова DoModal управление возвращается Вашей программе, только когда пользователь закрывает диалоговое окно. Если Вы понимаете это, значит, Вы понимаете, что такое модальный диалог. Перейдя к немодальным диалогам, Вы еще оцените, насколько просто было программировать модальные диалоги. Но вернемся к нашей теме и рассмотрим, как выглядит краткая сводка "кто кого вызывает":

CDialog::DoModal

CEx06aDiaiog::OnInitDialog

   Дополнительная инициализация…

        CDialog::OnInitDialog

              CWnd::UpdateData(FALSE)

                        CEx06aDialog::DoDataExchange

 

пользователь вводит данные...

пользователь щелкает кнопку ОК

 

 CEx06aDiaiog::OnOK

 

    …дополнительная проверка…

CDialog::OnOK

      CWnd::UpdateData(TRUE)

                 CEx06aDialog::DoDataExchange

 CDialog::EndDialog(IDOK)

 

OnInitDialog и DoDataExchange— виртуальные функции, замещенные в классе CEx06aDialog. Windows вызывает OnInitDialog при инициализации диалогового окна, и это приводит к вызову DoDataExchange, виртуальной CWnd-функции, замещенной мастером ClassWizard. Взгляните на листинг этой функции:

void CEx06aDia.log: :DoDataExchange(CDataExchange* pDX)

 

{

CDiaIog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CexO6aDialog)

  DDX_Text(pDX, IDC_BIO, m._strBio);

  DDX_Radio(pDX, IDC_CAT, m_nCat);

  DDX_LBString(pDX, IDC_DEPT, m_strDept);

  DDX_Check(pDX, IDC_DIS, m.bInsDis);

  DDX_BString(pDX, IDC_LANG, m_strLang);

 

DDX_Check(pDX, IDC_LIFE,m_bInsLife);

DDX_Scroll(pDX, IDC_LOYAL, m_nLoyal);

DDX_Check(pDX, IDC_MED, m_bInsMed);

DDX_Text(pDX, IDC_NAME, m_strName);

DDX_Scroll(pDX, IDC_RELY, m_nRely);

DDX_CBString(pDX, IDC_SKILL, m_strSkill);

DDX_Text(pDX, IDC_SSN, m_nSsn);

DDV_MinMaxInt(pDX, m_nSsn, 0, 999999999);

DDX_CBString(pDX, IDC_EDUC, m_strEduc);

//>}AFX_DATA_MAP

DoDataExchange и функции DDX__ (обмен) и DDV__ (проверка достоверности) являются "дву-сторонними". Если UpdateData вызывается с параметром FALSE, то переносит данные из элементов данных в элементы управления диалогового окна. Если же этот параметр — TRUE, функция передает данные из элементов управления в элементы данных. DDX_Text замещается для подстройки под множество типов данных.

Функция EndDialog критична для процедуры завершения диалогового окна. DoModal возвращает параметр, передаваемый в EndDialog. IDOK принимает данные из диалогового окна, а IDCANCEL отменяет диалог.

 

Основные методы класса CDatabase.

Класс Cdatabase

Объекты этого класса используются для соединения с базами данных, посредством которого можно манипулировать источником данных (рис. 20.S) Чтобы у вас сразу же сложилось представление о заложенных в этот класс возможностях, приведут список категорий, на которые можно условно разделить все его компоненты и методы:

· Данные. Эти компоненты класса CDatabase хранят информацию, используемую в том случае, когда вы хотите работать непосредственно с базой данных, к которой присоединен объект CDatabase.

· Создание соединения. В эту категорию входят конструктор и методы для открытия/закрытия базы данных.

· Атрибуты данных. Сюда отн-ся десять ф-ий, используемых для пол-ия инфо- о базе данных, к которой присоединен объектов CDatabase.

· Операции — пять функций, позволяющих обрабатывать транзакции и не-посредственно выполнять команды SQL

· Переопределяемые методы. Один метод, позволяющий программисту более конкретно настроить функционирование объекта CDatabase.

Создание соединения

CDatabase::CDatabase {}

Служит для создания объекта CDatabase:

Class cPublDoc: public CDocument

{public: // Объявляем объект CDatabase в документе

CDatabase m_dbPubl; ... };

После того как объект создан, необходимо установить соединение с определенным источником данных, для чего следует вызвать одну из приведенных ниже функций.

virtual BOOL CDatabase::Оpen (

LPCTSTR lpszDSN,

BOOL bExclusive = FALSE,

BOOL bReadOnly = FALSE,

LPCTSTR lpszConnect = "ODBC;",

BOOL bUseCursorLib = TRUE)

Параметр lpszDSN определяет имя источника данных, которое должно быть зарегистрировано с помощью программы ODBC Administrator. Это значение должно быть равно NULL, если DSN (Data Source Name, Имя источника данных) определено в строке lpszConnect, или может быть равно NULL, если необходимо предоставить пользователю блок диалога для выбора источника данных.

Параметр bExclusive (в Visual С++ 5.0 не поддерживается): источник данных всегда открывается для совместного использования, и значение параметра должно быть равно FALSE, в противном случае будет выдано сообщение об ошибке. 

Параметр bReadOnly позволяет установить соединение с источником данных в режиме "только для чтения" (TRUE), что приводит к запрещению его обновления. После установления такого соединения все зависимые результирующие множества наследуют этот атрибут.

Параметр lpszConnect определяет строку, описывающую соединение, которая содержит информацию об источнике данных, идентификаторе пользователя, имеющего к нему доступ, пароль, если он тре-я ист-ку данных, и другую информацию. Для совместимости с будущими версиями требуется, чтобы эта строка начиналась с подстроки "ODBC",  указ-щей на то, что соединение устан-вается с источником данных ODBC.

Параметр bUseCursorLib указывает на необходимость (TRUE) или необязательность загрузки динамической библиотеки ODBC Cursor Library, позволяющей работать с курсорами базы данных.

 Упрощенная версия рассмотренной функции имеет вид:

virtual BOOL CDatabase::OpenEx (

LPCTSTR lpszConnectString,

DWORD dwOptions = 0)

 Параметр lpszConnectString определяет строку соединения с источником данных ODBC, которая включает его имя, а также дополнительную необязательную информацию, такую как идентификатор и пароль пользователя, например,

"DSN=Publisher;UID=sa;PWD=irishka"

Если в качестве параметра передается NULL, то выводится блок диалога Data Source, в котором пользователь может выбрать источник данных. Параметр dwOptions -- битовая маска, которая определяет комбинацию следующих значений:

CDatabase::openExclusive В Visual C++ до версии 6.0 не поддерживается источник данных всегда открывается для                                                                        совместного использования. При задании этой опции будет выдано сообщение об ошибке.    

CDatabase::openReadOnly      Источник данных открывается в режиме “только для чтения”

СDatabase::openUseCursorLib Указывает на необходимость загрузки динамической библиотеки ODBC Cursor Library, позволяющей работать с курсорами

CDatabase::noOdbcDialog          Не выводить блок диалога

CDatabase::forceOdbcDialog                      Всегда выводить блок диалога соединения                                                                                                                                                                                                                                                                                                                                 

Значение, заданное по умолчанию (0), означает, что база данных открывается для совместного использования, с доступом для записи, динамическая библиотека поддержки курсора не загружается и блок диалога для выбора источника данных отображается только в том случае, если не указана дополнительная информация о соединении.

Как видите, обе функции выполняют одну и туже задачу – установить соединение с источником данных. Разница заключается только в способе задания параметров.

Примеры.

Cdatabase m_dbSamp; // Создаем объект класса Cdatabase

// Открываем соединение с источником данных, указав имя источника и идентификатор //пользователя (без пароля)

m_dbsamp.Open(_T(»Samples»), FALSE, FALSE, _T(«ODBC;UID=sa»));

//или запрашиваем всю информацию у пользователя

m_dbsamp.Open(NULL);

Закрытие соединения

//Закрываем текущее

m_dbsamp.Close();

// … и открываем новое

m_dbPubl.OpenEx (_T(“DSN=Authors; UID=sa”), CDatabase::openReadOnly|

CDatabase::noOdbcDialog));

Атрибуты данных

Входящие в эту категорию функции используются для предоставления ин-формации о соединении, драйвере и источнике данных, а также для установки некоторых опций источника данных. Наиболее часто они применяются в интерфейсных приложениях. Рассмотрим основные из них.                           const CString& CDatabase: :GetConnect()

Вызов этой функции позволяет получить описывающую соединение строку, которая использовалась во время вызова функций открытия соединения (Open или OpenEx). Если до момента вызова этой функции соединение не было установлено, то возвращается ссылка на пустую строку.                                  BOOL CDatabase::IsOpen ()          

Позволяет определить, имеется ли (возвращается ненулевое значение) или нет (0) текущее соединение объекта CDatabase с источником данных.                              BOOL CDatabase: :CanUpdate ()

 Устанавливает, может ли пользователь обновлять базу данных. Сама возможность обновления определяется двумя факторами — возможностями драйвера ODBC (не все драйверы предоставляют возможность обновления) и режимом, в котором была открыта база данных. Если такая возможность есть, то функция возвращает ненулевое значение, а в противном случае 0. Фактор, влияющий на возможность обновления, можно задать, вызвав функцию ::SQLGetlnfo с парамeтpoм SQL_DATASOURCE_READ_ONLY. 

ОПЕРАЦИИ

 Функции этой категории используются для непосредственной работы с базой данных. К ним относятся функции обработки транзакций (используемые для обновления базы данных) и непосредственного выполнения команд SQL: void CDatabase::ExecuteSQL (LPCSTR lpszSQL)

 Позволяет непосредственно выполнить команду SQL, задаваемую в завершающейся нулем строке, на которую указывает параметр lpszSQL. В качестве параметра можно использовать объект класса CString. Следует иметь в виду, что выполнение этой функции не возвращает записей из базы данных и, следовательно, не рекомендуется для выполнения операций выборки:

 CString strCmd = "UPDATE Products SET UnitPrice = 30";                                                                                                                                                                                                                                                                                                                    

try

{  m_dbCust.ExecuteSQL(strCmd) ; }

catch (CDBException, e)

{      // Код ошибки находится в e->m_nRetCode }

 

 

31. Класс CRecordset. Компоненты данных и основные методы (открытие набора, получение атрибутов результирующего набора IsOpen, IsBOF, IsEOF, IsDeleted, обновление результирующего набора).

Класс CRecordset

Все компоненты и методы этого класса можно разбить на семь категорий:   

· Компоненты данных. Служат для хранения информации, используемой для непосредственной работы с базой данных, к которой объект этого класса был присоединен.

· Конструирование. В эту категорию входят конструктор и методы для от-крытия/закрытия форм базы данных.

· Атрибуты результирующего набора. Функции, используемые для получе-ния информации о результирующем наборе, к которому присоединен объект класса CRecordset.

· Операции обновления результирующего набора. Четыре операции, предна-значенные для обработки транзакций.

· Операции перемещения по результирующему набору. Функции, позволяю-щие перемещаться по записям результирующего набора.

· Другие операции над результирующим набором. Восемь функций, предос-тавляющие дополнительные функциональные возможности.

· Переопределяемые методы. Пять переопределяемых функций, позволяю-щие программисту настроить функционирование объекта класса CRecordset.

BOOL CRecordset::IsOpen ()

Позволяет определить, открыт ли уже результирующий набор. Хорошим стилем программирования является использование этой функции перед тем, как вызывать функцию Open.

BOOL CRecordset::IsBOF ()

Позволяет определить, является ли текущая запись первой в наборе данных. Она возвращает ненулевое значение, если результирующий набор не содержит записей или указатель помещен до первой записи, и 0 — в противном случае. Если функция возвратила ненулевое значение, то текущая запись не определена, и при вызове функции MovePrev возникает ошибка.

BOOL CRecordset::IsEOF  ( )

Позволяет определить, является ли текущая запись последней в наборе данных. Возвращает ненулевое значение, если результирующий набор не содержит записей или указатель помещен за последней записью, и 0 — в противном случае. Если функция возвратила ненулевое значение, то текущая запись не определена, и при вызове функции MoveNext возникает ошибка.

BOOL CRecordset::IsDeleted ( )

Позволяет определить, была ли текущая запись удалена. Если при перемещении на запись и вызове этой функции она возвращает ненулевое значение, необходимо перейти к другой записи до того, как производить какие-либо операции над результирующим набором.

Эту функцию не следует использовать при работе с блочной выборкой строк. Вместо нее следует вызывать функцию GetRowStatus,

ПрмечаниеРезультат, возвращаемый функцией IsDeleted, зависит от многих факторов, таких как тип результирующего набора, можно ли его обновлять, определена ли при открытии опция CRecordset ::skipDeletedRecords, позволяет ли используемый драйвер удалять записи и каково число работающих пользователей.

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 302.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...