29.08.2006, 11:21 | #1 |
Участник
|
Проблема с количеством в QueryBuildRange.Value()
Доброго времени суток! Подскажите пож-та в такой ситуации:
У меня на методе active() одного датасорса происходит вызов QueryBuildRange.Value(x1, x2,.., xn) для фильтрации другого датасорса. И если в метод value() передается много знач. (для 3х все работает норм.) то после нескольких срабатываний active() Аксапта вылетает... Помогите выбраться из сложившейся ситуации |
|
29.08.2006, 11:33 | #2 |
NavAx
|
а как она "вылетает" ? Может выдается ошибка SQL-инструкции?
|
|
29.08.2006, 11:37 | #3 |
Участник
|
Microsoft Business Solutions-Axapta - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.
Просит отправить отчет в Microsoft и т.д... |
|
29.08.2006, 12:01 | #4 |
Участник
|
Возможно нужно каждый раз делать qbds.clearRanges?
|
|
29.08.2006, 12:03 | #5 |
NavAx
|
Опишите что за источники, по какому полю идет фильтрация, что за переменные x1, x2,.., xn
|
|
29.08.2006, 12:11 | #6 |
Участник
|
И за одно скажите, много - это сколько?
__________________
Безвыходным мы называем положение, выход из которого нам не нравится. |
|
29.08.2006, 12:15 | #7 |
Участник
|
Источники простые - табл. шапка и табл. строки, переменные - это просто значения itemId по которому связаны таблицы.
Смысл такой: когда я передвигаюсь по строкам шапки фильтруется табл. строк, но только теми значениями которыми я передаю в QueryBuildRange.Value()... Например для одной записи табл. шапки это будет QueryBuildRange.Value(1, 2, 3) а для другой QueryBuildRange.Value(5, 6, 7, 8). Кстати Аксапта вылетает не только когда несколько раз вызовется active(), достаточно просто закрыть эту форму Может другой способ есть как это реализовать? |
|
29.08.2006, 12:46 | #8 |
Участник
|
1. Попробуйте таки перед присвоением новых значений делать
QBDS.clearRange(fieldNum(YourTable, ItemId)); 2. Вы так числа и передаете? или это вы описались? Добавьте еще queryValue вызов То есть QBR.value(queryValue("'Н1', 'Н2', 'Н3'")); 3. Показывайте код метода active(); (а почему бы не делать это на executeQuery подчиненного датасорса?) |
|
29.08.2006, 12:48 | #9 |
Участник
|
А QueryBuildRange вы где и как получаете?
__________________
Axapta v.3.0 sp5 kr2 |
|
29.08.2006, 13:04 | #10 |
Участник
|
Подчиненный датасорс:
PHP код:
PHP код:
Вот и все что есть. |
|
29.08.2006, 13:13 | #11 |
Участник
|
У вас датасоурсы связаны друг с другом?
И еще. Почему метод Active() не возвращает значения и нет вызова super() или это вы сокращенно опубликовали?
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 29.08.2006 в 13:21. |
|
29.08.2006, 13:21 | #12 |
Участник
|
Цитата:
Сообщение от AndyD
У вас датасоурсы связаны друг с другом?
Последний раз редактировалось laxer; 29.08.2006 в 13:23. |
|
30.08.2006, 08:07 | #13 |
Участник
|
Может в строке, полученной в selectItemd() - слишком много значений? 472 - максимальное количество
|
|
30.08.2006, 10:17 | #14 |
Участник
|
откуда такие сведения про 472?
То что строка ограничена понятно, но думаю что по длине, а не по количеству значений. Поправьте если неправ |
|
30.08.2006, 10:54 | #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). |
30.08.2006, 11:03 | #16 |
Участник
|
у меня работает и при MaxLength(1000)
10000 уже не потянул. и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа a+= '00000'+int2str(i) + ','; то вылетало бы уже меньше чем при 474 Может и нет, конечно |
|
30.08.2006, 11:05 | #17 |
Axapta
|
Цитата:
Сообщение от kashperuk
у меня работает и при MaxLength(1000)
10000 уже не потянул. Цитата:
Сообщение от kashperuk
и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа
a+= '00000'+int2str(i) + ','; то вылетало бы уже меньше чем при 474 Может и нет, конечно Я же написал: "При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... " Последний раз редактировалось oip; 30.08.2006 в 11:10. |
|
30.08.2006, 11:10 | #18 |
Участник
|
Ага. я тоже проверил только что.
Аксапта: 3.0 SP3 трехзвенка, Oracle 10g 2000 слагаемых уже тоже не тянет. |
|
|
За это сообщение автора поблагодарили: oip (1). |
30.08.2006, 11:11 | #19 |
Участник
|
474 это не длина ренджа, а количество элементов в нем
|
|
30.08.2006, 11:13 | #20 |
Axapta
|
Цитата:
Сообщение от kashperuk
Ага. я тоже проверил только что.
Аксапта: 3.0 SP3 трехзвенка, Oracle 10g 2000 слагаемых уже тоже не тянет. Проверил у себя на сп3 - тоже 474. Оракла нет, поэтому проверить не могу. Цитата:
Сообщение от ntr
474 это не длина ренджа, а количество элементов в нем
"При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... " Последний раз редактировалось oip; 30.08.2006 в 11:15. |
|