Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 6 7 ... 16 ОтправитьПечать
Очень популярная тема (более 25 ответов) Провайдер OLE DB для ТП (число прочтений - 69091 )
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #60 - 03. Октября 2007 :: 06:09
Печать  
А это типа OLEDB тепереча можно использовать поставщиком?
ИЛИ это пока только наработки?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #61 - 03. Октября 2007 :: 07:10
Печать  
Саша Орефков и Саша Клабуков на Буст также согласны/не возражают.
Так что, наконец-то, начнем использовать Буст в исходниках 1С++.

Ура!! Как давно я этого ждал Улыбка - 11 месяцев прошло, как я впервые это предложил  Улыбка
  

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 для ТП
Ответ #62 - 03. Октября 2007 :: 07:12
Печать  
Олег, объясни мне, в чем проблема у твоего провайдера при автообновлении.
Мне, как и другим пользователям провайдера, в первую очередь интересно главное отличие от провайдера ТЗ - автообновление ТП согласно запросу.
  

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #63 - 03. Октября 2007 :: 08:35
Печать  
Uzhast

Ну, каюсь, я лично не был в восторге от использования boost.
Но, конечно, это было очень давно.
Теперь, когда мы знаем (ты же нам рассказал), что такое vector, конечно, мы полностью готовы использовать boost.
Смех

А если серьезно...
STL гениальна.
Вместе с boost, благодаря смартпойнтерам в первую очередь, крайне эффективна.

Одна беда у STL - она требует подготовки.
Вот, к примеру:
Код
Выбрать все
	int nums[] = {1, 2, 3, 1, 2, 3};

	typedef vector<int> VI;
	VI v;

	some_old_func(&v[0]);

	copy(nums, nums + sizeof(nums) / sizeof(int), v.end());
	v.insert(v.end(), nums, nums + sizeof(nums) / sizeof(int));
	for (VI::iterator i = v.begin(); i < v.end(); i++)
		if (*i == 2) v.erase(i);

	some_old_func(&v[0]);

	copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
 


Здесь в пяти строчках как миниму три ошибки, которые приводят к падению (в лучшем случае сразу) на этапе выполнения.
Хорошо, если это STLPort и режим отладки вытянет, а если нет...

Плюс как минимум в одном месте вместо линейной сложности использован алгоритм с потенциально квадратичной сложностью.

...
P.S.
Если проблемы о которых я только что написал, слишком очевидны, приношу извинения.
В реальной жизни, их можно спрятать гораздо лучше.
И у многих это получится даже намного лучше, чем у меня. Улыбка

P.P.S.
Сам использую и буду использовать STL, boost и стандартный C++.
Прощай, CArray.
И во многом спасибо за это именно Uzhast'у.
Это была серьезная и нужная работа по анализу проблем в реализациях CArray и STL (в vs6) от MS.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #64 - 03. Октября 2007 :: 12:43
Печать  
varelchik писал(а) 03. Октября 2007 :: 06:09:
А это типа OLEDB тепереча можно использовать поставщиком?
ИЛИ это пока только наработки?

Модифицированный 1С++ - это тот вариант с глюками в параметрах. Если это не напрягает, то я лично против использования провайдера не возражаю  Смех

artbear писал(а) 03. Октября 2007 :: 07:10:
Саша Орефков и Саша Клабуков на Буст также согласны/не возражают.
Так что, наконец-то, начнем использовать Буст в исходниках 1С++.

Ура!! Как давно я этого ждал Улыбка - 11 месяцев прошло, как я впервые это предложил  Улыбка



artbear писал(а) 03. Октября 2007 :: 07:12:
Олег, объясни мне, в чем проблема у твоего провайдера при автообновлении.
Мне, как и другим пользователям провайдера, в первую очередь интересно главное отличие от провайдера ТЗ - автообновление ТП согласно запросу.

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

  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #65 - 03. Октября 2007 :: 12:53
Печать  
kms писал(а) 03. Октября 2007 :: 08:35:
Ну, каюсь, я лично не был в восторге от использования boost.

Агггаааа! Улыбка

kms писал(а) 03. Октября 2007 :: 08:35:
Но, конечно, это было очень давно.
Теперь, когда мы знаем (ты же нам рассказал), что такое vector, конечно, мы полностью готовы использовать boost.

Улыбка

kms писал(а) 03. Октября 2007 :: 08:35:
Одна беда у STL - она требует подготовки.

