Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8 9 ... 16 ОтправитьПечать
Очень популярная тема (более 25 ответов) Провайдер OLE DB для ТП (число прочтений - 75407 )
spock
1c++ developer
1c++ moderator
Отсутствует



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



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #91 - 10. Октября 2007 :: 14:52
Печать  
Цитата:
такие запросы работают, но подыхает провайдер

расскажи подробнее.

потяну чуток время, а то мне жутко некогда этим заниматься
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #92 - 11. Октября 2007 :: 04:21
Печать  
kms писал(а) 10. Октября 2007 :: 12:11:
Ну на SQL базах и ТП и штатные контролы себя так ведут - там тянуть нельзя, можно только мотать, вверх-вниз, по строчке или по странице.
Это первое, что огорчает пользователей при переходе на SQL Улыбка
И, в принципе, в динамическом провайдере OLEDB скорее всего будет так же.

А вот насчет динамического провайдера еще не понятно Улыбка Во-первых, если мы ходим по таблице целиком без применения фильтров, то количество строк получить не сложно. А вот если с фильтрами (какой-то журнал документов или группа справочника), то непонятно, как получить количество строк. Но ведь одинэсина это как-то делает? В ДБФ ведь работают ползунки. И ведь не тормозят, падлы Улыбка

kms писал(а) 10. Октября 2007 :: 12:11:
Можно, к примеру, внести в интерфейс "QueryRows" вирт. метод "промотать n строк", пустой для SQL провайдеров - а для произвольных будет очень эффективно (fetch цикл будет не нужен).
Я помню, ты что-то такое и предлагал.

Ага, только я говорил не про "промотать", а "получить N строк, но сместившись от данной на M строк". Что, в принципе, эквивалентно "промотать" + "получить N". Просто у меня перед глазами была функция "IRowset::GetNextRows" от OLE DB.

kms писал(а) 10. Октября 2007 :: 12:11:
На самом деле, многомодульная архитектура - это такая большая тема Улыбка
Можно дойти даже до того, что классы с данными нельзя передавать между модулями, ибо данные - это детали реализации, непереносимые в общем виде.

А у меня так и сделано в 1С++ и провайдере. Через модули ходит только обертка.

kms писал(а) 10. Октября 2007 :: 12:11:
Цитата:
А поводу "стратегии управления жизнью строк" нужно вообще хорошо подумать. Может и правда лучше будет все сделать на COM, чтобы провайдеры можно было химичить на чем-нибудь типа VB/Delphi, чтобы народ потянулся Улыбка

Глобально Улыбка
Может быть сначала для народа сделать прокси-поставщика, с открытыми интерфейсам...
Но тема нужная, лучшие люди уже высказывались за Улыбка

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #93 - 11. Октября 2007 :: 04:28
Печать  
spock писал(а) 10. Октября 2007 :: 14:52:
Цитата:
такие запросы работают, но подыхает провайдер

расскажи подробнее.

На умолчальном значении ключа OLEDB_SERVICES не работают параметризованные запросы. Поменял значение на 0, как в ФАКе сказано. Параметризованные запросы заработали. А вот провайдер отвалился. Падает на выполнении
Код
Выбрать все
m_pICommandText->Execute(NULL, IID_IRowsetLocate, pParams,
				pnRowsAffected, pIRowset)
 


с ошибкой, что интерфейс не поддерживается.

Поэтому пришлось переписать на использование IRowset вместо IRowsetLocate.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #94 - 11. Октября 2007 :: 04:29
Печать  
berezdetsky писал(а) 10. Октября 2007 :: 13:00:
Если говорить конкретно о SQL Server, то API серверных курсоров позволяет и random доступ, и получение нескольких строк одним обращением к API (конечно, не для всех типов курсоров). Не знаю, впрочем, доступен ли этот функционал средствами ODBC-драйвера без прямого обращения к API.

Вот я и говорю, а чего бы вообще на курсоры не перейти? Улыбка
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #95 - 11. Октября 2007 :: 05:13
Печать  
Uzhast писал(а) 11. Октября 2007 :: 04:28:
Поэтому пришлось переписать на использование IRowset вместо IRowsetLocate.

А попробуй-ка установить dbproperty DBPROP_IRowsetLocate в значение VARIANT_TRUE перед выполнением.
Установку пропертизей можно заценить на примере таймаута исполнения.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #96 - 11. Октября 2007 :: 08:37
Печать  
spock писал(а) 11. Октября 2007 :: 05:13:
А попробуй-ка установить dbproperty DBPROP_IRowsetLocate в значение VARIANT_TRUE перед выполнением.
Установку пропертизей можно заценить на примере таймаута исполнения.

Вот так?
Код
Выбрать все
	{
		CComPtr<ICommandProperties> spCommProperties;

		hr = m_pICommandText->QueryInterface(&spCommProperties);
		if(FAILED(hr))
		{
			strErr = "FAILED! ICommandProperties::QueryInterface()";
			GetErrorDescription(strErr);
			CBLModule::RaiseExtRuntimeError(strErr, mmRedErr);
			return false;
		}

		CDBPropSet PropSet(DBPROPSET_ROWSET);
		PropSet.AddProperty(DBPROP_IRowsetLocate, VARIANT_TRUE);

		hr = spCommProperties->SetProperties(1, &PropSet);
		if(FAILED(hr))
		{
			strErr = "FAILED! ICommandProperties::SetProperties(): Не удалось установить property";
			CBLModule::RaiseExtRuntimeError(strErr, mmRedErr);

			return false;
		}
	}
 



Говорит
Цитата:
FAILED! ICommandProperties::SetProperties(): Не удалось установить property
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #97 - 11. Октября 2007 :: 09:03
Печать  
Ну, вроде, правильно все. И сет нужный и пропяртя та. Обманули чтоль опять?
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #98 - 11. Октября 2007 :: 09:04
Печать  
А попробуй этот код выполнить для скуля. Даст ли скуль к себе применить это свойство.
А то таймаут тоже для скуля пашет, а для фокса нет. Хотя в доке написано, что фокс это свойство суппортит.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #99 - 11. Октября 2007 :: 09:10
Печать  
spock писал(а) 11. Октября 2007 :: 09:04:
А попробуй этот код выполнить для скуля. Даст ли скуль к себе применить это свойство.
А то таймаут тоже для скуля пашет, а для фокса нет. Хотя в доке написано, что фокс это свойство суппортит.

Да нет у меня скульных баз под рукой Улыбка Во всяком случае для 1С. Может, хотя бы строку подключения примерную подкинешь, если не сложно? А то искать еще, пробовать...
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



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



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #101 - 11. Октября 2007 :: 09:15
Печать  
создаешь текстовый файл, переименовываешь расширение в UDL.
Дальше его открываем и пользуемся услугами помощника.
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #103 - 11. Октября 2007 :: 10:15
Печать  
spock писал(а) 11. Октября 2007 :: 09:04:
А попробуй этот код выполнить для скуля. Даст ли скуль к себе применить это свойство.
А то таймаут тоже для скуля пашет, а для фокса нет. Хотя в доке написано, что фокс это свойство суппортит.

Для скуля та же ругань выдается Улыбка
Хм. Оказывается скуль в качестве количества строк выдает -1. В результате у меня провайдер от этого отваливается Улыбка Пришлось воркэраунд сделать. Сижу теперь по таблице messages базы сообщений RSDN шарюсь Улыбка
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #104 - 11. Октября 2007 :: 10:18
Печать  
spock писал(а) 11. Октября 2007 :: 09:16:
нам бы как-нить в асе пересечься...

Мне убегать скоро Улыбка Но вот на всякий случай номер: 264206166
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8 9 ... 16
ОтправитьПечать