:: Visual Foxpro, Foxpro for DOS
Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Есть форма (forma2), для редактирование и добавления записей, в методе Load хочу прописать такой код

Вот код в методе Load (это просто пример)
SELECT table1
=CURSORSETPROP("Buffering", 2, "table1")
IF T_edit=.F. &&Добавление записи иначе редактирование (передается из вызывающей формы)
T_forma_menu_ok=.F. &&Переменная которую возвращает forma_menu
DO FORM forma_menu &&Форма выбора некоторого значения из меню, из-за чего формируется переменная T_key
IF T_forma_menu_ok=.F.
INSERT INTO table1 (key) VALUES (T_key)
ELSE
&&Если пользователь передумал добавлять запись, как правильно закрыть на этом этапе форму forma2 ?
ENDIF
ELSE
&&Здесь происходит код необходимый для редактирования (с этим проблем нету)
ENDIF

Вопрос: правильно ли я делаю, и как закрыть форму из метода LOAD, то есть прекратить выполнения и запуск формы?
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
Return false
Про load не помню, а в init работает.
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Переменные, упомянутые в Load (T_edit, T_forma_menu_ok), не будут видны в Init и в других методах. Надо создавать свойства формы и в них хранить эти детали работы формы.
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Странная конструкция. Для решения какой задачи выбран такой способ? Почему все это делается в Load?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
ssa
Странная конструкция. Для решения какой задачи выбран такой способ? Почему все это делается в Load?

Извиняюсь, не весь код написал. Там еще должна быть пара SQL запросов, которые отображаются в Grid на форме.
Вот чтоб не прописывать в ручную колонки Grid я и решил использовать Load (и теперь мучаюсь, тому и решил спросить совета у Гуру)
Раньше этот код выполнялся до вызова формы, но это очень неудобно, так как форма вызывается из разных мест, и при малейшем изменении приходилось исправлять код в разных местах.

А на счет переменных, я в курсе, они создаются перед вызовом формы, форма МОДАЛЬНАЯ



Исправлено 2 раз(а). Последнее : ZenTigra, 16.10.17 10:22
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
PaulWist

Сообщений: 14614
Дата регистрации: 01.04.2004
ZenTigra
Есть форма (forma2), для редактирование и добавления записей, в методе Load хочу прописать такой код

У меня сделано так:

1. В Init формы редактирования передаётся параметр первичного ключа (справочника, документа итп).

2. Если PK is null, то делается вывод, что запись новая и надо провести insert

3. Если PK is not null, то запись (на момент вызова существувовала) и по значению PK заполняется форма редактирования.

4. те для ввода и редактирования используется ОДНА форма.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
еще помнить что то что передаем в форму - получаем в ней только в Init, в Load эти параметры еще не получены .. ну это так, на всяк случай )))

Мне удобно было в Load запросить необходимые мелкие доп.справочники (если нужно), и в нем же добавить курсорадаптер с параметризированным основным запросом (чего отображать будем) и с установленным сво-вом
....
.NoData = .T.
.FetchSize = -1
....

а затем в ините уже получив сии параметры просто делал .CursorRefresh() - и вся недолга )))
грид созданный/раскрашенный в дизайне не разрушается и данные в нем в соотвествии с полученными в инит параматрами



Исправлено 2 раз(а). Последнее : AndyNigmatec, 16.10.17 11:08
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ZenTigra
Вот код в методе Load (это просто пример)
Нет, рано ещё тебе заниматься "писать по новому"... Абсолютно не понимаешь ключевых концепций...
1) НЕ НАДО использовать для передачи информации PUBLIC или PRIVATE переменные. Ни как "входные", ни как "выходные" параметры. А по другому в Load ничего не передать -> всё что связано с общением формы со внешним миром (приём параметров из точки вызова) следует делать в Init, а не в Load.
2) НЕ НАДО работать напрямую с таблицей, даже буферизованой. Тем более не надо задавать ей режим буферизации в коде Load.
3) Ещё раз - НЕ НАДО использовать Private переменную для общения между формами. Хороший шаблон - создать объект с нужными свойствами (в т.ч. тем который отвечает за T_forma_menu_ok - хотя это неинтуитивное, а значит плохое название для переменной/свойства), передать его в дочернюю форму (да, в её init - там запомнить в свойстве этой дочерней формы, и по надобности обращаться к свойствам этого объекта-параметра, в т.ч. менять их). Если дочерняя форма модальная, то после DO FORM в принципе можно из этого объекта взять все те данные которые эта дочерняя форма там наизменяла.
4) Как по мне так интерфейс когда для создания чего либо открывается сначала форма выбора чего-то иного, и лишь затем, после выбора этого чего-то открывается форма создания того что мне надо было - ущербный и неинтуитивный. Переведя на "прикладной" язык - если пользователь решил ввести новый заказ, нажал кнопку "Создать заказ", и вместо формы заказа перед ним появляется, к примеру, форма выбора клиента, потом ещё появляется форма выбора товара, и лишь затем, если в первых двух всё было выбрано "как надо" появляется собственно сама форма ввода заказа - это плохо.
Кстати, такой подход диктует работу со справочниками в виде "полного списка" - т.е. вместо того чтобы в собственно форме ввода заказа ввести первых 3-4 символа названия клиента, и получить в качестве "списка для выбора" весьма небольшое подмножество справочника, мы открываем форму со 100500 записями, и потом бодро занимаемся х*рнёй инкрементными поисками, фильтрациями, листанием грида до стопятидесятой "страницы"... Отвратительный подход.