Требует Улыбка Но никто же не заставляет вот прям щас, всем в срочном порядке, полностью на нее перейти. Для начала неплохо бы почитать пару книжек типа Мейерса и Джосьютиса (он же Джосаттис, он же Йосьютис).

kms писал(а) 03. Октября 2007 :: 08:35:
Вот, к примеру:
Код
Выбрать все
	int nums[] = {1, 2, 3, 1, 2, 3};

	typedef vector<int> VI;
	VI v;

	// передача в функцию адреса несуществующего элемента (вектор пустой)
	some_old_func(&v[0]);

	// порча памяти - в векторе нет элементов
	// v.end () заменить на back_inserter (v) + reserve
	// или сделать resize и заменить v.end () на v.begin ()
	copy(nums, nums + sizeof(nums) / sizeof(int), v.end());

	v.insert(v.end(), nums, nums + sizeof(nums) / sizeof(int));

	// опасные игры с итераторами
	// вылезаем за пределы вектора, можем удалить неизвестно что
	// здесь напрашивается remove + erase - заодно не надо будет делать цикл
	for (VI::iterator i = v.begin(); i < v.end(); i++)
		if (*i == 2) v.erase(i);

	some_old_func(&v[0]);

	copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
 


Здесь в пяти строчках как миниму три ошибки, которые приводят к падению (в лучшем случае сразу) на этапе выполнения.


kms писал(а) 03. Октября 2007 :: 08:35:
Плюс как минимум в одном месте вместо линейной сложности использован алгоритм с потенциально квадратичной сложностью.

Это ты про что? Про erase? Вроде бы, если требуется сохранить порядок следования элементов в векторе, то такого алгоритма не избежать (или избежать?) А если не требуется, то можно посвопать несколько элементов в конец и оттяпать хвост.

kms писал(а) 03. Октября 2007 :: 08:35:
Сам использую и буду использовать STL, boost и стандартный C++.
Прощай, CArray.

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #66 - 03. Октября 2007 :: 12:59
Печать  
Uzhast писал(а) 03. Октября 2007 :: 12:43:

Согласен

ЗЫ блин, жалко в цитате картинке нету Печаль, а только ссылка на нее.

  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Провайдер OLE DB для ТП
Ответ #67 - 03. Октября 2007 :: 13:48
Печать  
Uzhast писал(а) 03. Октября 2007 :: 12:43:
artbear писал(а) 03. Октября 2007 :: 07:12:
Олег, объясни мне, в чем проблема у твоего провайдера при автообновлении.
Мне, как и другим пользователям провайдера, в первую очередь интересно главное отличие от провайдера ТЗ - автообновление ТП согласно запросу.

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


У журнала есть индекс IDDOC, у справочника - ID , у шапки документа IDDOC.
Т.е. если известны эти ID и IDDOC (а они известны - т.к. - видимые и новые), то запрос с отбором по этим значениям должен выполняться доли сек.  Может ограничиться для начала только элементами справочника и документами?

Или есть способ отловить событие  изменения выбранного документа или спр. без анализа 1cv7.mlg?
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #68 - 03. Октября 2007 :: 13:58
Печать  
kiruha писал(а) 03. Октября 2007 :: 13:48:
У журнала есть индекс IDDOC, у справочника - ID , у шапки документа IDDOC.
Т.е. если известны эти ID и IDDOC (а они известны - т.к. - видимые и новые), то запрос с отбором по этим значениям должен выполняться доли сек.  Может ограничиться для начала только элементами справочника и документами?

Сейчас мы рассматриваем статический провайдер. Он может показывать ЛЮБОЙ запрос, но и имеет свои ограничения, связанные с производительностью.

А использовать всякие IDDoc и ID мы будем в провайдере динамическом. Как я и написал в первом посте. Пока надо посмотреть, нормально ли функционирует статический и, если все нормально, браться за динамический. Вообще, подозреваю, с ним будет куча нюансов, которые пока, возможно, плохо видно.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #69 - 03. Октября 2007 :: 20:40
Печать  
Uzhast писал(а) 03. Октября 2007 :: 12:53:
Код
Выбрать все
	// опасные игры с итераторами
	// вылезаем за пределы вектора, можем удалить неизвестно что
	// здесь напрашивается remove + erase - заодно не надо будет делать цикл
	for (VI::iterator i = v.begin(); i < v.end(); i++)
		if (*i == 2) v.erase(i);
 



ну да; смысл в том, что итераторы вектора после точки удаления инвалидируется.
т.е. должно быть хотя бы как-то так:
Код
Выбрать все
	for (VI::iterator i = v.begin(); i < v.end(); )
		if (*i == 2) i=v.erase(i);
		else ++i;
 


