Даю возможность пользователю вписать формулу в текстовом виде, и предварительно проверив на синтаксические ошибки, запоминаю эти формулы в базу.
формула (к примеру):
(a*b) / (1+c/100) + (a*b) / (d*0.3)
или
(a*b) / (1+c/100) + (a*b) / (d*0.3))
первый вариант содержит потенциальную ошибку, если c =-100 или d =0 произойдет деление на ноль.
второй вариант содержит еще и лишнюю “)”.
Кто не будь, может посоветовать, существует теория проверки потенциальных ошибок, или анализа формулы, чтобы заранее вычислить вероятность ошибки? К примеру, такой, какой использует JET при передаче ему SQL строки на синтаксис строки.
Канешно, все завысит от сложности формул, но мне интересен самый простой вариант использование только операторов + - * / ( ) и 4 переменных только a, b, c, d.
Что из этих операторов и переменных сотворит пользователь заранее не известно.
В принципе, для этих операторов и переменных, мне кажется, потенциальные ошибки сводятся только на “деление на ноль” или “переполнение”.
саму формулу (синтаксис) и явное деление, проверяю, следя за ошибками, используя как раз JET:
- Код: Выделить всё
Set r = db.OpenRecordset (" SELECT ” & Моя_формула &” FROM " & _
" (SELECT 0 as a, 0 as b, 0 " as c, 0 as d FROM какая-то_непустая_таблица) ")
и затем K = r.Fields(0)
но потенциальные ошибки не знаю, как проверить.
Спасибо!