Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Вычислить формулу хранящуюся в текстовом поле БД


Автор: N1k 15.5.2006, 17:23
Есть таблицы "Материалы" и "Продукты".
Для каждого элемента таблицы "Продукты" свой набор материалов.
В таблице "Материалы" есть текстовое поле "РасчетКоличества" в котором хранится формула (что-то типа "a*b+c").
Нужно получить набор материалов для данного продукта (при заданных a,b и c) с полем "Количество" в котором будет числовое значение эквивалентное значению вычесленной формулы из поля "РасчетКоличества".
Т.е. если, например, a=10,b=20, с=30 и формула "a+b+c", то значение поля "Количество" для данного материала = 60.
Реально такое сдеать с помощью одного(без получения промежуточных данных) запроса?
если да , то можно ли пример.

Использую ADO, access.

  

Автор: Staruha 15.5.2006, 20:26
Если данные однотипные(для всего столбца вся формула),тогда это сделает Access. А если нет тогда придется воспользоваться Case средствами типа
               1 - a*b+c
               2 - a+c 

Автор: Vit 15.5.2006, 21:04
Ну формировать динамически SQL запрос, что-то типа:

Query2.sql.text:='Select * From Table1 Where '+Query1.fieldbyname('MyFormula').asstring

А если не в таблице надо вычислять, тогда модуль Parsing из RxLib поможет 

Автор: Akella 16.5.2006, 08:02
Конечно реально. Поищи по рунету информацию по ключевыым словам "парсинг", "разбор математических выражений" и т.д, возможно даже на форуме, может даже в  арсенале.... 

Автор: comtat 16.5.2006, 08:10
Хороший парсер для этих целей ArtFormula и ArtFormulan   smile  

Автор: N1k 16.5.2006, 09:05
Парсер - это понятно, но вопрос стоял 

Цитата(N1k @  15.5.2006,  17:23 Найти цитируемый пост)
Реально такое сдеать с помощью одного(без получения промежуточных данных) запроса?



Цитата(Staruha @  15.5.2006,  20:26 Найти цитируемый пост)
Если данные однотипные(для всего столбца вся формула),тогда это сделает Access. А если нет тогда придется воспользоваться Case средствами типа               1 - a*b+c               2 - a+c 


Можно поподробней? 

Автор: Vit 16.5.2006, 15:54
Не уверен что MS Access поддерживает Case - слабенький там SQL используется. Во многих диалектах SQL возможна конструкция вида:

Код

Select 
  Field1,
  Case 
    When Field2=1 Then a*b+c
    When Field2=2 Then 2 - a+c 
  End
From MyTable...
 

Автор: bas 16.5.2006, 16:46
Цитата(Vit @  16.5.2006,  15:54 Найти цитируемый пост)
Не уверен что MS Access поддерживает 

НЕ поддерживает.
 

Автор: Staruha 16.5.2006, 19:45
Я имела ввиду - если сохранять данные например в первом и втором столбце, то третий будет автоматически пересчитываться.Это когда данные однотипные.А остальное Vit сказал(Я на Delphi недавно. Извините,если ,что не так) 
 Vit, все-таки мне так представляется ,что Case можно без запроса построить,а данные для формул вытаскиать конечно запросом  

Автор: Vit 16.5.2006, 22:54
Цитата(Staruha @  16.5.2006,  10:45 Найти цитируемый пост)
Я имела ввиду - если сохранять данные например в первом и втором столбце, то третий будет автоматически пересчитываться.Это когда данные однотипные.А остальное Vit сказал(Я на Delphi недавно. Извините,если ,что не так) 
 Vit, все-таки мне так представляется ,что Case можно без запроса построить,а данные для формул вытаскиать конечно запросом  



Нет, построить нет проблем, речь идёт о том чтоб реализовать эту логику в пределах одного запроса, и повидимому это невозможно. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)