в лучшем - согласен, remove/erase

Цитата:
kms писал(а) 03. Октября 2007 :: 08:35:
Плюс как минимум в одном месте вместо линейной сложности использован алгоритм с потенциально квадратичной сложностью.

Это ты про что? Про erase? Вроде бы, если требуется сохранить порядок следования элементов в векторе, то такого алгоритма не избежать (или избежать?) А если не требуется, то можно посвопать несколько элементов в конец и оттяпать хвост.

не, не избежать
но remove/erase даст линейную сложность, а вышеприведенный шедевр может дать n*(n-1)/2 перемещений, если внезапно все значения одновременно удовлетворят предиката Улыбка

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

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #70 - 04. Октября 2007 :: 11:32
Печать  
Uzhast писал(а) 03. Октября 2007 :: 13:58:
Сейчас мы рассматриваем статический провайдер. Он может показывать ЛЮБОЙ запрос, но и имеет свои ограничения, связанные с производительностью.

ИМХО чем быстрее ты сможешь объединить новый и старый функционал ОлеДБ, тем быстрее мы сможем влить твои правки в 1С++.
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Провайдер OLE DB для ТП
Ответ #71 - 04. Октября 2007 :: 13:32
Печать  
Также просьба - т.к. провайдер новый, то возможно в рамках его
можно решить проблему                              ТЗ -> "временная таблица" Fox.
На данный момент         "временная таблица" -> ТЗ выполняется на 2 порядка быстрее.

Если это удасться сделать - то станет возможным проводить операции вычисления над таблицами при помощи Fox а.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #72 - 04. Октября 2007 :: 22:43
Печать  
kiruha писал(а) 04. Октября 2007 :: 13:32:
Также просьба - т.к. провайдер новый, то возможно в рамках его
можно решить проблему                              ТЗ -> "временная таблица" Fox.
На данный момент         "временная таблица" -> ТЗ выполняется на 2 порядка быстрее.

Если это удасться сделать - то станет возможным проводить операции вычисления над таблицами при помощи Fox а.

Проблема "ТЗ -> "временная таблица" Fox" не имеет отношения к провайдеру для ТП. Она, скорее, имеет отношение к подсистеме OLE DB, а, значит, это тебе к spock'у.

А зачем тебе эта фича? Почему не хватает SELECT INTO TABLE? Если объем данных невелик, то его без тормозов можно во временную таблицу загнать и через несколько запросов INSERT. А если велик, то откуда ты его берешь? Не сам же рожаешь? Наверное, из базы все-таки берешь?
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #73 - 05. Октября 2007 :: 03:36
Печать  
Да, хотелось бы, чтобы раскрыли тему сисек ТЗ vs "временная таблица"
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Провайдер OLE DB для ТП
Ответ #74 - 05. Октября 2007 :: 07:12
Печать  
spock писал(а) 05. Октября 2007 :: 03:36:
Да, хотелось бы, чтобы раскрыли тему сисек ТЗ vs "временная таблица"


Ну я уже раз десять писал - можно выполнять запросы к базе данных ДБФ сохраняя результат во
временной таблице и самое интересное , что эта таблица располагается в оперативке , а не на диске и не выгружаетс в ТЗ. В дальнейшем к такой таблице можно обращаться как к обычной таблице базы.
Т.е. такой запрос очень быстро работает.
http://www.1cpp.ru/forum/YaBB.pl?num=1188673318

Выгрузить такую таблицу в ТЗ элементарно и очень быстро. Обычный Select по всем полям.

А вот проделать обратную операцию - имея ТЗ загрузить ее в такую таблицу ( с колонками, но без записей)
быстро не получается - перебровал обычный INSERT, XMLTOCURSOR, APPEND и кучу другого - все медленно.

Цитата:
А зачем тебе эта фича? Почему не хватает SELECT INTO TABLE? Если объем данных невелик, то его без тормозов можно во временную таблицу загнать и через несколько запросов INSERT. А если велик, то откуда ты его берешь? Не сам же рожаешь? Наверное, из базы все-таки берешь?

Данные, конечно, как правило берутся из базы, но не всегда путь прямолинеен - иначе ТЗ или ИТЗ вообще была бы не нужна. Использовать можно для того же, для чего используют ИТЗ, плюс большая функциональность, и плюс возможность в запросах обращаться к данным из ТЗ, как в 8.0.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 3 4 [5] 6 7 ... 16
ОтправитьПечать