Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 16 ОтправитьПечать
Очень популярная тема (более 25 ответов) Провайдер OLE DB для ТП (число прочтений - 69400 )
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #45 - 01. Октября 2007 :: 10:37
Печать  
kiruha писал(а) 01. Октября 2007 :: 06:57:
А нельзя объяснить на пальцах - чем новый провайдер для ТП будет отличаться
от ТЗ в качестве поставщика данных?
Лично меня ТЗ не устраивает  потому, что не обновляется во время изменения
данных текущим пользователем. В данном случае - проблема же остается?

Пока только в том, что нет промежуточной пересылки данных - из OLE DB в ТЗ. Использование памяти поменьше, скорость повыше (вроде как).

По поводу автообновления попробую еще покопать...
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #46 - 01. Октября 2007 :: 10:58
Печать  
я не считаю, что обсуждение этой темы стоит перенести в кулуары. Я же могу быть не прав в своих рассуждениях и выводах, так меня и поправят Улыбка

замена "self-made sp" на "std::vector": я тоже был бы рад на тот момент использовать что-то стандартное, но тут появляются вопросы подключения левых библиотек, даже и std. Такие вещи нужно обсуждать. Я решил, что мини-велосипед лучше долгих переговоров и утяжеления компоненты.

Подготовленные запросы нужны, они должны помочь в деле провайдера, имхо.

Про выборку по 50 строк - хз, чисто интуитивно поставил на этапе тестирования, но так и осталось. Но опять же, чисто интуитивно, это лучше, чем одна строка.

Параметризированные запросы тоже нужны. Зря я чтоли на них столько времени угрохал Улыбка

Про проверку памяти: ну если памяти не хватит, то мой код упадет не первым Улыбка
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #47 - 01. Октября 2007 :: 11:07
Печать  
spock писал(а) 01. Октября 2007 :: 10:58:
я не считаю, что обсуждение этой темы стоит перенести в кулуары. Я же могу быть не прав в своих рассуждениях и выводах, так меня и поправят Улыбка

Улыбка

spock писал(а) 01. Октября 2007 :: 10:58:
замена "self-made sp" на "std::vector": я тоже был бы рад на тот момент использовать что-то стандартное, но тут появляются вопросы подключения левых библиотек, даже и std. Такие вещи нужно обсуждать. Я решил, что мини-велосипед лучше долгих переговоров и утяжеления компоненты.

А утяжеления не будет Улыбка vector - шаблонный класс, методы которого практически полностью инлайнятся. Т.е. в результате генерится машинный код, практически идентичный сишному коду работы с обычным сишным массивом.

Ну и вообще, утяжеление - это не страшно. Фичи и надежность гораздо важнее. А в случае с вектором скорость тоже не страдает.

spock писал(а) 01. Октября 2007 :: 10:58:
Подготовленные запросы нужны, они должны помочь в деле провайдера, имхо.

Подумаем Улыбка

spock писал(а) 01. Октября 2007 :: 10:58:
Про выборку по 50 строк - хз, чисто интуитивно поставил на этапе тестирования, но так и осталось. Но опять же, чисто интуитивно, это лучше, чем одна строка.

Это я верну. Надо будет потом еще потестить, нельзя ли играми с размером порции как-то влиять на скорость...

spock писал(а) 01. Октября 2007 :: 10:58:
Параметризированные запросы тоже нужны. Зря я чтоли на них столько времени угрохал Улыбка

Улыбка

spock писал(а) 01. Октября 2007 :: 10:58:
Про проверку памяти: ну если памяти не хватит, то мой код упадет не первым Улыбка

Ну, тут всякое может быть Улыбка В принципе, сделать проверку на ошибки памяти не сложно. Надо только не результат new на NULL проверять, а ловить std::bad_alloc Улыбка Заодно обработку ошибок можно свести в одно единственное место, что код сильно упрощает.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #48 - 01. Октября 2007 :: 11:12
Печать  
Uzhast писал(а) 01. Октября 2007 :: 11:07:
Это я верну. Надо будет потом еще потестить, нельзя ли играми с размером порции как-то влиять на скорость...

Размер порции планировалось вынести наружу, но если честно, то каждый раз было лень Улыбка
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #49 - 01. Октября 2007 :: 11:21
Печать  
Цитата:
Фичи и надежность гораздо важнее.

тем более, что мой memptr получился проще колеса.
кстати, этим я не хочу убедить, что мое лучше std.
просто пересказываю ход своих мыслей.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #50 - 01. Октября 2007 :: 11:36
Печать  
spock писал(а) 01. Октября 2007 :: 11:21:
тем более, что мой memptr получился проще колеса.
кстати, этим я не хочу убедить, что мое лучше std.
просто пересказываю ход своих мыслей.

Зато у него не закрыт конструктор копирования и оператор присваивания. Поэтому можно случайно скопировать объект твоего класса где-нибудь и будет очень не хорошо Улыбка При этом о такой ошибке ты можешь узнать очень не скоро.

Так же на создание этого класса ты потратил определенное время. А если бы взял вектор, то лишнего времени тратить бы вообще не пришлось Улыбка Т.е. std ускоряет написание кода (и не замедляет программу). Ну и вообще, в 1С++ в stdafx.h "#include <vector>", похоже, присутствует вообще с рождения Улыбка Т.е. он уже подключен и обсуждать его использование не надо Улыбка
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #51 - 01. Октября 2007 :: 13:01
Печать  
так перейдем в тему религии.
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Провайдер OLE DB для ТП
Ответ #52 - 01. Октября 2007 :: 13:08
Печать  
Uzhast писал(а) 01. Октября 2007 :: 10:37:
kiruha писал(а) 01. Октября 2007 :: 06:57:
А нельзя объяснить на пальцах - чем новый провайдер для ТП будет отличаться
от ТЗ в качестве поставщика данных?
Лично меня ТЗ не устраивает  потому, что не обновляется во время изменения
данных текущим пользователем. В данном случае - проблема же остается?

Пока только в том, что нет промежуточной пересылки данных - из OLE DB в ТЗ. Использование памяти поменьше, скорость повыше (вроде как).

По поводу автообновления попробую еще покопать...


Но в текущей реализации промежуточная пересылка из OLE DB в ТЗ занимает несколько процентов от общего времени выпонения  ...  (в отличие от ADO).
Вряд ли ради этих процентов интересно. Озадачен

Вот автообновление, если это возможно, это было бы Сильно Улыбка
А то пользователь жмет - провести документ - и ожидает тут же увидеть его проведенным,
а не через 10 мин Улыбка
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #53 - 01. Октября 2007 :: 13:12
Печать  
kiruha писал(а) 01. Октября 2007 :: 13:08:
Но в текущей реализации промежуточная пересылка из OLE DB в ТЗ занимает несколько процентов от общего времени выпонения  ...  (в отличие от ADO).

А как ты мерял? Тут же вроде надо 1С++ запускать под профайлером... Из 1С особо не померяешь вроде...
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Провайдер OLE DB для ТП
Ответ #54 - 01. Октября 2007 :: 13:32
Печать  
2 способа
1. а)Выполнить - не возвращает ТЗ
   б)ВыполнитьИнструкцию - возвращает ТЗ
2.
а)ВыполнитьИнструкцию - возвращает ТЗ
б)Непосредственное выполнение запроса в память (курсор или массив), не записывая на диск
http://www.1cpp.ru/forum/YaBB.pl?num=1188673318 - возвращаемое значение вообще неинтересно


  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #55 - 01. Октября 2007 :: 13:42
Печать  
1) Я за настраиваемость ОлеДБ - пусть количество строк будет настраиваемым, думаю, что хуже не будет Улыбка
2) По вектору +1, однозначно лучше его использование, чем С-массивы
3) По бусту нужно договориться с другими разработчиками Улыбка
Но я посмотрел код твоих правок в 1С++::ОлеДБ и вижу, что временно можно заменить бустовский shared_ptr на используемый мной sh_ptr. Вроде используются фичи, доступные в обоих смарт-пойнтерах Улыбка

