Программы / Программирование

Динамический Recordset!

При использовании классов CRecordset для программирования доступа к БД, эсть одно неудобство - надо создовать отдельный класс для каждого запроса. Усовершенствованный класс CDynamicRecordSet работает с разными SQL запросами.


В библиотеке MFC существуют классы для работы с базами данных CRecordset и CDatabase однако работать с ними не очень удобно. Во первых, при вызове методов этих классов необходимо ловить исключения при помощи блоков
try
{
Update();
}
catch(CDBException* e)
{
ProcessError(e);
}
что увеличивает объем программы. А главное VC позволяет создавать классы наследующие CRecordset, только для каждой таблицы - свой класс. Во что же должна превратиться программа, если ей необходимо работать с сотней разных таблиц?
Я немного автоматизировал этот процесс и разработал класс CDynamicRecordSet, объект которого может работать с любой таблицей и даже видом. Еще я убрал в него все try и catch, а так же экземпляр обьекта CDatabase и вот что получилось:
Для примреа создадим копию таблицы TABLE1 состоящей из трех столбцов: int float и varchar

CDynamicRecordSet DynRs1,DynRs2;
if(!DynRs1.Connect("DSN=MyDSN;UID=User;PWD=password;"))
return false;
if(!DynRs2.Connect("DSN=MyDSN;UID=User;PWD=password;"))
return false;
if(!DynRs2.DirectSQL("create table TABLE2 (col1 int,col2 float,col3 varchar"))
return false;
if(!DynRs1.DynOpen("select * from table1"))
return false;
while(DynRs1.IsEOF())
{
if(!DynRs2.DynAddNew())
return false;
DynRs2.m_Data[0].m_Text=DynRs1.m_Data[0].m_Text;
DynRs2.m_Data[1].m_int=DynRs1.m_Data[1].m_int;
DynRs2.m_Data[2].m_float=DynRs1.m_Data[2].m_float;
if(!DynRs2.DynUpdate())
return false;
if(!DynRs2.DynMoveNext())
return false;
}

CDynamicRecordSet содержит внутри себя массив объектов
class CDynamicRecordSetDataStorage
{
public:
CString m_Text;
long m_int;
double m_float;
CTime m_Time;
};

public CDynamicRecordSet::CDynamicRecordSetDataStorage m_Data[256];
Обмен данными осуществляется между i-тым столбцом таблицы и соответствующим полем i-того элемента массива. Информация об исключении доступна через элементы m_sLastError и m_LastErrCod; Есть возможность обращаться к данным по имени столбца при помощи функций GetDoubleField(ColName),GetTextField(ColName),SetField() и т.д.
Обработка исключений будет выводить MessageBoxы если установить флаг m_fEnableMessage=true; Сделать это можно при вызове
Connect(CString strConnect,int QueryTimeout=30,bool fEnableMessages=false);
там же можно задать время таймаута в секундах.
Не все типы данных, например такие, как money поддерживаются классом, однако добавить их не составит труда. Надо добавить элемент соответствующего типа в CDynamicRecordSetDataStorage и обработчик в функцию DoFieldExchange.
Класс DynamicRecordSet, в течении двух лет повсеместно используется в большой системе и можно сказать, что он протестирован с MSSQL. Для работы с Access необходимо заменить два слова "dynamic", которые вы найдете в исходном тексте на слова "dynaset"

Скачать CDynamicRecordSet


Ассемблер. Оригинальный компилятор ассемблера х86.
Симулятор 80196. Программный симулятор микроконтроллера Intel 80196KR. Имеет встроенный компилятор ассемблера, текстовый редактор, справочную систему. Может создавать HEX файлы.
Генератор кроссвордов. Описание алгоритм компьютерного составления кроссвордов.
Нейронные сети. Пример программы и исходный код С++.
WPF, XPS, NET. Как установить шрифт из памяти
Deflate. Подробное описание алгоритма декодирование формата Дефлет. Прмер декодирования с пояснениями.
Программирование драйверов для Windows. Общие вопросы программирования драйверов. Какими средствами пользоваться, где скачать DDK.
DISKEDIT Программа позволяет просматривать и редактировать сектора дисков. Работает через прерывание INT13.
Программирование RS232 в Windows. СComBase класс для программирования COM порта.
Программирование потоков в Windows. Класс CBaseThread позволяет организовать несколько рабочих потоков.
Динамический Recordset CDynamicRecordSet - класс модернизирует CRecordSet для более удобной работы с БД из MFC приложений.
Как сохранить, восстановить, отредактировать MBR (Master Boot Record), boot sector, нулевой, загрузочный сектор диска при помощи утилиты debug.exe

evm.narod.ru ©

Hosted by uCoz