UpdateQuery и Include фильтр...

Можно ли использовать в UpdateQuery Include фильтр? И если можно, то как? Попытка разобраться с ним как с SelectQuery (ApplyDatasetIncludeFilter(UpdateIDs, 'IDs', ReserveNumberIDs, true)) приводит к ошибке, смысл кототой - 'Dataset.SelectQuery - undefined'...

Нравится

16 комментариев

Вы можете оставить его всегда включенным (если нет никаких ограничений для этого) или воспользоваться EnableUpdateQueryFilters(UpdateQuery, Enabled, FilterCodesArray).
ApplyDatasetIncludeFilter() не предназначен для UpdateQuery, он рассчитывает на DataSet и первым делом ищет у него SelectQuery.

EnableUpdateQueryFilters
о, так этож другой коленкор...
спасибо.
где же можно описание всех функций взять?

Я просто поискала в scr_DB по ключевому слову UpdateQuery. Можно и самому после создания экземпляра UpdateQuery под отладчиком посмотреть, там скорее всего свойство Filters (ну или оно на пару уровней глубже, но существует),а у него по имени найти нужный item и просто сделать ему Enable = true;

хм... делаю вот так:

var ReserveNumberIDs = new Array(); 
ReserveNumberIDs.push(dlNumbers.Dataset.Values('IDpw'));
var StatusID = '{878A4783-39F9-41A5-B83E-00475A76E4C0}';
var UpdateIDs = Services.GetNewItemByUSI('uq_AllRemovalFromReserve');
var FilterCodesArray = new Array('IDs');
EnableUpdateQueryFilters(UpdateIDs, 'IDs', ReserveNumberIDs, true);
UpdateIDs.Parameters.ItemsByName('StatusID').ValAsGUID = StatusID;  
UpdateIDs.Execute();

в профайлере получаю вот такой запрос:

exec sp_executesql N'UPDATE [tbl_PhoneInWorking]
	SET [StatusID] = @P1,
	[ModifiedOn] = getdate(),
	[ModifiedByID] = ''{A653FD19-379F-484B-8519-A1AD4CF4D6BF}''
WHERE
	([tbl_PhoneInWorking].[ID] IN ())', N'@P1 varchar(38)', '{878A4783-39F9-41A5-B83E-00475A76E4C0}'

include фильтру значения не присваиваются... почему?

строку:

EnableUpdateQueryFilters(UpdateIDs, 'IDs', ReserveNumberIDs, true);

исправил на:

EnableUpdateQueryFilters(UpdateIDs, FilterCodesArray, ReserveNumberIDs, true);

не помогло...

рассмотрел функцию EnableUpdateQueryFilters, я неправильно передавал параметры... теперь непонятно, как же передать значения для параметра?

Посмотрите функицю ApplyDatasetIncludeFilter в scr_DB. В ее теле как раз используется что-то вроде ApplySelectQueryIncludeFilter. Посмотрите в тело этой функции там включается фильтр и устанавливается параметр для фильтра, подобного вашему.

"Доленко Юрий" написал:Посмотрите функицю ApplyDatasetIncludeFilter в scr_DB. В ее теле как раз используется что-то вроде ApplySelectQueryIncludeFilter. Посмотрите в тело этой функции там включается фильтр и устанавливается параметр для фильтра, подобного вашему.

там, в качестве параметра, используется Dataset.SelectQuery, которого нет у сервиса UpdateQuery...

Примерно так, я полагаю:

var Filter = UpdateIDs.Filters.ItemsByCode("IDs");
var ValuesExpressions = Filter.ValuesExpressions;
var Parameters = UpdateIDs.Parameters;
DeleteParametersByValueExpressions(Parameters, ValuesExpressions);
ValuesExpressions.Clear();
for (var j = 0; j < ReserveNumberIDs.length; j++) {
    AddValuesExpressionsParameter(ValuesExpressions,
         Parameters, pdtGUID, ReserveNumberIDs[j]);
}

"SSV" написал:там, в качестве параметра, используется Dataset.SelectQuery, которого нет у сервиса UpdateQuery...

да, но Filters у них одного типа, а работа идет именно по этому свойству..

хм...
у меня не нашлась функция AddValuesExpressionsParameter, а DeleteParametersByValueExpressions есть... а может можно ее исходник где-нить взять?

function AddValuesExpressionsParameter(ValuesExpressions, Parameters, DataType, 
	ParamValue)  {
	if (DataType == null) {
		DataType = pdtUnicodeString;
	}	
	var Result = CreateParam(Parameters, GenParamName(Parameters), DataType);
	Result.Value = ParamValue;
	var ParamExpression = ValuesExpressions.CreateParamFilterExpression();
	ValuesExpressions.Add(ParamExpression);
	ParamExpression.Code = Connector.GenGUID();
	ParamExpression.Parameter = Result;
	return Result;
}

вы наверное будете смеяться, но функции CreateParam у меня тоже нет... может из-за версии? к меня 3.0.244...

А ну тогда не удивительно :) я-то смотрю в 3.3.2

function CreateParam(Parameters, ParamName, ParamDataType) {
	var Parameter = Parameters.CreateItem();
	Parameter.Name = ParamName;
	Parameter.DataType = ParamDataType;
	Parameters.Add(Parameter);
	return Parameter;
}

Главное, чтобы получилось, я вырезала куски из ApplyDatasetIncludeFilter и вглубь, могла что-то упустить.

большооооое СПАСИБО... CreateParam нашел здесь, всё получилось.

Всегда пожалуйста :)

Показать все комментарии