- •О.С. Зеленський
- •Розділ 9. Структура створення додатків
- •9.1. Загальна структура додатків
- •9.2. Додатки без використання архітектури «Документ-вид»
- •9.2.1. Приклад додатку реєстрації wnd-класу вікна
- •9.2.2. Створення та видалення дочірніх вікон без використання архітектури «Документ-Вид»
- •9.2.3. Створення дочірніх вікон без використання архітектури «Документ-Вид» (переключення вікон з використанням функції ShowWindow)
- •9.3. Архітектура «Документ-Вид»
- •Idr_mainframe формат строкового ресурсу.
- •9.3.1. Приклад додатку з використанням архітектури «Документ-Вид»
- •9.3.2. Види у архітектурі «Документ-Вид»
- •9.3.3. Створення видів у архітектурі «Документ-Вид» (переключення видів з використанням функції ShowWindow)
- •9.3.4. Робота з документами та видами на прикладі додатку SingleTemplate
- •9.4. Додатки mdi, робота з шаблонами
- •9.4.1. Приклад додатку mdi з одним шаблоном
- •9.4.2. Приклад додатку mdi з декількома шаблонами
- •Контрольні питання
- •Розділ 10. Робота з базами даних з використанням об'єктів ado
- •10.1.1. Ініціалізація об'єктів com з використанням директиви #import
- •10.1.2. Підтримка класів сом
- •10.2. Об'єкт Connection
- •10.3. Об'єкт Command
- •10.4. Об'єкт Recordset
- •10.5. Об'єкт Field і колекція Fields
- •10.6. Об'єкт Error і колекція Errors
- •10.8. Коротка характеристика структури мови sql
- •10.9. Синтаксис оператора вибору Select
- •10.10. Приклад програмування об'єктів ado
- •10.11. Опис розробленого навчального пакету ado6 для роботи з базами даних access та MySql
- •Int tip_bd; // тип бд 1- ms access, 2- MySql, 3 - xml
- •Void Connect_Baza(cString str);
- •Void ErrMessage(_com_error &ce);
- •If(pConn.CreateInstance("adodb.Connection"))
- •If(pRecordset.CreateInstance("adodb.RecordSet"))
- •Void cAdo6Doc::ErrMessage(_com_error &ce)
- •Void cAdo6Doc::OnMsaccess()
- •Void cAdo6Doc::OnMysql()
- •Void cAdo6Doc::OnXmlRead()
- •Void cAdo6Doc::Connect_Baza(cString str)
- •Virtual void DoDataExchange(cDataExchange* pDx);
- •Void cAdo6Dlg::DoDataExchange(cDataExchange* pDx)
- •Void cAdo6Dlg::Struct_MySql()
- •Void cAdo6Dlg::OnSelchangeListBaza()
- •Void cAdo6Dlg::OnVibor_bd()
- •Void cAdo6Dlg::AccessOpen()
- •Void cAdo6Dlg::xmlOpen()
- •Void cAdo6Dlg::Structura_bd()
- •Void cAdo6Dlg::OnSelchangeListTab()
- •Void cAdo6Dlg::show(int kod, int kod_bd)
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cAdo6Dlg::OnClose()
- •10.11.2. Формування списку бд (MySql), відкриття бази даних (ms access), відкриття xml-файлу, формування списку таблиць (MySql і ms access) та полів (MySql, ms access, xml)
- •Void cAdo6Dlg::OnSelchangeListTab()
- •1. Обрану таблицю необхідно брати в зворотні лапки "`", щоб виключити помилку в тому випадку, якщо в імені таблиці будуть зустрічатися пробіли.
- •10.11.3. Робота з sql-запитами
- •Void cAdo6Dlg::OnZapros_Select()
- •If (str_query.Mid(0,6).Compare("select"))
- •If(!baza.Left(3).Compare("otl") &&
- •Void cAdo6Dlg::Recordset_Baza(cString str)
- •Void cado6Dlg::OnZapros_Make()
- •Vr_zap.Format(" Запрос выполнен за %f сек ",conec - nach);
- •10.11.4. Видалення, сортування, пошук, фільтрація, оновлення набору записів
- •Void cado6Dlg::OnZapis_Delete()
- •Void cado6Dlg::OnCheck_Sort()
- •Void cado6Dlg::OnFind()
- •0L,adSearchForward,bb);
- •Void cado6Dlg::OnFilter()
- •Void cado6Dlg::OnVozvrat()
- •10.11.5. Переходи по записах
- •Void cado6Dlg::OnButtonFirst()
- •Void cado6Dlg::OnButtonLast()
- •Void cado6Dlg::OnButtonLeft()
- •Void cado6Dlg::OnButtonRight()
- •Void cado6Dlg::OnButtonRecno()
- •Void cado6Dlg::OnButtonPgup()
- •Void cado6Dlg::OnButtonPgdn()
- •Void cado6Dlg::OnButtonBookmark()
- •10.11.6. Запис даних до xml-файлу
- •Void cAdo6Dlg::OnButtonSave()
- •10.11.7. Кнопки, призначені тільки для роботи з otl_tab
- •Void cado6Dlg::OnZapis_Add1()
- •Void cado6Dlg::OnZapis_Add2()
- •Void cado6Dlg::OnZapis_Update1()
- •Void cado6Dlg::OnZapis_Update2()
- •Void cado6Dlg::OnFormir_bd()
- •Void cAdo6Dlg::OnValues_Fields()
- •10.12. Використання у якості джерела даних електронної таблиці Excel
- •Контрольні питання
- •Завдання
- •Розділ 11. Програмування для інтернет
- •11.1. Створення броузера
- •11.3. Використання протоколу http
- •If ((pInternetSession)
- •11.4. Використання протоколу ftp
- •Контрольні питання
- •Розділ 12. Створення елементів activex
- •12.1. Створення елементів ActiveX
- •Invalidate();
- •12.2. Тестування елемента ActiveX
- •12.4. Створення елемента ActiveX на базі стандартних елементів
- •12.5. Відображення елементів ActiveX
- •Контрольні питання
- •Розділ 13. Налагодження програм
- •Int data[5];
- •Invalidate();
- •13.3. Установка точки переривання
- •13.2. Покрокове виконання програми
- •13.4. Перевірка значень змінних під час виконання програми
- •Контрольні питання
- •Список літератури
- •Додатки
10.5. Об'єкт Field і колекція Fields
Клас Recordset містить колекцію об'єктів Fields, що використовуються для роботи з окремими стовпцями групи рядків. З кожним стовпцем у групі рядків пов'язаний об'єкт Field цієї колекції, який забезпечує доступ до метаданих стовпця, таким як ім'я стовпця та тип даних, а також до реального значення даного стовпця в поточному рядку.
Колекція Fields є властивістю об'єкта Recordset, яка підтримує такі властивості і методи (табл. 10.7).
Таблиця 10.7
Методи і властивості колекції Fields
Властивості і методи |
Опис |
Count |
Повертає кількість об'єктів у колекції. |
Item(index) |
Повертає елемент колекції за ім'я або порядковим номером. |
Append(Name, Type, DefinedSize, Attrib) |
Створює і додає новий об'єкт Field в колекцію. Поля слід додавати до об'єкта Recordset перед його відкриттям. Параметри:
|
Delete(Field) |
Видаляє об'єкт Field з колекції, що відповідає видаленню поля з набору записів. Параметр Field задає ім'я об'єкта Field або його порядковий номер. Метод може використовуватися тільки для набору записів Recordset перед його відкриттям. |
Об'єкт Field представляє собою стовпець даних одного типу, тобто поле набору записів Recordset. Властивості об'єкта Field представлені в табл. 10.8.
Таблиця 10.8
Властивості об'єкта Field
Властивості |
Опис |
Name |
Повертає ім'я поля. |
Value |
Повертає значення поля. |
OriginalValue |
Повертає значення поля після останнього виклику Update() або UpdateBatch(). Це те значення, яке використовують методи CancelUpdate() і CancelBatch(). |
UnderlyingValue |
Повертає поточне значення поля з джерела даних. |
DefinedSize |
Повертає максимальний розмір поля. |
ActualSize |
Повертає розмір фактичного значення поля. |
Type |
Повертає тип поля. |
Precision |
Повертає ступінь точності для числових значень поля (максимальна кількість цифр). |
NumericScale |
Повертає масштаб числових значень поля (кількість десяткових знаків праворуч від коми). |
Properties |
Повертає колекцію динамічних властивостей об'єкта (об'єктів Property). |
Приклад 12. Робота з об'єктом Field
У даному прикладі виводяться значення полів, а також їх типи.
.............................................................
CString str = "Значения и типы полей:\n";
long i, kol;
FieldsPtr fields; // объявление указателя на коллекцию Fields
FieldPtr field; // объявление указателя на объект Field
fields = pRecordset->GetFields();
kol = fields-> GetCount(); // количество полей
for(i=0;i<kol;i++)
{
field = fields->GetItem ((_variant_t)i);
str+= field->GetValue();
str+="\t";
str+=(_bstr_t)(long)field->GetType();
str+="\n";
}
MessageBox(str);
.............................................................
Даний фрагмент є універсальним для виведення значень і типів полів певного набору записів Recordset.
Слід зазначити, що властивість Type (або функція GetType()) повертає константу типу DataTypeEnum, тому щоб побачити її значення в рядку, необхідно привести її до типу даних long, а потім до _bstr_t.
У таблиці 10.9 наведені типи даних полів у ADO.
Таблиця 10.9
Типи даних об'єкта Field
Тип |
Опис |
adChar |
char[];рядок ANSI який завершується символом NULL. |
adWChar |
wchar_t[];рядок Unicode який завершується символом NULL. |
adBSTR |
BSTR; рядок який завершується символом NULL, що зберігає свою довжину. |
adTinyInt |
signed char; однобайтове знакове ціле. |
adUnsignedTinyInt |
unsigned char; однобайтове беззнакове ціле. |
adSmallInt |
short; двухбайтове знакове ціле. |
adUnsignedSmallInt |
unsigned short; двухбайтове беззнакове ціле. |
adInteger |
long; чотирьохбайтове знакове ціле. |
adUnsignedInt |
unsigned long; чотирьохбайтове беззнакове ціле. |
adBigInt |
_int64; восьмибайтове знакове ціле. |
adUnsignedBigInt |
_int64; восьмибайтове беззнакове ціле. |
adSingle |
float;значення з плаваючою точкою одинарної точності. |
adDouble |
double;значення з плаваючою точкою подвійної точності. |
adCurrency |
LARGEINTEGER;значення типу currency помножене на 10000. |
adDate |
DATE;значення подвійної точності. Ціла частина вказує кількість днів, що минули з першого дня 1900 р., а дробова представляє частину дня. |
adDBDate |
DBDATE;рік, місяць і день. |
adDBTime |
DBTIME; години, хвилини і секунди. |
Продовження таблиці 10.9
Тип |
Опис |
adDBTimeStamp |
DBTIMESTAMP;рік, місяць, день, години, хвилини, секунди і долі секунди. |
adError |
SCODE;32-розрядний код помилки. |
adBoolean |
VARIANT_BOOL; значення Boolean, 0 означає FALSE, a -1 - TRUE. |
adDecimal |
DECIMAL;значення з фіксованою точністю і розміром. |
adBinary |
BYTE[];двійковий масив байтових значень. |