Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

Calculated field - не удается правильно вычислить   Найти похожие ветки 

 
GEM   (2006-08-15 12:32) [0]

Доброго времени суток!
Есть 2 таблицы FoxPro главная и подчиненная. В главной таблице (Price) есть поля: код лекарства (kod_lek), цена за упаковку (price). В детальной (Lekar): код лекарства (kod), количество таблеток в упаковке(tabletki). Таблицы связаны по полю кода. В главной таблице создано Lookup-поле (number), отображающее поле количество таблеток в упаковке из подч.таблицы. Также в главной таблице создано поле Calculated для расчета стоимости одной таблетки (price_tab). НД выводится в DBGrid. В поле tabletki детальн.таблицы часть записей не имеет значения, часть равны "10", "20" и др., а часть представлена видом "10*10".  В OnCalcFields пишу:
if priceNumber.AsString="" then priceNumber.Value:="1";
pricePrice_tab.AsFloat:=pricePrice.AsFloat/priceNumber.AsFloat;

При этом в гриде в поле Price_tab выводится значение поля Price. Для проверки priceNumber.Value:="2", цена за таблетку становилась равной половине цены за упаковку. Через  FoxPro открываю таблицу лекарств пишу SELECT * FROM Lekar WHERE tabletki="", результат запроса все записи. Если пишу tabletki is NULL, не выводит ничего.

Подскажите, плз, как мне правильно рассчитать цену на таблетку в событии OnCalcFields? Спасибо.


 
clickmaker ©   (2006-08-15 12:42) [1]


> Через  FoxPro открываю таблицу лекарств пишу SELECT * FROM
> Lekar WHERE tabletki="", результат запроса все записи. Если
> пишу tabletki is NULL, не выводит ничего.
>
> Подскажите, плз, как мне правильно рассчитать цену на таблетку
> в событии OnCalcFields?

не понял, какая связь здесь?


 
Sergey13 ©   (2006-08-15 13:47) [2]

> if priceNumber.AsString="" then priceNumber.Value:="1";

Это ты так лукап полю "правильное" значение присваиваешь? Оригинально.

> а часть представлена видом "10*10"

И что по твоему будет давать priceNumber.AsFloat? 100? Сомневаюсь.


 
GEM   (2006-08-15 15:52) [3]


> не понял, какая связь здесь?

Связи никакой - это делалось только для проверки, так как было непонятно как работает условие if priceNumber.AsString=""  в Delphi, а именно почему выбирались все записи, а проверка делалась непосредственно в VFP . Если вас это смущает или не очень понятно, то часть "Через  FoxPro открываю таблицу лекарств пишу SELECT * FROM Lekar WHERE tabletki="", результат запроса все записи. Если пишу tabletki is NULL, не выводит ничего." можете пропустить. Мне казалось это внесет больше ясности.


> Это ты так лукап полю "правильное" значение присваиваешь?
>  Оригинально.

А как тогда оперировать пустыми значениями? Тогда при делении ругается на значение "". Если я пишу
if priceNumber.AsString<>"" then pricePrice_tab.AsFloat:=pricePrice.AsFloat/priceNumber.AsFloat;
тогда вообще поле Price_tab пустое

> И что по твоему будет давать priceNumber.AsFloat? 100? Сомневаюсь.

Хотелось бы верить...Есть предложения?

Наверняка я делаю что-то не так (на то и новичок) - помогите, как будет правильней.


 
Sergey13 ©   (2006-08-15 16:00) [4]

> А как тогда оперировать пустыми значениями?

А зачем присваивать какое-то значение полю? Для этого есть переменные.

> Наверняка я делаю что-то не так (на то и новичок) - помогите,
> как будет правильней.

Правильнее хранить данные в полях правильного типа. С правильной структурой таблиц.
Вот когда у тебя перестанут возникать подобные вопросы - значит структура становится более-менее правильная. Т.е. структура должна позволять оперировать данными без подобных извращений.
8-)


 
GEM   (2006-08-16 14:22) [5]

структуру таблиц выбирать мне не приходится - они созданы другим приложением (не моим)


 
Sergey13 ©   (2006-08-16 14:26) [6]

> [5] GEM   (16.08.06 14:22)

Тогда тебе придется сначала парсить и вычислять твое супер поле tabletki, а уж потом вычислять то, что тебе надо.


 
GEM   (2006-08-17 07:06) [7]


> Тогда тебе придется сначала парсить и вычислять твое супер
> поле tabletki, а уж потом вычислять то, что тебе надо.

хорошо, допустим 10*10 таких записей нет, как тогда обрабатывать пустые значения в OnCalcFields?


 
Sergey13 ©   (2006-08-17 08:27) [8]

> [7] GEM   (17.08.06 07:06)
> хорошо, допустим 10*10 таких записей нет, как тогда обрабатывать
> пустые значения в OnCalcFields?

var n:integer;

if priceNumber.AsString="" then n:=1 else n:=priceNumber.AsFloat;
pricePrice_tab.AsFloat:=pricePrice.AsFloat/n;


 
evvcom ©   (2006-08-17 08:28) [9]

> [7] GEM   (17.08.06 07:06)

См.
> [4] Sergey13 ©   (15.08.06 16:00)
> Для этого есть переменные.

var Number: Integer;
begin
 if priceNumber.IsNull then Number := 1
 else Number := priceNumber.AsInteger
 pricePrice_tab.AsFloat:=pricePrice.AsFloat/Number;
end;


 
GEM   (2006-08-21 10:53) [10]


> if priceNumber.AsString="" then n:=1


или

> if priceNumber.IsNull then Number := 1


Вся проблема в том, что если так писать, то условию почему-то отвечают все записи, хотя примерно в половине из записей содержится некое значение. Может ли это быть от того, что событие onCalcFields происходит ранее чем lookup-поле (number) получает значения? И что с этим делать?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.13 c
15-1155533431
Ega23
2006-08-14 09:30
2006.09.10
С Днём рождения! 13 августа


2-1156281523
ArtemESC
2006-08-23 01:18
2006.09.10
Содержимое консоли консольного приложения...


2-1155922176
Alex7
2006-08-18 21:29
2006.09.10
TDBLookupComboBox


2-1156245231
XTD
2006-08-22 15:13
2006.09.10
Если нет коннекта выдать свое сообщение (indy)


2-1156332390
GeLLeR
2006-08-23 15:26
2006.09.10
Добавление вложенных папок в плейлист





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский