|
28 Кб. |
|
| Всем привет.
Давненько не брался за Access. Возникла проблема откуда не ждали. Суть:
Есть 2 таблицы. Одна справочная, другая для вычислений. Раньше было все просто. В табле для вычислений выбирался параметр (данные из справочной таблы) и в 3 числовых поля вводились данные (пусть будет ширина, длина, высота). Встроенный в форму запрос считал по определенной формуле результат и все были довольны. ОДНАКО
Теперь решили, что каждый параметр может считаться по разным формулам. В них могут меняться коэффициенты и прочее. Типа если раньше было [Ширина]+[Высота], то теперь может быть [Ширина]-[Высота]*[Длина]+[Высота]/2
Короче проблема в том, что бы пользователь в справочной табле мог сам задавать формулу, по которой потом этот параметр будет считаться. Калькулятор и эксель не предлагать. Забивать формулу не проблема. Проблема ее потом заставить работать в нужной строке в ленточной форме.
Если у меня в некоем поле [Формула] стоит такое чудо: [Ширина]+[Высота]-[Длина]/3 как мне ее преобразовать к числовому значению в поле результат. Запрос на обновление в числовое поле пихает саму эту строку. А надо преобразовать, что бы считал. Функция на преобразование? Кто чего посоветует? | |
|
| |
|
|
|
|
это довольно простая задача :) помнится лет сто назад в функции вычисления объема я перепута знак... недели полторы искал ошибку...
[Ширина]-[Высота]*[Длина]+[Высота]/2
|
как думаешь - что за результат ты получишь вычисляя значение по этой формуле?
(ш-(в*д))+(в/2) - просто фантасмогорично... это наверное круче чем сферический конь в вакууме | |
|
| |
|
|
|
| Да пофиг какая формула. Вот так заказчик заказал. Какая формула когда и на какой параметр будет он и сам не знает. Как эту штуку из текста заставить работать в цифрах в ленточной форме. Поначалу показалось просто. Потом дошел до запроса на обновление по критерию параметр, но в результат вставляет строку формулы, а не число. Знаю, что проблема с кавычками и операторами. Код надо в VBA
me.Результат=...
Вижу что просто, а опять чего-то не втягиваю. | |
|
| |
|
|
|
|
порядок вычисления выражений не пофиг...
но мне-то пофиг, конечно | |
|
| |
|
|
|
| И мне ... И мне пофиг.
Гоблин, Eval попробуйте. | |
|
| |
|
|
|
| Во блин. Это что? Надеюсь что поможет. Тут главное что бы в каждой строке ленточной формы вычисления по разным формулам были. Задача блин.
Лукас, спасибо. Попробую разобраться. | |
|
| |
|
23 Кб. |
|
| Вот вспомнил у мну чё та было такое
посмотри мож сгодится?
Мне тогда весь форум помогал......... | |
|
| |
|
|
|
| Вещь однако! Спасибо. Тут на форуме нашел одну интересную штуку. Lukas для lurix делал. Примерно то, то мне надо. Но у меня что-то не работает. Надо видеть как применить.
http://hiprog.com/forum/read.php?id_forum=1&id_theme=4152&page=1
Твой вроде тоже интересен. И даже очень. | |
|
| |
|
10 Кб. |
|
| Вот пример: =>
Я там второй вариант функции добавил. | |
|
| |
|
|
|
| Ну спасибо. Вот уж не ожидал такого изобилия ответов. И какой из них круче?
Бум дум.
Спасибо все. Но чую, что вопросы не кончились. | |
|
| |
|
|
|
| Все отлично. Работает. Выбрал первый вариант, хотя второй похоже проще. Теперь новый вопрос. Функцию пришлось слегка модифицировать, так как показывала #ошибку# если данных нет. Null.
Теперь новый вопрос. Параметр и формула находятся в таблице-справочнике. В рабочей таблице выбирается с поля со списком параметр, который при подстановке цифр вычисляется в поле Итог. Работает только с целыми числами. При подстановке 8,4 зависает, глючит, выпадает в осадок. В функции используется тип переменных value. Стало быть виновно не это. А что тогда? Работать приходится в основном не с целыми числами. Плиз пояснить.
Функция выглядит так:
Public Function funResultat(L, H, W, Формула As String) As Double
Dim strLitera As String
Dim i As Integer
Dim strResultat As String
If Len(Формула) > 0 Then
For i = 1 To Len(Формула)
strLitera = Mid(Формула, i, 1)
Select Case strLitera
Case Is = "L"
strResultat = strResultat & Nz(L, 0)
Case Is = "H"
strResultat = strResultat & Nz(H, 0)
Case Is = "W"
strResultat = strResultat & Nz(W, 0)
Case Else
strResultat = strResultat & strLitera
End Select
Next i
funResultat = Eval(strResultat)
Else
funResultat = 0
End If
End Function
Менял Double на Float не работает вообще. | |
|
| |
|
|
|
|
В рабочей таблице выбирается с поля со списком параметр...
|
Вероятно, числовое значение представляется строкой.
Попробуй в функции добавить еще один Case
Case Is = ","
strResultat = strResultat & "."
|
| |
|
| |
|
15 Кб. |
|
| Увы не помогает. Тут тип переменных указывать надо. Пробовал в функции указать, не получается. Вот ваш пример. Работает только с целыми числами. Ошибка 2432. Может внедрить функцию преобразования из текста в числовое?
Или вообще другой алгоритм. (Но для меня это трудно в данном случае) | |
|
| |
|
21 Кб. |
|
| Посмотри так: | |
|
| |
|
|
|
|
| Ну, я далеко не гений, я только учусь.
Вопросов, которые ставят в тупик море, например такой:
Напишите, пожалуйста, для чайников поэтапно, что надо нажать и куда вставить.
|
| |
|
| |
|
|
|
| Это типа руководство по использованию программы? Мутное это дело, согласен. | |
|
| |
|
|
|
|
| Блин, как это для меня нормально. Примерно такие вопросы задают чуть ли ни каждый день. Ничего такого не вижу в этом. | |
|
| |
|