Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой и удобный класс для ODBC(RecordSet contr) 
:(
    Опции темы
En_t_end
Дата 17.11.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



У меня стояла задача обеспечить как можно лучшую портируемость некого приложения юзающего неважно какую БД(то есть по сути добится максимальной универсальности), но через определенный драйвер ODBC.
Базой над чистым АПИ была выбрана библиотека классов-враппер от Vijay Mathew Pandyalakal'а - "easy_odbc"(с)

Был разработан следующий класс упрощающий выборку информации из RecordSet'а товарища, которого я упоминал выше.

Что это дало...
Если юзать напрямую враппер, то здесь приходится копировать с точностью до размера полей структуру таблиц базы в приложении(для использования Bind'а с полями) - это как мне кажется не есть хорошо и способствует появлению множества ошибок при изменении структуры базы(допустим размера какого-то поля) при уже законченной структуре выборки в приложении.
К тому же уменьшается размер более низкоуровневого кода в сторону более высокоуровневого использования.
Вообщем это конечно же не ново, просто я подумал, что библиотеке товарища Vijay Mathew Pandyalakal'а не помешает такое полезное дополнение(чтобы название о простоте действительно оправдывалось smile)
Пример использования...
Код

//.....
#include "DB_rect_easy.h"

void main()
{
    using namespace easyodbc;
    using namespace std;
    Database db;
    db.Open("TEST_BD", "", "");
    ResultSet rslt = db.ExecuteQuery("SELECT * FROM test_table");
    DB_rect_easy results(rslt);
    if(results.LastErr != 0)
    {
        cout << "Low mem!";
        return;
    }
    results.MoveFirstRow();
    results.MoveFirstColumn();
    do
    {
        cout << results.GetColumnName() << '\t';
    }while(results.MoveNextColumn());
    cout << endl;

    do
    {
        results.MoveFirstColumn();
        do
        {
            cout << results.GetColumn() << '\t';
        }while(results.MoveNextColumn());
        cout << endl;
    }while(results.MoveNextRow());
    db.Close();
}

Линк на easy_odbc:
http://www.codeproject.com/database/easyod...p;select=897319

Это сообщение отредактировал(а) En_t_end - 21.2.2006, 18:40

Присоединённый файл ( Кол-во скачиваний: 31 )
Присоединённый файл  DB_RECT_EASY.ZIP 2,25 Kb
PM MAIL ICQ Skype GTalk Jabber   Вверх
En_t_end
Дата 22.11.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



WARNING!!!
Обнаружен меммори лик во враппере!
Локализация:
Выделяется каждый раз при новом запросе новая память из кучи под HANDLE , управляющий положением указателя на виртуальной базе.
Память частично отчищается при закрытии Базы.
PM MAIL ICQ Skype GTalk Jabber   Вверх
Empirik
Дата 23.1.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



А можешь дать линку на данную библиотеку классов(easy_odbc)? Буду очень признателен если поможешь.
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
En_t_end
Дата 21.2.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Тема была отредактирована, код был приведен в порядок.
PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.