powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Автовычисление значения поля
25 сообщений из 28, страница 1 из 2
Автовычисление значения поля
    #33114904
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос ньюба (или новичка, как хотите) :)
Имеется ли в VFP такая возможность, как задание автоматического вычисления значения поля из, скажем, двух других? То бишь, к примеру: поле "Сумма" вычислялось автоматическим произведением полей "Кол-во" и "Цена".
Я имею ввиду - задание такого условия в свойствах самой таблицы, а не ручное присвоение значения полю.

And Justice For All!
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33114984
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри в хелпе DEFAUL поля

Код: plaintext
1.
2.
CREATE CURSOR test (id i , id1 i , sID i DEFAULT ID + ID1)

INSERT INTO test (id, id1) VALUES ( 1 , 2 )
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115074
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При создании таблицы я указываю в DEFAULT VALUE поля произведение двух других полей. Но ведь от этого в него не вносится данное произведение...

And Justice For All!
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115118
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы попробуйте выполнить приведенный фрагмент кода и посмотрите на значение в третьем поле.

Либо приведите свой код где это не выполняется.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115134
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мы наверное не поняли друг друга... Я имел ввиду именно автоматическое вычисление значения поля внутри таблицы, без всякого употребления кода. И меня интересует, есть ли в VFP такая возможность?

And Justice For All!
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115144
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexander Warlord

А вы читали ответы на www.foxclub.ru?

2 PaulWist

А как на счет

Код: plaintext
update test set id =  10 

?

sId останется нетронутым.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115172
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть, покопаться на тамошнем форуме? Попробую поискать.

And Justice For All!
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115209
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexander Warlord

Я подумал, что он это ты :) Смотри

http://forum.foxclub.ru/read.php?f=29&i=9669&t=9669
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115245
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) ну у нас даже ники разные. К тому же, Warlord - мой всегдашний ник на всех форумах. Правда, иногда с некоторыми изменениями, как здесь ))

А за ссылку спасибо.

And Justice For All!
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115255
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков

2 PaulWist

А как на счет

Код: plaintext
update test set id =  10 

?

sId останется нетронутым.

Ну что можно сказать,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE CURSOR test (id i , id1 i , sID i DEFAULT ID + ID1, check UTRg())

INSERT INTO test (id, id1) VALUES ( 1 , 2 )

UPDATE test SET id =  2 

FUNCTION UTRg
	replace sID with id + id1
RETURN .t.
ENDFUNC 
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115268
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PaulWist

DEFAULT тогда ни к чему - в любом случае валидация будет происходить при любом изменении любого поля и в том числе при добавлении.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115285
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alexander Warlord

автор:) ну у нас даже ники разные. К тому же, Warlord - мой всегдашний ник на всех форумах. Правда, иногда с некоторыми изменениями, как здесь ))

Я на ники вообще не смотрю - увидел, что вопросы одинаковые, вот и подумал, что ты это он :)
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115290
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Позвольте ещё один вопрос "чайника" )) дабы не открывать новую тему из-за пустяка:

что есть следующая конструкция: буква m. ... ?
К примеру: CREATE TABLE ( m.lcName )

Просто очень часто видел, что такое используют практически все. Самому же никогда использовать не приходилось. Может, есть где почитать, что, как и для чего?
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115302
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m. - указание фоксу, что следующий за ним идентификатор следует трактовать как переменную, а не как поле текущей рабочей области:

Код: plaintext
1.
2.
3.
4.
create cursor dummy (value i)
insert into dummy values ( 10 )
value =  100 
? value  && выведет  10 
? m.value && выведет  100 
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115305
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков2 PaulWist

DEFAULT тогда ни к чему - в любом случае валидация будет происходить при любом изменении любого поля и в том числе при добавлении.

Во первых, CHECK приписал к исходному коду, во вторых - одно другому не мешает, а наоборот дополняет на случай ALTER TABLE (DROP DEFAULT&DROP CHECK ) и отключения либо одного либо другого. Хотя, вопрос риторический.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115334
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий Широковm. - указание фоксу, что следующий за ним идентификатор следует трактовать как переменную, а не как поле текущей рабочей области
Так это используется только для таблиц? Или есть вообще какой-то принцип использования данной конструкции?
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115358
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используется тогда, когда велика вероятность натолкнутся на конфликт с именем поля и библиотечном коде, когда нельзя сделать никаких предпосылок о возможном конфликте.

Посему, рекомендую использовать m. всегда с переменными памяти - там где это возможно.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115365
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не посчитайте назойливым )) но есть ли где-нибудь почитать об этом? В родном хелпе такого вроде нет.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115459
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. в указателе Controlling Access to Variables, в частности:

Accessing Variables
If a variable has the same name as a field, Visual FoxPro always gives precedence to the field name. You can reference the variable using m. or m-> plus the variable name, as in the following examples.

Код: plaintext
1.
2.
?  m.cFname      
?  m->cFname      && print value in cFname
?  cFname         && prints contents of field cFname
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115464
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander WarlordНе посчитайте назойливым )) но есть ли где-нибудь почитать об этом? В родном хелпе такого вроде нет.

Что означает префикс (буква) "m." перед именем
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115470
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо! и удачи.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115503
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistСмотри в хелпе DEFAUL поля

Код: plaintext
1.
2.
CREATE CURSOR test (id i , id1 i , sID i DEFAULT ID + ID1)

INSERT INTO test (id, id1) VALUES ( 1 , 2 )

Крайне некорректное решение!

Значения DEFAULT вычисляются в порядке физического следования полей таблицы. В данном случае, slID физически следует за полями ID и ID1. Т.е. к моменту вычисления DEFAULT поля slID поля, необходимые для расчета будут уже заполнены. Но на каком основании делаются подобные допущения? Я бы не рискнул делать подобные предположения.

Крайне неразумно в выражении DEFAULT опираться на какие-либо значения других полей. Нет никакой гарантии, что они будут заполнены на момент вычисления DEFAULT.

Кроме того, уже указали, что DEFAULT вычисляется один раз при создании новой записи, если значения не были указаны явно! А надо вычислять в любой момент при модификации.

Т.е. надо это прописать в RULE уровня записи.

Друг-другу не мешают? После вычисления DEFAULT обязательно будет выполнено RULE. Т.е., как минимум, один и тот же расчет выполняется дважды. Как максимум, DEFAULT может противоречить RULE (не в данном случае, но тем не менее...)
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33115558
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ

Вернусь к словам автора

авторИмеется ли в VFP такая возможность, как задание автоматического вычисления значения поля из, скажем, двух других? То бишь, к примеру: поле "Сумма" вычислялось автоматическим произведением полей "Кол-во" и "Цена".
Я имею ввиду - задание такого условия в свойствах самой таблицы, а не ручное присвоение значения полю.

при первом прочтении, сам собой напрашивался ответ про DEFAULT (во всяком случае у меня), и только потом было пояснено, что же надо.

Под твоими словами в последнем посте тоже подписываюсь.
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33116743
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ВладимирМ!

> Т.е. надо это прописать в RULE уровня записи.

Угу, хотя в ОБЩЕМ случае хранить в таблице поле которое ВСЕГДА есть
результат вычисления некоторой функции - это есть неправильно. Вот если это
НЕ результат функции, а просто "авто-корректировка для помещения значения в
нужный диапазон" тогда совсем другое дело. Ну т.е. если надо проверить что
поле3 "между" поле1 и поле2, и если оно ВНЕ диапазона, то сменить на
ближайшее допустимое значение (т.е. на верхнюю или нижнюю границу)...
В принципе можно и на Rule уровня поля повесить (на ОБА поля конечно), но
тогда надо предотвратить рекурсивное срабатывание правил - скажем через
анализ наличия, и создание Private переменной...

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Автовычисление значения поля
    #33149857
Alexander Warlord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, что поднимаю этот вопрос снова...
Пробовал и так, и эдак. Может кто-нибудь сможет и не поленится объяснить всё по шагам.
Повторюсь, требуется всего-то автоматически задать в таблице занесение значения от суммирования (или произведения) двух полей в третье при: 1. занесении новых записей; 2. при редактировании старых.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Автовычисление значения поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]