С++ Data Access Library project
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 08.09.03 05:53
Оценка:
Всем привет!

Предлагаю всем высказаться по поводу этого.

В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).
Наверняка есть люди, у которым имеються такие же проблемы. Если вы заинтересованы в этом, если вы хотите поучастовать в таком проекте — высказывайтесь. Если нас окажется достаточное количество — сможем открыть проект.
... << RSDN@Home 1.1 beta 2 >>
Re: С++ Data Access Library project
От: Nektov Россия  
Дата: 08.09.03 06:08
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Всем привет!


AS>Предлагаю всем высказаться по поводу этого.


AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).

AS>Наверняка есть люди, у которым имеються такие же проблемы. Если вы заинтересованы в этом, если вы хотите поучастовать в таком проекте — высказывайтесь. Если нас окажется достаточное количество — сможем открыть проект.

Если такая библиотека будет существовать, то это будет просто замечательно. С удовольствием присоединюсь к проекту.
REPEAT [Design,Code,Test] UNTIL Money = 0
Re: С++ Data Access Library project
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.09.03 10:53
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Всем привет!


AS>Предлагаю всем высказаться по поводу этого.


На память.

1. ADO само по себе является "Overhead"-ом для OLEDB провайдера, по той самой причине, что таскает данные через VARIANT.

2. Что насчет нескольких транзакций в рамках одного подключения.

3. Как насчет многократного вызова разных команд с одним и тем же набором параметров.

4. Нарисуй как будет выглядеть цикл копирования таблиц — выбираем из одной, вставляем в другую.

5. Не стоит так сильно акцентировать свое внимание на свойствах объектов. Их конечно поддерживать нужно (по имени, по индексу, по однозначному идентификатору — CLSID+DBPROPID), но не больше чем реально необходимо.

6. Классы должны уметь сами создавать COM объекты, так и уметь подключаться к существующим. Без этого библиотеку нельзя использовать в "многомодульном" приложения.

7. С обработкой ошибок только через исключения я был бы немного более осторожным. Хотя бы потому, что в OLEDB есть такое понятие как предупреждение. Типа провайдер работу "почти" выполнил.

8. Насчет тех же ошибок. В OLEDB провайдеры могут возвращать коллекции ошибок.

9. Жирным выделены классы которые на 99% покрывают нужды наших проектов.

class t_db_data_source;
class t_db_session;
class t_db_auto_commit;
class t_db_auto_rollback;
class t_db_base_cursor; //base for cursor,command,xxx_rowset
class t_db_cursor;
class t_db_command;
class t_db_open_rowset;
class t_db_open_schema_rowset;
class t_db_open_columns_rowset;
class t_db_field_data;
class t_db_field_info;
class t_db_base_row; //abstract
class t_db_row;


10. Примеры использования посмотри здесь.

Короче, Алексей. Из своего личного опыта — интерфейсы VCL, ADO это конечно красивые, по своей простоте, вещи. Из за этой же простоты они и тупые.

Я могу тебе (или сюда) швырнуть достаточно приличный набор C++ классов для работы с БД, которые строятся поверх библиотеки доступа и ты сможешь частично оценить режимы её эксплуатации.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: С++ Data Access Library project
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 08.09.03 11:51
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

хъ

КД>10. Примеры использования посмотри здесь.


Примеров на С++ мало, а те что есть не нравятся.

КД>Короче, Алексей. Из своего личного опыта — интерфейсы VCL, ADO это конечно красивые, по своей простоте, вещи. Из за этой же простоты они и тупые.


Я согласен. У меня не с этим проблема. У меня проблема работы с ADO из С++.

КД>Я могу тебе (или сюда) швырнуть достаточно приличный набор C++ классов для работы с БД, которые строятся поверх библиотеки доступа и ты сможешь частично оценить режимы её эксплуатации.


Если она фриварная, почему бы тебе ею не поделиться со всеми. Возможно, она и подойдет мне, хотя из примеров я так не думаю.
... << RSDN@Home 1.1 beta 2 >>
Re[3]: С++ Data Access Library project
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.09.03 12:30
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

КД>>10. Примеры использования посмотри здесь.


AS>Примеров на С++ мало, а те что есть не нравятся.

Гы. Ну дык нормальная реакция любого программера. Только это уже существует и успешно применяется в реальных задачах — от написания тестов к нашему OLEDB провайдеру, до высокоуровнего ПО

Я, например, тоже очень развеселился созерцая твои примеры

Один черт на ADO строить — это будет ... ну вообщем не очень дальновидно. Зачем тебе этот VB в программе на C++

Кстати каркас OLEDB интерфейсов неизменен с момента рождения, а ты предлагаешь базироваться на целой группе интерфейсов ADO 2.5. Хотя сейчас уже в моде 2.7 А мы своим клиентам говорим, что не ниже 2.6 (там есть ADODB.Command.NamedParameter (?))

КД>>Я могу тебе (или сюда) швырнуть достаточно приличный набор C++ классов для работы с БД, которые строятся поверх библиотеки доступа и ты сможешь частично оценить режимы её эксплуатации.


AS>Если она фриварная, почему бы тебе ею не поделиться со всеми. Возможно, она и подойдет мне, хотя из примеров я так не думаю.


Нет, это не то, о чем ты подумал. Это классы из реального проекта — то есть их весьма затруднительно применить на стороне.

Кстати, вот вспомнил — в диструбите нашего Free есть древняя версия C++ клиента к OLEDB провайдерам. Все в исходных текстах. Там же есть и примеры. Но она очень древняя (два года прошло)

Ладно, забей на мои комментарии. Пришли мне письмо с ящика на который можно отправить мегабайтный архив (если хочешь, конечно) — приценишься к нашему шедевру в самой последней (вчерашней) редакции. Считай 150$ подарю
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[4]: С++ Data Access Library project
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 08.09.03 12:39
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

хъ

КД>Ладно, забей на мои комментарии. Пришли мне письмо с ящика на который можно отправить мегабайтный архив (если хочешь, конечно) — приценишься к нашему шедевру в самой последней (вчерашней) редакции. Считай 150$ подарю


Мыло в профиле.

З.Ы. Ты против такой библиотеки или против ADO, или против того, чтобы в этом пойчаствовать?
... << RSDN@Home 1.1 beta 2 >>
Re[3]: С++ Data Access Library project
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.09.03 12:39
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

КД>>10. Примеры использования посмотри здесь.


AS>Примеров на С++ мало, а те что есть не нравятся.


Хм. А что именно не понравилось-то?

_THROW_OLEDB_FAILED смущает, или что-то другое?

А то мне уже говорили, что не нравиться, но ничего по-существу не было
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[5]: С++ Data Access Library project
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.09.03 13:45
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

КД>>Ладно, забей на мои комментарии. Пришли мне письмо с ящика на который можно отправить мегабайтный архив (если хочешь, конечно) — приценишься к нашему шедевру в самой последней (вчерашней) редакции. Считай 150$ подарю


AS>Мыло в профиле.

Хорошо.

AS>З.Ы. Ты против такой библиотеки или против ADO, или против того, чтобы в этом пойчаствовать?

Я против рождения "нового" проекта, в котором реализованы старые идеи. Поэтому и бурчу

ADO хуже в том плане, что у тебя будут рамки, вылазя за которые ты ставишь под вопрос саму целесообразность использования ADO. В ADO мне нравиться только его VB-шная совместимость. Где по большому счету ему и место, если бы в MS написали нормального плюсового клиента к OLEDB вместо своего ATL-ного ублюдка.

OLEDB ... здесь я не могу ничего сказать не предвзятого. Ну да, с нуля написать нормального клиента достаточно сложно и тяжело. Причин очень много чтобы их здесь перечислять. Но я точно знаю, через ADO выжать все на что способен провайдер — не реально. Это, правда, нужно очень редко.

А насчет участвовать — посмотри lib/ole_lib/oledb, потом lib/structure, а потом подумаем вместе — "а стоит ли ?". Ну только если в роли консультанта
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: С++ Data Access Library project
От: Аноним  
Дата: 08.09.03 14:27
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Всем привет!


AS>Предлагаю всем высказаться по поводу этого.


AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).

AS>Наверняка есть люди, у которым имеються такие же проблемы. Если вы заинтересованы в этом, если вы хотите поучастовать в таком проекте — высказывайтесь. Если нас окажется достаточное количество — сможем открыть проект.

а я вот извратился и сделал с помощью expression-templates
только жутко сырое всё получилось, но зато наглядно помоему,

System::data_src_t &dataSrc=System->Instance()->dataSrc(); //не волнует как реализована, 
// и вобще ничево не волнует
// например для много поточного приложения для каждого может быть потока свой конект к базе

int i=0;

dataSrc.Query(sql::Update(table1::table())
    .Set((p4::field()=Const(1),
          p5::field()=Var(i),
          p1::field()=
          sql::Select(
                  p1::field()=p8::field()
                ).From(table2::table()).Where(p8::field<Const(8)),
          )
    ).Where(table2::p4::field()==Var(i)));


ну и соответственно описания таблиц и полей нужно добавить
типа
struct table2::public Table<table2>
{
    // чтоб можно было имена как-то менять например
    inline static const char *name()
    {
        return "table2"
    }
    struct p4:public Field<p4>
    {
         typedef int c_type_t;
         typedef table1 table_t;
         inline static const char *name()
         {
             return "table2";
         }
    }
};


Запросы генерируются в виде заданном при компиляции, т.б. код будет работать не зависимо от синтаксиса sql, + если, например, используется MySql без вложенных запросов, то будет выполненно столько запросов сколько надо, + автоматически ставятся "'" где нужно + на этапе компиляции контролируется типы полей. Все эти Const, Var, ::table(), ::field() можно убрать потом.
Покритекуйте, буду признателен.
Re: С++ Data Access Library project
От: LaFlour Австралия blog: http://spaces.live.com/laflour
Дата: 09.09.03 05:18
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Всем привет!


AS>Предлагаю всем высказаться по поводу этого.


AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).


А смотрел ли ты OTL
Посмотри как сделано. Может просто не изобретать чтото новое а доработать данное?

"Настал день Ч, время Х и полная Ж."

Re[2]: С++ Data Access Library project
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 09.09.03 06:14
Оценка:
Здравствуйте, LaFlour, Вы писали:

[]

Ох, блин! Ну как народ не понимает!

Я хочу обертку над ADO/OLEDB на С++. И все! Мне не нужны обертки над нативными механизмами передачи данных, мне не нужны тем более собственные реализации таких механизмов.

Я хочу элементарного, обертки над ADO.
... << RSDN@Home 1.1 beta 2 >>
Re: С++ Data Access Library project
От: Аноним  
Дата: 10.09.03 14:22
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Всем привет!


AS>Предлагаю всем высказаться по поводу этого.


AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).

AS>Наверняка есть люди, у которым имеються такие же проблемы. Если вы заинтересованы в этом, если вы хотите поучастовать в таком проекте — высказывайтесь. Если нас окажется достаточное количество — сможем открыть проект.

Вот еще библиотечка http://www.codeproject.com/database/expressodl.asp
Сам не использовал, но судя по рекламе — ничего
Re: С++ Data Access Library project
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 20.11.03 07:56
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Предлагаю всем высказаться по поводу этого.


AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).


Есть какие нибудь сдвиги ?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: С++ Data Access Library project
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 20.11.03 11:22
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

хъ

КД>Есть какие нибудь сдвиги ?


Есть. Я определился с тем, что делать как у тебя не стоит.
Вообще все упирается во время.
... << RSDN@Home 1.1.0 stable >>
Re[3]: С++ Data Access Library project
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 20.11.03 11:49
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

КД>>Есть какие нибудь сдвиги ?

AS>Есть. Я определился с тем, что делать как у тебя не стоит.
А я так и не понял этих причин

Я просто что вспомнил. Тут один раз с IT-ом "спорили", я ему привел на тот момент абстрактный пример с лошадью в вакууме — копирование таблиц. Намедни я его воплотил в реальном проекте по репликации наших БД.

Задача: нужно новые территории из БД с обновлениями, зарегистрировать в БД получателя:

void TRPR_Processor::sync_terrains()
{
 ctx()->m_Log.send(rplMsgProcess,0,"Регистрация территорий");

 str_formatter fstmt;

 /*выборка территорий, зарегистрированных в пакете*/
 t_db_command pack_terrain_cmd;
 t_db_row     pack_terrain_row;

 _THROW_OLEDB_FAILED(pack_terrain_cmd,create(data()->PackTr()))

 fstmt("select id,name from %1")<<tn_rpl_pack_terrain;

 _THROW_OLEDB_FAILED(pack_terrain_cmd,prepare(fstmt,&pack_terrain_row))

 _THROW_OLEDB_FAILED(pack_terrain_cmd,execute(NULL))

 /*команда проверки существования записи о территории*/
 t_db_command check_terrain_cmd;
 t_db_row     param;

 _THROW_OLEDB_FAILED(check_terrain_cmd,create(data()->DestTr()))

 fstmt("select id from %1 where id=?")<<tn_rpl_terrain;

 _THROW_OLEDB_FAILED(check_terrain_cmd,prepare(fstmt,NULL))

 /*команда на регистрацию новой территории*/
 t_db_command ins_terrain_cmd;

 _THROW_OLEDB_FAILED(ins_terrain_cmd,create(data()->DestTr()))

 fstmt("insert into %1 (id,name) values(?,?)")<<tn_rpl_terrain;

 _THROW_OLEDB_FAILED(ins_terrain_cmd,prepare(fstmt,NULL))

 //------------------------------------------------------------------
 while(pack_terrain_cmd.fetch(&pack_terrain_row)==S_OK)
 {
  param[0]=pack_terrain_row["id"];
  param.count=1;

  _THROW_OLEDB_FAILED(check_terrain_cmd,execute(&param))

  if(check_terrain_cmd.fetch()!=S_OK)
  {
   _THROW_OLEDB_FAILED(check_terrain_cmd,m_last_result)

   /*регистрация новой территории*/
   _THROW_OLEDB_FAILED(ins_terrain_cmd,execute(&pack_terrain_row))
  }
 }//fetch pack_terrain_cmd

 _THROW_OLEDB_FAILED(pack_terrain_cmd,m_last_result)
}//sync_terrains


А потом вспомнил про тебя и решил по интересоваться.

AS>Вообще все упирается во время.


Нет — все упирается в деньги. Но это будет другая история — когда я увижу здесь проект по созданию обобщенной системы реплицирования данных Могу предположить, что мой подход к решению данной задачи тебе совсем не понравиться
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.