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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #30 - 24. Сентября 2007 :: 15:45
Печать  
spock писал(а) 24. Сентября 2007 :: 15:43:
На сколько большой?

Буст целиком в zip-файле весит 20М. Хедеры в раре - меньше 2М.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #31 - 24. Сентября 2007 :: 15:53
Печать  
ага, я так понял они в одном пакете платформонезависимую сборку раздают.
я boost_1_33_1.exe еще как 9,7 МБ забирал.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #32 - 24. Сентября 2007 :: 15:55
Печать  
spock писал(а) 24. Сентября 2007 :: 15:53:
ага, я так понял они в одном пакете платформонезависимую сборку раздают.
я boost_1_33_1.exe еще как 9,7 МБ забирал.

Хм. Наверное, у меня какой-то "самый полный" вариант Улыбка Кстати, я пока тоже на 1.33 сижу.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #33 - 24. Сентября 2007 :: 15:56
Печать  
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #34 - 24. Сентября 2007 :: 16:01
Печать  
ты boost собирал?
я честно собрал, ушло около часа, а народ говорит, что вообще, не обязательно.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #35 - 24. Сентября 2007 :: 16:04
Печать  
spock писал(а) 24. Сентября 2007 :: 16:01:
ты boost собирал?
я честно собрал, ушло около часа, а народ говорит, что вообще, не обязательно.

Собирал. Улыбка Причем Интелом. Тоже ушло около часа. Правда, пока ничего из библиотек не задействовал. Используется только шаблонная библиотека - для этого сборка действительно не нужна, достаточно только путь к хедерам в Студии прописать.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #36 - 26. Сентября 2007 :: 04:37
Печать  
Очень интересная статья по различному использованию бустовских смарт-пойнтеров
http://www.boost.org/libs/smart_ptr/sp_techniques.html
Описаны практически все ситуации, возникающие при выделении памяти или любых других ресурсов.

ЗЫ это для тех, кто с бустом еще не знаком
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #37 - 30. Сентября 2007 :: 17:51
Печать  
Выложил обновленный вариант. Изменения:
- Исправлен баг с ошибкой при нажатии "End".
- Исправлен баг: могла многократно дублироваться последняя строка выборки Улыбка
- Добавлен метод "УстановитьПараметр (НазваниеПараметра, ЗначениеПараметра)". Использование можно посмотреть в тестовой обработке.
- Реализован медленный быстрый поиск. Поиск работает по любой колонке. Работает тупым перебором всех значений в колонке, начиная с первой строки. Регистронезависим.

Что не понравилось в ТП (На Дмитро я еще не наезжал? Щас будет)
1) Интерфейс CDataProvider - скрещение ужа с ежом. Присутствует методы, которые позволяют ТП управлять провайдером, вместе с методами, которыми провайдер может управлять ТП. ИМХО, нужно в этом интерфейсе сделать метод, которым ТП передаст интерфейс для взаимодействия с ним. К тому же в невиртуальных методах торчат детали реализации: HWND и пересылка сообщений. Это не хорошо. Представим ситуацию: ТП на клиентской машине, а провайдер может лежать либо на той же машине, либо на сервере. Если бы вместо невиртуальных функций был полноценный интерфейс, то реализовать такую систему можно было бы проще и красивее. А так еще и фиктивный HWND делать...

2) Не понравилась реализация перетаскивания ползунка прокрутки. Похоже, при этом фетчатся строки, пока не дофетчим до нужной. Или я чего не понял? Происходит переколупывание нехренового объема данных, что приводит к тормозам. Также это является недостатком по сравнению со штатными гридами - они-то такие штуки обрабатывают влет и без тормозов. Воспроизвести тормоза можно, например, таким запросом:
Код
Выбрать все
SELECT
 Журнал.IDDocDef + Журнал.IDDoc AS [Документ $Документ]
FROM
 1sjourn AS Журнал
ORDER BY
 Журнал.Date, Журнал.Time
 


и поперетаскивать ползунок. Вообще, если не таскать ползунок, то работает довольно шустро.Не слишком большая пауза при выборке данных, а дальше без тормозов. Для теста использую не слишком большую базу (2К номенклатуры и документы за 2 года). Однако ест много памяти. ИМХО, для ТП нужен еще один метод в CDataProvider: аналогичный QueryRows, но с дополнительным параметром: смещение от переданной строки. Такая штука вроде неплохо ложится как на XBase методы доступа, так на SQL.

3) Лик строк в быстром поиске? В методе QuickSearch провайдер должен сделать поиск и, если нашел, вызывать SetCurrentRow. В SetCurrentRow передается указатель на строку, которую надо сделать текущей. Эта строка в ТП не освобождается. Тут что, подразумевается, что освобождать должен провайдер? ИМХО, нелогично. Во-первых, это не указано в документации. Во-вторых, при обычной выборке данных строки удаляет всегда ТП. В-третьих, реализация ТП может смениться и оно может захотеть временно хранить эту строку для своих целей.


По поводу Буста. ИМХО, если какие-то ретрограды не хотят его использовать, то их никто не заставляет. Им достаточно скачать пару мегов хедеров, прописать путь к ним в Студии и ... не использовать Буст. Проект будет собираться, а в своем коде они могут Буст никак не задействовать. А то что это за детский максимализм (с) получается? "Не хочу, не буду осваивать Буст, так не доставайся он никому!".
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #38 - 01. Октября 2007 :: 05:41
Печать  
Все это очень хорошо, но с приведенным провайдером у меня не работает таймаут обновления Печаль
Т.е. я делаю в разделенной базе
1) для провайдера устанавливаю запрос к справочнику (простейший Select, код+наименование)
2) ставлю таймаут 1 сек
3) захожу в список справочника и изменяю наименование одного или нескольких элементов.
А в ТП ничего не меняется?

Я где-то ошибся? или еще что?
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #39 - 01. Октября 2007 :: 05:48
Печать  
Олег, Кирилл, что скажете по поводу внесения правок Олега по ОлеДБ в текущую 1С++ 2.5?
Код ОлеДБ сильно изменился?
Какие фичи пропали/появились?
Если пропали, каким образом можно совместить и старый код, и код поддержки провайдера?
Я за максимальную совместимость Улыбка

ЗЫ имхо без внесения изменений в 1С++ провайдер ОлеДБ не жизнеспособен Печаль
Народ просто не сможет им пользоваться.
  

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



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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Провайдер OLE DB для ТП
Ответ #41 - 01. Октября 2007 :: 06:57
Печать  
А нельзя объяснить на пальцах - чем новый провайдер для ТП будет отличаться
от ТЗ в качестве поставщика данных?
Лично меня ТЗ не устраивает  потому, что не обновляется во время изменения
данных текущим пользователем. В данном случае - проблема же остается?
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #42 - 01. Октября 2007 :: 10:27
Печать  
artbear писал(а) 01. Октября 2007 :: 05:41:
Все это очень хорошо, но с приведенным провайдером у меня не работает таймаут обновления Печаль

В статическом провайдере данные забираются один раз и потом просто выводятся данные, полученные при первой выборке. Обновление по таймауту должно быть в динамическом провайдере - который будет работать методами XBase и делать частичные выборки.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #43 - 01. Октября 2007 :: 10:28
Печать  
artbear писал(а) 01. Октября 2007 :: 05:48:
ЗЫ имхо без внесения изменений в 1С++ провайдер ОлеДБ не жизнеспособен Печаль
Народ просто не сможет им пользоваться.

Жизнеспособен в случае, если существенную часть 1С++ сдублировать в компоненте провайдера (подсистему OLE DB, метапарсер). Но кому нужно такое дублирование?...
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #44 - 01. Октября 2007 :: 10:35
Печать  
spock писал(а) 01. Октября 2007 :: 06:19:
Про boost: а кто не хочет использовать его? Я думаю, что это нужно здесь обсудить с доводами.
Про внесение: что-то отвалилось после того, как всунули провайдер? Если да, то такой провайдер нам не нужен.

Я уже писал: отвалились подготовленные запросы и изменился алгоритм выборки строк: было порциями по 50, а стало по одной.

Вообще, если у тебя есть вопросы по изменениями в коде, пиши (можно в личку, если не хочешь на форуме). А то некоторые мои изменения могут показаться неоднозначными Улыбка Например, у тебя были проверки на ошибки выделения памяти, а теперь их вроде как нет. Т.е. вроде как ухудшение Улыбка Но на самом деле у тебя эти проверки хоть и есть, но они не работают! Улыбка Т.е. что у тебя нет, что у меня нет - и поведение не изменилось, получается Улыбка Ну и у меня есть некоторые сомнения по своим изменениям...

Подготовленные запросы скоро верну обратно. Кстати, а в каких примерно случаях такая возможность может давать ускорение? Именно в плане использования из языка 1С?

По поводу выборок по 50 строк сразу. А ты проверял? Это дает большое ускорение? Подозреваю, что если это дает ускорение, то оно может зависеть от объема данных в строке. Тогда, может, эту возможность стоит сделать настраиваемой?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 16
ОтправитьПечать