![]() |
#1 |
Участник
|
Проблема с количеством в QueryBuildRange.Value()
Доброго времени суток! Подскажите пож-та в такой ситуации:
У меня на методе active() одного датасорса происходит вызов QueryBuildRange.Value(x1, x2,.., xn) для фильтрации другого датасорса. И если в метод value() передается много знач. (для 3х все работает норм.) то после нескольких срабатываний active() Аксапта вылетает... Помогите выбраться из сложившейся ситуации ![]() |
|
![]() |
#2 |
NavAx
|
а как она "вылетает" ? Может выдается ошибка SQL-инструкции?
|
|
![]() |
#3 |
Участник
|
Microsoft Business Solutions-Axapta - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.
Просит отправить отчет в Microsoft и т.д... |
|
![]() |
#4 |
Участник
|
Возможно нужно каждый раз делать qbds.clearRanges?
|
|
![]() |
#5 |
NavAx
|
Опишите что за источники, по какому полю идет фильтрация, что за переменные x1, x2,.., xn
|
|
![]() |
#6 |
Участник
|
И за одно скажите, много - это сколько?
__________________
Безвыходным мы называем положение, выход из которого нам не нравится. |
|
![]() |
#7 |
Участник
|
Источники простые - табл. шапка и табл. строки, переменные - это просто значения itemId по которому связаны таблицы.
Смысл такой: когда я передвигаюсь по строкам шапки фильтруется табл. строк, но только теми значениями которыми я передаю в QueryBuildRange.Value()... Например для одной записи табл. шапки это будет QueryBuildRange.Value(1, 2, 3) а для другой QueryBuildRange.Value(5, 6, 7, 8). Кстати Аксапта вылетает не только когда несколько раз вызовется active(), достаточно просто закрыть эту форму ![]() Может другой способ есть как это реализовать? |
|
![]() |
#8 |
Участник
|
1. Попробуйте таки перед присвоением новых значений делать
QBDS.clearRange(fieldNum(YourTable, ItemId)); 2. Вы так числа и передаете? или это вы описались? Добавьте еще queryValue вызов То есть QBR.value(queryValue("'Н1', 'Н2', 'Н3'")); 3. Показывайте код метода active(); (а почему бы не делать это на executeQuery подчиненного датасорса?) |
|
![]() |
#9 |
Участник
|
А QueryBuildRange вы где и как получаете?
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#10 |
Участник
|
Подчиненный датасорс:
PHP код:
PHP код:
Вот и все что есть. |
|
![]() |
#11 |
Участник
|
У вас датасоурсы связаны друг с другом?
И еще. Почему метод Active() не возвращает значения и нет вызова super() или это вы сокращенно опубликовали?
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 29.08.2006 в 13:21. |
|
![]() |
#12 |
Участник
|
Цитата:
Сообщение от AndyD
У вас датасоурсы связаны друг с другом?
Последний раз редактировалось laxer; 29.08.2006 в 13:23. |
|
![]() |
#13 |
Участник
|
Может в строке, полученной в selectItemd() - слишком много значений? 472 - максимальное количество
|
|
![]() |
#14 |
Участник
|
откуда такие сведения про 472?
То что строка ограничена понятно, но думаю что по длине, а не по количеству значений. Поправьте если неправ |
|
![]() |
#15 |
Axapta
|
Хм... Ради интереса проверил...
Вот это - вылетает. А если поменять 475 на 474 - работает. При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... ![]() X++: static void Job666(Args _args) { query q; QueryBuildDataSource qbds; QueryBuildRange qbr; QueryRun qr; LedgerJournalTable l; str a; int i; #define.MaxLength(475) ; for (i=1;i<#MaxLength;i++) { a+=int2str(i)+','; } a+=int2str(#MaxLength); q =new Query(); qbds = q.addDataSource(tablenum(LedgerJournalTable)); qbr = qbds.addRange(fieldNum(LedgerJournalTable, journalNum)); qbr.value(a); qr = new queryRun(q); while (qr.next()) { l = qr.getNo(1); print l.JournalNum; } } Последний раз редактировалось oip; 30.08.2006 в 15:51. |
|
|
За это сообщение автора поблагодарили: slava (1). |
![]() |
#16 |
Участник
|
у меня работает и при MaxLength(1000)
10000 уже не потянул. и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа a+= '00000'+int2str(i) + ','; то вылетало бы уже меньше чем при 474 Может и нет, конечно |
|
![]() |
#17 |
Axapta
|
Цитата:
Сообщение от kashperuk
у меня работает и при MaxLength(1000)
10000 уже не потянул. Цитата:
Сообщение от kashperuk
и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа
a+= '00000'+int2str(i) + ','; то вылетало бы уже меньше чем при 474 Может и нет, конечно Я же написал: "При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... " Последний раз редактировалось oip; 30.08.2006 в 11:10. |
|
![]() |
#18 |
Участник
|
Ага. я тоже проверил только что.
Аксапта: 3.0 SP3 трехзвенка, Oracle 10g 2000 слагаемых уже тоже не тянет. |
|
|
За это сообщение автора поблагодарили: oip (1). |
![]() |
#19 |
Участник
|
474 это не длина ренджа, а количество элементов в нем
|
|
![]() |
#20 |
Axapta
|
Цитата:
Сообщение от kashperuk
Ага. я тоже проверил только что.
Аксапта: 3.0 SP3 трехзвенка, Oracle 10g 2000 слагаемых уже тоже не тянет. Проверил у себя на сп3 - тоже 474. Оракла нет, поэтому проверить не могу. ![]() Цитата:
Сообщение от ntr
474 это не длина ренджа, а количество элементов в нем
![]() "При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... " Последний раз редактировалось oip; 30.08.2006 в 11:15. |
|