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

And Justice For All!
...
Рейтинг: 0 / 0
14.06.2005, 10:23:24
    #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
14.06.2005, 10:48:58
    #33115074
Alexander Warlord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автовычисление значения поля
При создании таблицы я указываю в DEFAULT VALUE поля произведение двух других полей. Но ведь от этого в него не вносится данное произведение...

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

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

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

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

2 PaulWist

А как на счет

Код: plaintext
update test set id =  10 

?

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

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

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

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

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

And Justice For All!
...
Рейтинг: 0 / 0
14.06.2005, 11:48:09
    #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
14.06.2005, 11:51:40
    #33115268
Анатолий Широков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автовычисление значения поля
2 PaulWist

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

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

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

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

Просто очень часто видел, что такое используют практически все. Самому же никогда использовать не приходилось. Может, есть где почитать, что, как и для чего?
...
Рейтинг: 0 / 0
14.06.2005, 12:00:58
    #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
14.06.2005, 12:01:36
    #33115305
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автовычисление значения поля
Анатолий Широков2 PaulWist

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

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

Посему, рекомендую использовать m. всегда с переменными памяти - там где это возможно.
...
Рейтинг: 0 / 0
14.06.2005, 12:21:29
    #33115365
Alexander Warlord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автовычисление значения поля
Не посчитайте назойливым )) но есть ли где-нибудь почитать об этом? В родном хелпе такого вроде нет.
...
Рейтинг: 0 / 0
14.06.2005, 12:44:05
    #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
14.06.2005, 12:45:20
    #33115464
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автовычисление значения поля
Alexander WarlordНе посчитайте назойливым )) но есть ли где-нибудь почитать об этом? В родном хелпе такого вроде нет.

Что означает префикс (буква) "m." перед именем
...
Рейтинг: 0 / 0
14.06.2005, 12:46:49
    #33115470
Alexander Warlord
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автовычисление значения поля
Всем огромное спасибо! и удачи.
...
Рейтинг: 0 / 0
14.06.2005, 12:54:18
    #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
14.06.2005, 13:23:22
    #33115558
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автовычисление значения поля
ВладимирМ

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

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

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

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

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

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

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


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