12.04.2015, 22:27 | #1 |
Участник
|
Полученное значение через QueryBuildDataSource
Как определить, вернулось ли что-нибудь с помощью QueryBuildDataSource?
|
|
12.04.2015, 23:02 | #2 |
Участник
|
Нужно создать queryRun для всей query (к которой добавлен queryBuildDataSource), и вызвать на нем next() - это вернет true, если квери вернула что-нибудь.
|
|
12.04.2015, 23:07 | #3 |
Участник
|
Возвращает true в любом случае.
Могу предоставить код если необходимо. |
|
12.04.2015, 23:11 | #4 |
Участник
|
Не утруждайтесь - это только начинающие программисты смотрят в исходный код, а настоящие гуру умеют всю нужную информацию видеть в хрустальном шаре.
PS. См. также Как правильно задать вопрос, чтобы быть услышанным Последний раз редактировалось gl00mie; 12.04.2015 в 23:14. Причина: PS |
|
12.04.2015, 23:14 | #5 |
Участник
|
X++: Query query = new Query(); QueryRun queryRun; QueryBuildDataSource qbds; ; qbds = query.addDataSource(tableNum(RContractTable)); qbds.addRange(fieldNum(RContractTable, RContractAccount)).value(PayRequestTable.RContractAccount); queryRun = new QueryRun(query); if (queryRun.next()) { info("true"); } else if (!queryRun.next()) { info("false"); } |
|
12.04.2015, 23:22 | #6 |
Участник
|
Всегда используйте queryValue() (он же SysQuery::value()) для "обработки" значений, подставляемых в QueryBuildRange, в данном случае для PayRequestTable.RContractAccount. Вероятно, соотв. значение в вашем случае - пустое, поэтому выборка из таблицы договоров фактически идет без фильтрации по рег.номеру - см. также, какое значение возвращает SysQueryValue::unlimited().
|
|
|
За это сообщение автора поблагодарили: bitter (1). |
12.04.2015, 23:49 | #7 |
Участник
|
Цитата:
X++: if (queryRun.next()) { info("true"); } else { info("false"); } |
|
|
За это сообщение автора поблагодарили: bitter (1). |
13.04.2015, 00:08 | #8 |
Участник
|
Цитата:
Сообщение от gl00mie
Всегда используйте queryValue() (он же SysQuery::value()) для "обработки" значений, подставляемых в QueryBuildRange, в данном случае для PayRequestTable.RContractAccount. Вероятно, соотв. значение в вашем случае - пустое, поэтому выборка из таблицы договоров фактически идет без фильтрации по рег.номеру - см. также, какое значение возвращает SysQueryValue::unlimited().
Цитата:
Я понял почему всегда возвращает true. Я сравниваю полученное значение со значением в таблице, которое априори там присутствует. Соответственно вопрос был задан некорректно, прошу прощения. Попытаюсь расписать алгоритм, который мне необходимо реализовать. На форме есть лукап, с помощью которого я выбираю значение из таблицы, по этому значению мне необходимо найти строку в другой таблице и выяснить заполнено ли определенное поле в данной строке. От того, заполнено ли это поле, будут зависеть мои дальнейшие действия. Я не совсем понимаю как мне выяснить заполнено ли поле найденной строки. Необходимо добавить еще один рейндж с этим полем в QueryBuildDataSource? |
|
13.04.2015, 03:14 | #9 |
Участник
|
Для строкового поля:
X++: qbds.addRange(fieldNum(, )).value(SysQuery::valueNotEmptyString()); X++: qbds.addRange(fieldNum(, )).value(SysQuery::valueNot(0)); Можно сделать через select X++: /* Выбираем первую попавшуюся запись с искомым RContractAccount и заполненым полем ContractDate */ select firstOnly RecId from rcontractTable where rcontractTable.RContractAccount == payRequestTable.RContractAccount && rcontractTable.ContractDate; /* Ваше поле */ if (rcontractTable) { info("запись существует"); } |
|
|
За это сообщение автора поблагодарили: bitter (1). |
13.04.2015, 07:51 | #10 |
Участник
|
Цитата:
Если "таких" строк в принципе не может быть больше одной (выборка происходит по уникальному ключу), то возможно логичнее сначала прочитать значение этой записи (каким бы оно ни было пустым или заполненным) - проверить что сама запись в таблице есть, а уже вторым шагом проверить заполненность поля в выбранной записи. X++: if (queryRun.next()) { RContractTable = queryRun.get(tableNum(RContractTable)); // получаем выбранную запись if (RContractTable.ContractDate) { info("Поле заполнено"); } else { info("Поле не заполнено"); } } else { info("Запись не найдена"); } Последний раз редактировалось S.Kuskov; 13.04.2015 в 07:54. |
|
|
За это сообщение автора поблагодарили: bitter (1). |
13.04.2015, 10:22 | #11 |
Участник
|
|
|