0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 7
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Настройка Lookup04.08.2022, 12:01. Показов 1047. Ответов 13
Здравствуйте! Вопрос вроде детский, но, то ли старость, то ли звезды криво стоят, но, не могу сообразить.
Есть master таблица, компонент tSrc:
Предположение такое: единицы измерений пустые, потому что на момент вычисления lookup поля, подчиненная таблица выбрана для другой строки. Решить можно было бы, отобрав нужные единицы для всех товаров, но тогда при редактировании, они ВСЕ будут вываливаться в выпадающем списке, что не правильно. А иначе, редактирование правильное, но lookup пустые. Эх, по моему, сумбурно объяснил, но, как смог. Помогите!
0
|
04.08.2022, 12:01 | |
Ответы с готовыми решениями:
13
Lookup 2 зависимых lookup Lookup field Фильтрация + LookUp |
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,375
|
|
04.08.2022, 12:59 | 3 |
Смущает меня вид вашего грида, а точнее первая колонка с нумерацией. Это явно нестандартное решение, возможно копать надо там где это рисуется. Значение ID у вас довольно длинное и вполне может просто не влезать в поле и это тоже может как-то неожиданно повлиять. Часто бывает, что в дизайнере создают колонки грида и забывают об этом меняя структуру датасета, что приводит к разным сюрпризам при отображении.
0
|
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 7
|
||||||
04.08.2022, 15:43 [ТС] | 4 | |||||
Это обычное calculated поле, в DataSet.OnCalculated
В данном случае, все колонки и в датасете и в гриде создаются динамически при выполнении, а не через инспектор при проектировании Добавлено через 11 минут Даже не знаю, что сказать. Попробую так: база Firebird 3.0.7 компоненты модифицированные IBX среда Lazarus 2.2
0
|
Модератор
3629 / 2150 / 759
Регистрация: 15.11.2015
Сообщений: 8,631
|
|
04.08.2022, 16:06 | 5 |
lordgray, так у вас Lazarus или Delphi?
0
|
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 7
|
|
05.08.2022, 09:31 [ТС] | 6 |
Изначально Lazarus. Заподозрил, вдруг дело в нем, или в модифицированных под две транзакции, IBX. Накидал тестовый проект на Delphi XE5. Все компоненты родные! Результат тот же.
Прилагаю скриншот, и тестовый проект на Delphi XE5 с базой Firebird 3.0.7
0
|
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 7
|
||||||
05.08.2022, 10:33 [ТС] | 7 | |||||
Есть сдвиг: если в
0
|
05.08.2022, 16:35 | 8 |
ну я вас умоляю
если бы фреймворку был год, можно говорить, что малоличо если фреймворку 20 лет, то косяк в IBX - это ну уж точно нонсенс ясно что проблема на стороне программиста и ессно - это так т.к. 100 лет отказался от IBX в пользу FIBPlus, мне пришлось воспроизвести ваш пример на FIBPlus собсно сразу - Query не заменит датасет, поэтому пусть tEdIzm тоже будет Dataset а второе - у вас собрана схема мастер-деталь на Datasource и EdIzm подключено к dsSrc, т.е. должно содержать только те значения, которые СВЯЗАНЫ с текущей записью tSrc ЭТОТ ЖЕ датасет - источник значений для Lookup поля в том же tSrc круг замкнулся хорошо, что не в бесконечность а в ноль. мораль для всего, чем собираетесь пользоваться, понадобится ОТДЕЛЬНЫЙ датасет мораль 2 оставили бы вы стюардессу в покое - не откапывая этот подход к построению программ был актуален в 2000 и несет с собой многовато боли не зря от него потихоньку отказались (( гриды, мастер-деталь, и все такое - в конце концов все равно все "автоматическое" будете переписывать на "ручное" лучше делать это прямо сейчас ну и если все-таки будете делать Клиент-сервер, рекомендую библиотеку доступа либо современный FireDAC либо FIBPlus, который с тех пор не стал хуже, только осиротел и сейчас его можно свежий забрать на GitHub В одном из проектов я его до сих пор вполне успешно использую, параллельно мигрируя на WEB API к той же базе
0
|
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 7
|
|
08.08.2022, 09:18 [ТС] | 9 |
Так, что то я не понял. tEdIzm и есть отдельный датасет, он исключительно для lookup поля. Судя по всему, Вы увидели ошибку, но я так и не понял, в чем она
0
|
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 7
|
|
08.08.2022, 09:25 [ТС] | 11 |
Я правильно понял, Вы намекаете, что, tEdIzm выбрав значения для текущей записи, теряет значения для остальных, по этому там и пусто? Если да, то я думал об этом. Но ведь DBGridу, для прорисовки строк, нужно пройтись по ним, соответственно, на момент прорисовки строки, она будет текущей, и tEdIzm будет содержать нужные значения. В чем я ошибаюсь? Какя разница, что он потеряет значения для других строк, они же уже выведены.
0
|
08.08.2022, 09:31 | 12 |
Сообщение было отмечено lordgray как решение
Решение
поставьте точку останова в OnAfterScroll а потом в OnCalFields для tSrc
посмотрите, в каком порядке вызываются эти обработчики в первом - датасет edIzm фильтруется, во втором - в нем ищутся через Locate нужные значения как вы найдете там другие значения, если только что отфильтровали его, чтобы он содержал только одно ???
1
|
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 7
|
|
08.08.2022, 09:41 [ТС] | 13 |
Я в шоке. Сначала OnCalc, потом AfterScroll. Н-да. Придется менять идеологию. А ведь так все хорошо казалось. Смущал только один нюанс: если документ в 10000 строк (ревизия,ввод остатков, переоценка), то будет и 10000 запросов, что нормально отработает только при локальном соединении. Ладно, буду думать. Точнее, идея уже есть.
Спасибо, помогли!
0
|
08.08.2022, 09:58 | 14 |
нет
для лукап поля все вычитывается разом и потом гоняет Locate вот для master-detail переоткрытие идет на каждое перемещение по master - таблице Добавлено через 51 секунду но делать мастер-деталь для 10000 строк это безумие. кому это смотреть??
0
|
08.08.2022, 09:58 | |
08.08.2022, 09:58 | |
Помогаю со студенческими работами здесь
14
Поиск в LookUp Lookup-поля Lookup поля Lookup поля Lookup fields LookUp в Query Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |