Проблема с динамической загрузкой данных в раскрывающемся списке в InfoPath 2007?
У меня есть раскрывающийся список в форме InfoPath, и я загружаю некоторые другие поля, основанные на выборе раскрывающегося списка. так что я написал следующий код для "измененного" события выпадающего списка.
public void ProjectName_Changed(object sender, XmlEventArgs e)
{
string projectId = e.NewValue;
dataQueryConnection = (AdoQueryConnection)this.DataConnections["ProjectInformation"];
dataQueryConnection.Command = dataQueryConnection.Command + string.Format(" WHERE ProjectId = '{0}'", projectId);
dataQueryConnection.Execute();
}
В первый раз, когда я изменяю элемент в раскрывающемся списке, он работает нормально, но при последующих изменениях элементов (второй раз и т. Д.) Выдается следующая ошибка:
Запрос не может быть выполнен для следующего объекта DataObject: ProjectInformation InfoPath не может выполнить указанный запрос. [0x80040E14][Поставщик Microsoft OLE DB для SQL Server] Неверный синтаксис рядом с ключевым словом "ГДЕ".
И это причина, во второй раз,
dataQueryConnection.Command = выберите "EmployeeID","Accountname","ProjectName","ProjectId","ProjectRole","BillableUtilization","ClientName","BillingCode","BUHead" из "TRF"."hrt_vw_ProjectInformation" в качестве " hrt_vw_ProjectInformation "ГДЕ ProjectId = '3072507' ГДЕ ProjectId = '3076478'
последующее срабатывание события, связывающее предложение WHERE каждый раз с предыдущим выполненным запросом.
Как я могу прийти из этого вопроса?
1 ответ
Сохраните исходную командную строку в глобальной переменной в вашем коде (в событии загрузки). Затем в вашей измененной функции добавьте глобальную переменную вместо предыдущего значения команды.
string OrigString
public void FormEvents_Loading(object sender, LoadingEventArgs e)
{
OrigString = dataQueryConnection.Command;
}
public void ProjectName_Changed(object sender, XmlEventArgs e)
{
string projectId = e.NewValue;
dataQueryConnection = (AdoQueryConnection)this.DataConnections["ProjectInformation"];
dataQueryConnection.Command = OrigString + string.Format(" WHERE ProjectId = '{0}'", projectId);
dataQueryConnection.Execute();
}