Читаем Программирование на Visual C++. Архив рассылки полностью

Модификация данных в таблице

С помощью методов класса CRecordset можно изменять записи в таблице и добавлять новые записи. Прежде чем изменять запись, следует убедиться, что открытое множество записей допускает такую операцию, с помощью функции CRecordset::CanUpdate. Сама модификация начинается вызовом функции CRecordset::Edit и завершается вызовом функции CRecordset::Update; между этими двумя вызовами следует изменить значения переменных, связанных с полями множества записей. Например:

if (Rs.CanUpdate) {

 Rs.Edit;

 Rs.Rs.m_Name = "Vasya Pupkin";

 Rs.m_DateOfBirth = CTime(2000, 1, 1, 0, 0, 0);

 Rs.Update;

}

Аналогичным образом можно добавлять новые записи, но вместо Edit используется AddNew. Убедиться в том, что множество записей поддерживает добавление, можно с помощью функции CRecordset::CanAppend. Например:

if (Rs.CanAppend) {

 Rs.AddNew;

 Rs.Rs.m_Name = "Vasya Pupkin";

 Rs.m_DateOfBirth = CTime(2000, 1, 1, 0, 0, 0);

 Rs.Update;

}

И последнее замечание. Чтобы обновить множество записей после внесения изменений в БД, нужно вызвать функцию CRecordset::Requery.

Разрыв соединения

Это самый простой, но совершенно необходимый этап. Закончив работу с источником данных, программа должна разорвать с ним соединение вызовом CDatabase::Close. Перед этим необходимо также закрыть все наборы записей, используя функцию CRecordset::Close. Ни одна из этих функций не принимает никаких параметров.


Если у вас есть какие-либо вопросы, предложения или пожелания, присылайте их мне по адресу rudankort@mail.ru. Я постараюсь учесть их при написании второй части статьи, которая будет посвящена более сложным аспектам работы с ODBC.

Александр Шаргин

ВОПРОС-ОТВЕТ

Q Есть диалог на нем Date Time Picker и есть соответствующая ему переменная m_Time типа CTime. Проблема в том, что если m_Time = 0, то в диалоге высвечивается 2:00:00!!?? Т.е. сдвиг на два часа. Причем если выставить 0:00:00, то будет "Assertion fault". Ну и соответственно, если установить 2:00:00, то после UpdateData m_Time станет = 0. Скорее всего это как-то связано с часовым поясом (у меня часовой пояс +02:00). Как от этого избавиться?

Михаил

A1 Как известно, класс CTime – это всего лишь объектная обёртка вокруг типа _t из стандартной библиотеки языка C. А тип time_t (4 байта) хранит время как число секунд, прошедших с момента полуночи 1 января 1970 года. Это означает, что класс CTime не может хранить время ДО этого момента. А если записать в него 0, мы как раз и получим 1.01.1970, 0:00:00 (или 2:00:00 с учётом часового пояса).

Когда Date Time Picker работает в режиме ввода времени, он всё равно "помнит" полную дату. Если ввести в него "0:00:00", то с учётом часового пояса получится 31.12.1969, 22:00:00, то есть дата за пределами диапазона допустимых значений CTime. Это и приводит к срабатыванию ASSERT'а.

А для решения проблемы достаточно записать в CTime какую-нибудь дату, отличную от 1.01.1970. Например:

m_Time = CTime(2000, 1, 1, 0, 0, 0); // 1 января 2000 года

Александр Шаргин
Перейти на страницу:

Похожие книги

Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT