Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
1

Изменить формулу в вычисляемом поле таблицы в другой базе данных?

11.10.2016, 11:53. Показов 1946. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Тут возник интересный вопрос, вынесенный в тему.

Есть база данных, в которой есть таблица, и в этой таблице - вычисляемое поле (сам я не сторонник вычисляемых полей в таблицах, но что поделаешь, в данном случае это не исправить).
Задача такова: с помощью ДРУГОЙ базы, которая будет запущена на этом компе, "дистанционно" залезть в эту базу, добавить в данную таблицу еще одно поле - и внести изменения в выражение-формулу вычисления в вычисляемом поле...
И если первую часть задачи (добавить поле в таблице в другой базе данных) - я знаю и уже не раз делал, то с вопросом изменения формулы в вычисляемом поле таблицы сталкиваюсь впервые...
Буду признателен за подсказки и советы).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2016, 11:53
Ответы с готовыми решениями:

Событие изменения данных в вычисляемом поле?
Я, наверное, в очередной раз спрошу какую-то банальность, но вот пока что-то не могу найти события,...

Поиск по базе данных при пустом исходном поле поле
Помогите доделать поиск в базе данных при условии что поле с выпадающим списком...

Поле таблицы как сумма значений полей другой таблицы
Здравствуйте. В процессе создания БД столкнулся с проблемой, которую сам решить уже не могу. Есть 2...

Внешнее поле таблицы заполнить несуществующим значением из другой таблицы
Подскажите, пожалуйста! У меня 2 таблицы связаны между собой по полю "№п" с каскадным обновлением...

11
Мы один, давай на "ты"
3421 / 1299 / 312
Регистрация: 16.06.2016
Сообщений: 3,046
11.10.2016, 12:14 2
Kkarn, ты бы хоть пример бы предоставил. Не ты один
Цитата Сообщение от Kkarn Посмотреть сообщение
сам я не сторонник вычисляемых полей в таблицах
0
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
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-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.10.2016, 12:59 5
Хотя не, могут быть еще подводные камни. Таблицы де могу быть присоединенными в других базах (а запрос не присоединяется, вроде бы).

Добавлено через 45 секунд
Цитата Сообщение от Kkarn Посмотреть сообщение
это все можно сделать из одной базы - в другой базе данных?..
Да, почему бы нет?
0
Эксперт MS Access
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,864
11.10.2016, 18:52 6
Лучший ответ Сообщение было отмечено Kkarn как решение

Решение

Цитата Сообщение от Kkarn Посмотреть сообщение
то с вопросом изменения формулы в вычисляемом поле таблицы сталкиваюсь впервые...
Нельзя изменить выражение вычислимого поля в непустой таблице. Но можно переименовать его, создать поле с его старым именем, поставить нужное вычисление и удалить переименованное поле. Вычисление в созданном поле автоматические произведется во всех записях. Во вложении пример, как вместо суммы двух полей сделать их разность. Для простоты сделано в текущей базе, для другой нужно написать не Set ВВ = CurrentDb, а Set ВВ = DBEngine.OpenDatabase(... .
Вложения
Тип файла: zip ВычПоле.zip (21.2 Кб, 16 просмотров)
4
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
11.10.2016, 19:00  [ТС] 7
ltv_1953, Спасибо большое, посмотрел Ваш пример - да, это как раз то, что было нужно).
0
Эксперт MS Access
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
Эксперт MS Access
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2016, 08:34
Помогаю со студенческими работами здесь

Ошибка в вычисляемом поле
Здравствуйте! 1.Подскажите, почему в . в поле не вычисляется сумма? 2. Как лучше реализовать...

Ошибка в вычисляемом поле
Помогите, пожалуйста, раньше не сталкивалась с вычисляемыми полями. Что ему не нравится в...

Как подставить данные в поле таблицы из другой таблицы
Есть база в которой три таблицы: --отделения, --исполнители и --оказанная помощь. На...

DCount в вычисляемом поле на форме
Добрый день. Ну подскажите, плиз, глупый вопрос... Есть основная форма, в ней - подчиненная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru