902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
1 | |
Изменить формулу в вычисляемом поле таблицы в другой базе данных?11.10.2016, 11:53. Показов 1946. Ответов 11
Метки нет (Все метки)
Добрый день. Тут возник интересный вопрос, вынесенный в тему.
Есть база данных, в которой есть таблица, и в этой таблице - вычисляемое поле (сам я не сторонник вычисляемых полей в таблицах, но что поделаешь, в данном случае это не исправить). Задача такова: с помощью ДРУГОЙ базы, которая будет запущена на этом компе, "дистанционно" залезть в эту базу, добавить в данную таблицу еще одно поле - и внести изменения в выражение-формулу вычисления в вычисляемом поле... И если первую часть задачи (добавить поле в таблице в другой базе данных) - я знаю и уже не раз делал, то с вопросом изменения формулы в вычисляемом поле таблицы сталкиваюсь впервые... Буду признателен за подсказки и советы).
0
|
11.10.2016, 11:53 | |
Ответы с готовыми решениями:
11
Событие изменения данных в вычисляемом поле? Поиск по базе данных при пустом исходном поле поле Поле таблицы как сумма значений полей другой таблицы Внешнее поле таблицы заполнить несуществующим значением из другой таблицы |
Мы один, давай на "ты"
3421 / 1299 / 312
Регистрация: 16.06.2016
Сообщений: 3,046
|
|
11.10.2016, 12:14 | 2 |
0
|
шапоклякистка 8-го дня
|
|
11.10.2016, 12:56 | 3 |
Kkarn, не могу быть ни сторонником, ни потивником выч. полей, т.к. 2007 их еще не позволяет. Но я бы
1) отключила автозамену имен 2) переименовала таблицу 3) создала запрос со всеми нормальными полями таблицы + вычисляемое поле 4) сохранила под именем таблицы. Добавлено через 1 минуту Если только программа нигде не обращается напрямую к таблице как элементу коллекции TableDefs по имени - должно все продолжать работать.
0
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
11.10.2016, 12:58 [ТС] | 4 |
texnik-san, Интересная мысль. А это все можно сделать из одной базы - в другой базе данных?..
0
|
шапоклякистка 8-го дня
|
|
11.10.2016, 12:59 | 5 |
Хотя не, могут быть еще подводные камни. Таблицы де могу быть присоединенными в других базах (а запрос не присоединяется, вроде бы).
Добавлено через 45 секунд Да, почему бы нет?
0
|
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,864
|
|
11.10.2016, 18:52 | 6 |
Сообщение было отмечено Kkarn как решение
Решение
Нельзя изменить выражение вычислимого поля в непустой таблице. Но можно переименовать его, создать поле с его старым именем, поставить нужное вычисление и удалить переименованное поле. Вычисление в созданном поле автоматические произведется во всех записях. Во вложении пример, как вместо суммы двух полей сделать их разность. Для простоты сделано в текущей базе, для другой нужно написать не Set ВВ = CurrentDb, а Set ВВ = DBEngine.OpenDatabase(... .
4
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
11.10.2016, 19:00 [ТС] | 7 |
ltv_1953, Спасибо большое, посмотрел Ваш пример - да, это как раз то, что было нужно).
0
|
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,864
|
|
11.10.2016, 19:02 | 8 |
Да не за что. Но лучше бы такие поля не использовать, я обхожусь запросами ... .
0
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
11.10.2016, 19:20 [ТС] | 9 |
ltv_1953, Полностью согласен, но в данном случае я не хозяин базы и не имею никаких прав (да и особого желания, если честно) исправлять там что-то глобально.
0
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
18.10.2016, 21:10 [ТС] | 10 |
ltv_1953, Возвращаюсь в данную тему.
Наконец-то дошел ход до внедрения этого кода на практике - и получился неожиданный затык. В Вашем коде для присвоения полю выражения используется конструкция типа: ПеременнаяПоля.Expression = "Какое-то выражение" ПеременнаяТаблицы.Fields.Append ПеременнаяПоля И вот у меня при прогоне кода затыкается с ошибкой на второй из этих строк, то есть непосредственно на добавлении данного поля к таблице. Жалуется на "синтаксическую ошибку в выражении". При этом другие поля точно такой же конструкцией запросто добавляются в эту же таблицу. Я так подозреваю, что причиной этому - то самое заковыристое выражение, которое мне нужно присвоить вычисляемому полю, а именно вот такое: "IIf(IsNull([Ставка]);0;[Ставка])+IIf(IsNull([Аванс]);0;[Аванс])+IIf(IsNull([Долг]);0;[Долг])+IIf(IsNull([СЗаказов]);0;[СЗаказов])+IIf(IsNull([Премия]);0;[Премия])+IIf(IsNull([Отпуск]);0;[Отпуск])-IIf(IsNull([Взыскания]);0;[Взыскания])" Конструкции Ииф тут использованы вместо Nz, поскольку функция Nz не распознается в выражениях вычисляемых полей. Если причина действительно в этом выражении, то в чем именно (точках с запятой?...) и как можно преодолеть этот момент, чтобы присвоить этому полю именно это выражение?.. Буду очень признателен за подсказку)
0
|
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,864
|
|
18.10.2016, 23:57 | 11 |
Сообщение было отмечено Kkarn как решение
Решение
Попробуйте поставить запятые вместо точек с запятой.
Нигде этого вроде бы не написано, но можно же посмотреть в отладчике значение Expression подобного вычислимого поля.
1
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
19.10.2016, 08:34 [ТС] | 12 |
ltv_1953, Да, еще раз большое спасибо, заменил точки с запятой на запятые - и все приняло без проблем.
0
|
19.10.2016, 08:34 | |
19.10.2016, 08:34 | |
Помогаю со студенческими работами здесь
12
Ошибка в вычисляемом поле Ошибка в вычисляемом поле Как подставить данные в поле таблицы из другой таблицы DCount в вычисляемом поле на форме Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |