В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).
Наверняка есть люди, у которым имеються такие же проблемы. Если вы заинтересованы в этом, если вы хотите поучастовать в таком проекте — высказывайтесь. Если нас окажется достаточное количество — сможем открыть проект.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Всем привет!
AS>Предлагаю всем высказаться по поводу этого.
AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги). AS>Наверняка есть люди, у которым имеються такие же проблемы. Если вы заинтересованы в этом, если вы хотите поучастовать в таком проекте — высказывайтесь. Если нас окажется достаточное количество — сможем открыть проект.
Если такая библиотека будет существовать, то это будет просто замечательно. С удовольствием присоединюсь к проекту.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Всем привет!
AS>Предлагаю всем высказаться по поводу этого.
На память.
1. ADO само по себе является "Overhead"-ом для OLEDB провайдера, по той самой причине, что таскает данные через VARIANT.
2. Что насчет нескольких транзакций в рамках одного подключения.
3. Как насчет многократного вызова разных команд с одним и тем же набором параметров.
4. Нарисуй как будет выглядеть цикл копирования таблиц — выбираем из одной, вставляем в другую.
5. Не стоит так сильно акцентировать свое внимание на свойствах объектов. Их конечно поддерживать нужно (по имени, по индексу, по однозначному идентификатору — CLSID+DBPROPID), но не больше чем реально необходимо.
6. Классы должны уметь сами создавать COM объекты, так и уметь подключаться к существующим. Без этого библиотеку нельзя использовать в "многомодульном" приложения.
7. С обработкой ошибок только через исключения я был бы немного более осторожным. Хотя бы потому, что в OLEDB есть такое понятие как предупреждение. Типа провайдер работу "почти" выполнил.
8. Насчет тех же ошибок. В OLEDB провайдеры могут возвращать коллекции ошибок.
9. Жирным выделены классы которые на 99% покрывают нужды наших проектов.
classt_db_data_source;
classt_db_session;
class t_db_auto_commit;
class t_db_auto_rollback;
class t_db_base_cursor; //base for cursor,command,xxx_rowsetclass t_db_cursor;
classt_db_command;
class t_db_open_rowset;
class t_db_open_schema_rowset;
class t_db_open_columns_rowset;
classt_db_field_data;
classt_db_field_info;
classt_db_base_row; //abstractclasst_db_row;
Короче, Алексей. Из своего личного опыта — интерфейсы VCL, ADO это конечно красивые, по своей простоте, вещи. Из за этой же простоты они и тупые.
Я могу тебе (или сюда) швырнуть достаточно приличный набор C++ классов для работы с БД, которые строятся поверх библиотеки доступа и ты сможешь частично оценить режимы её эксплуатации.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Примеров на С++ мало, а те что есть не нравятся.
КД>Короче, Алексей. Из своего личного опыта — интерфейсы VCL, ADO это конечно красивые, по своей простоте, вещи. Из за этой же простоты они и тупые.
Я согласен. У меня не с этим проблема. У меня проблема работы с ADO из С++.
КД>Я могу тебе (или сюда) швырнуть достаточно приличный набор C++ классов для работы с БД, которые строятся поверх библиотеки доступа и ты сможешь частично оценить режимы её эксплуатации.
Если она фриварная, почему бы тебе ею не поделиться со всеми. Возможно, она и подойдет мне, хотя из примеров я так не думаю.
Здравствуйте, 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$ подарю
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
хъ
КД>Ладно, забей на мои комментарии. Пришли мне письмо с ящика на который можно отправить мегабайтный архив (если хочешь, конечно) — приценишься к нашему шедевру в самой последней (вчерашней) редакции. Считай 150$ подарю
Мыло в профиле.
З.Ы. Ты против такой библиотеки или против ADO, или против того, чтобы в этом пойчаствовать?
Здравствуйте, 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() можно убрать потом.
Покритекуйте, буду признателен.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Всем привет!
AS>Предлагаю всем высказаться по поводу этого.
AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).
А смотрел ли ты OTL
Посмотри как сделано. Может просто не изобретать чтото новое а доработать данное?
Я хочу обертку над 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>Наверняка есть люди, у которым имеються такие же проблемы. Если вы заинтересованы в этом, если вы хотите поучастовать в таком проекте — высказывайтесь. Если нас окажется достаточное количество — сможем открыть проект.
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Предлагаю всем высказаться по поводу этого.
AS>В кратце: мне не хватает либы на С++ для доступа к БД. Рано или поздно я ее начну писать (если не найду подходящие аналоги).
Есть какие нибудь сдвиги ?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, 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(¶m))
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>Вообще все упирается во время.
Нет — все упирается в деньги. Но это будет другая история — когда я увижу здесь проект по созданию обобщенной системы реплицирования данных Могу предположить, что мой подход к решению данной задачи тебе совсем не понравиться
-- Пользователи не приняли программу. Всех пришлось уничтожить. --