ZenTigra
Вопрос: правильно ли я делаю
Пока что очень многое - совершенно неправильно.
ZenTigra
как закрыть форму из метода LOAD, то есть прекратить выполнения и запуск формы?
RETURN .F.
Точно так же можно "отменить показ формы" и из init - где, собственно говоря, и должен быть помещён код "взаимодействия с вызывающей формой".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AndyNigmatec
а затем в ините уже получив сии параметры просто делал .CursorRefresh() - и вся недолга )))
Добавлю на всякий случай - есть ещё параметр BindControls который тоже вполне себе позволяет "отложить" создание/открытие курсоров-источников данных до Init или даже ещё позже, не вызывая "разрушений" контролов (прежде всего Grid).
Это неплохо работает и совместно с указанной техникой - создания NoDataOnLoad курсора (хоть адаптером, хоть по старому - представлением) и его последующим перезапросом - когда будут "прояснены" все требуемые для такого перезапроса параметры.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Igor Korolyov
ZenTigra
Вот код в методе Load (это просто пример)
2) НЕ НАДО работать напрямую с таблицей, даже буферизованой. Тем более не надо задавать ей режим буферизации в коде Load.
А Вас не затруднить показать как правильно, хотя бы привести простой примерчик, или ткнуть носом....
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Попробуйте человеческим языком описать что вы хотите сделать.
Может нарисовать картинки.

А далее воспользуйтесь языком VFP.
Попробуйте не писать на VFP, а использовать его.
(Путано сказал?)

Еще совет. Наберите несколько однотипных проблем, и попробуйте их решить одинаково.
Появится некая абстракция данного решения.

Показывать код, просто нет смысла.
Тогда вам придется переключиться на "мышление" автора кода.

Вот Паша описал, типичный подход к редактированию.
Без единой строки кода.

Пока не сможете человечески описать, рано прогаммировать.


------------------
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ZenTigra
А Вас не затруднить показать как правильно, хотя бы привести простой примерчик, или ткнуть носом....
Правильно - через курсорадаптер. И ещё более правильно - НЕ используя dbf в качестве конечного хранилища информации (но тут уж сложно бывает убедить клиента что сами данные гораздо важнее примитивности и мега-дешевизны "решения на dbf-ах". Впрочем, бывает и так что данные имеют минимальную ценность - типа слетело всё к едрене-фене, ну и ладно, новые навводим ).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
ZenTigra
ssa
Странная конструкция. Для решения какой задачи выбран такой способ? Почему все это делается в Load?

Извиняюсь, не весь код написал. Там еще должна быть пара SQL запросов, которые отображаются в Grid на форме.
Вот чтоб не прописывать в ручную колонки Grid я и решил использовать Load (и теперь мучаюсь, тому и решил спросить совета у Гуру)
Раньше этот код выполнялся до вызова формы, но это очень неудобно, так как форма вызывается из разных мест, и при малейшем изменении приходилось исправлять код в разных местах.

А на счет переменных, я в курсе, они создаются перед вызовом формы, форма МОДАЛЬНАЯ

Посмотрите, при большом количестве форм может удобнее такие процедурки-обертки выбора или вызова выносить в отдельный глобальный объект класса CUSTOM, или добавлять этот объект на форму, или собирать процедурки в главном процедурном файле .prg., а формах оставлять только работу с данными.
Тогда они будут доступны отовсюду, и из колонок Grid.
Вообще-то, способов возвращения значений наверное наберется с добрый десяток.
Также возможно, что в коде DO FORM можно заменить на MESSAGEBOX().
Код вызова модальной формы практичнее писать полностью:
LOCAL loName, luRetVal
DO FORM FormName NAME loName LINKED WITH lcParameterList TO luRetVal



Исправлено 1 раз(а). Последнее : lulgu, 16.10.17 21:56
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Igor Korolyov
Ещё раз - НЕ НАДО использовать Private переменную для общения между формами.

И что там есть такого страшного в этих PRIVATE-переменных?
Ratings: 2 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Grin

Сообщений: 1083
Откуда: Kiev
Дата регистрации: 05.12.2000
lulgu
И что там есть такого страшного в этих PRIVATE-переменных?

Например попробуй создать переменную с именем аналогичным имени поля.
И поиграйся как будет себя вести твоя форма.

Если писать аккуратно (использовать нотацию, добавлять "m."), то паблик\приват переменные не будут мешать.
Со временем обрастешь переменными так, что сам будешь путаться какая переменная для каких целей создана.
Рано или поздно наступишь на грабли, когда программа из одноименного поля и переменной будет брать не то чего ты ожидаешь.

Где-то на форуме были очень хорошие статьи Володи Максимова (если не изменяет склероз),
поищи их, потрать пару часов на их разбор, там очень много полезной информации,
обойдешь много "граблей".

Учись на чужом опыте.
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Grin
lulgu
И что там есть такого страшного в этих PRIVATE-переменных?

Например попробуй создать переменную с именем аналогичным имени поля.
И поиграйся как будет себя вести твоя форма.

Если писать аккуратно (использовать нотацию, добавлять "m."), то паблик\приват переменные не будут мешать.
Со временем обрастешь переменными так, что сам будешь путаться какая переменная для каких целей создана.
Рано или поздно наступишь на грабли, когда программа из одноименного поля и переменной будет брать не то чего ты ожидаешь.

Где-то на форуме были очень хорошие статьи Володи Максимова (если не изменяет склероз),
поищи их, потрать пару часов на их разбор, там очень много полезной информации,
обойдешь много "граблей".

Учись на чужом опыте.

Освойте нотацию, упорядочьте имена, не обрастайте - глядишь, и наберетесь своего опыта.
Ratings: 2 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Grin

Сообщений: 1083
Откуда: Kiev
Дата регистрации: 05.12.2000
lulgu
Освойте нотацию, упорядочьте имена, не обрастайте - глядишь, и наберетесь своего опыта.


Дружище, не надо дерзить, у тебя есть рецепт успеха - пользуйся им.
Никто здесь тебя ни к чему не принуждает. Никто тебе ничего не обязан.
Считаешь свой подход более правильным\оптимальным - на здоровье.
У каждого свой путь, тебе показывают всего-лишь другие, возможно более оптимальные направления.
Выбор всегда за тобой.
Ratings: 0 negative/2 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Grin
lulgu
Освойте нотацию, упорядочьте имена, не обрастайте - глядишь, и наберетесь своего опыта.


Дружище, не надо дерзить, у тебя есть рецепт успеха - пользуйся им.
Никто здесь тебя ни к чему не принуждает. Никто тебе ничего не обязан.
Считаешь свой подход более правильным\оптимальным - на здоровье.
У каждого свой путь, тебе показывают всего-лишь другие, возможно более оптимальные направления.
Выбор всегда за тобой.

Ну и лозунги у вас - прям красота!
Бывшего парторга видно сразу.
По делу можете хоть что-то сказать?
Ratings: 2 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Grin

Сообщений: 1083
Откуда: Kiev
Дата регистрации: 05.12.2000
lulgu
Ну и лозунги у вас - прям красота!
Бывшего парторга видно сразу.
По делу можете хоть что-то сказать?


Мил человек, я в садик ходил во времена парторгов.
Нравиться тебе юзать переменные - да на здоровье, этого никто тебе не запрещает.
Не вижу смысла что-либо далее обсуждать.
Каждый кузнец своего пи....ца.
Ratings: 0 negative/0 positive
Re: Переучиваюсь писать по новому или помогите разобраться с CURSORSETPROP и Load
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Grin
Не стоит обращать на роботов внимания)
Лучше вообще не общаться.
Он провоцирует...
Кто то его уже разоблачил (Леонид?). Это "исследователь" реакций)


------------------
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 30 Bront  (Гостей: 29)

© 2000-2024 Fox Club 
Яндекс.Метрика