4) Пока не перешли к бусту, на днях научу sh_ptr уметь делать конвертацию от производного к базовому классу или к другому разрешенному преобразованию.
Вроде несложно, просто не нужно было.
Сразу говорю - я за буст, но пока нет договоренности о его использовании, буду использовать "свои" смарт-пойнтеры Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #56 - 01. Октября 2007 :: 17:23
Печать  
artbear писал(а) 01. Октября 2007 :: 13:42:
3) По бусту нужно договориться с другими разработчиками Улыбка
Но я посмотрел код твоих правок в 1С++::ОлеДБ и вижу, что временно можно заменить бустовский shared_ptr на используемый мной sh_ptr. Вроде используются фичи, доступные в обоих смарт-пойнтерах Улыбка

Я против такой замены. Потому что внесенные изменения вытаскивают наружу интерфейс для взаимодействия 1С++ и сторонних ВК. А это сильно ограничивает ДАЛЬНЕЙШИЕ модификации интерфейса. Поэтому ИЗНАЧАЛЬНО должен быть интерфейс с минимальным количеством граблей. А это обеспечивает как раз Буст.

artbear писал(а) 01. Октября 2007 :: 13:42:
4) Пока не перешли к бусту, на днях научу sh_ptr уметь делать конвертацию от производного к базовому классу или к другому разрешенному преобразованию.
Вроде несложно, просто не нужно было.

Это кажется, что несложно. Чтобы это сделать, придется заметно изменить структуру sh_ptr. Плюс это только одна отсутствующая фича. А дальше их может понадобится больше. Предлагаешь каждый раз менять sh_ptr? В результате ты придешь к самописной и, скорее всего, кривоватой реализации boost::shared_ptr. shared_ptr писали очень опытные люди. Которые уже прошли по граблям, по которым нам еще предстоит нагуляться. Или не предстоит, если мы будем использовать shared_ptr.

Помню, как было. Сидел, писал код. Потом вдруг завис на коде вроде этого:
Код
Выбрать все
boost::shared_ptr<CBase> pBase;
boost::shared_ptr<CDerived> pDerived (dynamic_cast<CDerived *> (pBase.get ()));
 


Понял, что это лажа. Понял, что без поддержки со стороны смартпойнтеров dynamic_cast сделать нельзя. Полез в Буст и СРАЗУ ЖЕ нашел решение. А сколько еще таких открытий нас ожидает?

Вообще, бустовские смартпойнтеры уже вошли в будущий стандарт C++. Его утверждение дело ближайшего времени. Поэтому никаких РАЗУМНЫХ аргументов против Буста я не вижу.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #57 - 01. Октября 2007 :: 17:56
Печать  
И вообще, покажите мне этого ретрограда, что против Буста! Я его загрызу!
  

dracula.gif ( 5 KB | Загрузки )
dracula.gif
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #58 - 02. Октября 2007 :: 21:04
Печать  
Выложил обновленный вариант:
- добавлено обновление по таймауту.
- убрано выпадение 1С в осадок при обращении к коллекции колонок при отсутствии данных.

Хм. Вообще, обновление по таймауту для статического провайдера это ... хм... нечто Улыбка Впрочем, ладно. Человек, который для статического провайдера будет использовать автообновление для запросов вида:
Код
Выбрать все
SELECT
 Журнал.IDDocDef + Журнал.IDDoc AS [Документ $Документ]
FROM
 1sjourn AS Журнал
ORDER BY
 Журнал.Date, Журнал.Time
 


сам себе мохнатый буратин.

PS. Сырки пока не обновил - спать хочется.
PPS. Кстати, увидел тут потенциальную возможность использования weak_ptr... Так что осваивайте Буст товарищи.
PPPS. Артур! Видишь, ретроградов либо нет, либо они трусливо молчат? Я смотрел, в этой ветке вся "зелень" отметилась Улыбка А значит, и причин для невключения Буста в 1С++ нет Улыбка
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #59 - 03. Октября 2007 :: 03:58
Печать  
Есть мнение, что не вся "зелень" отметилась.
эта, секунд 20 думал о смысле слова "зелень"
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 16
ОтправитьПечать