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

Обновление данных формы при возврате в Access из другого приложения (Экселя)

03.04.2016, 20:08. Показов 1439. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем.
Собственно вопрос - в названии темы.
Более развернуто. Есть база и есть экселевский файл, между которыми с горем пополам налажен обмен данными)) В данный момент все работает замечательно, глаз колет только одна малость.
Допустим, у меня открыто окно базы, потом я попутно открываю экселевский файл. И вот я в Экселе нажимаю кнопочку "Передать данные в базу", и все данные соответственно обновляются в базе (добавляются новые строки в таблицы, или же просто обновляются некоторые поля в имеющихся строках). Потом экселевский файл закрываю - и на экране снова база данных, но в форме данные не обновлены, само собой, поскольку, как я понимаю, никаких событий типа включения и активации (на которые я пробовал повесить реквери) - не происходит.
Отсюда и возникает вопрос - как бы так сделать, чтобы не нужно было "по возвращении" в базу закрывать и заново открывать форму, чтобы увидеть изменения, внесенные Экселем?..
Скорее всего, я туплю на ровном месте, потому буду, как всегда, признателен за идеи и советы)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2016, 20:08
Ответы с готовыми решениями:

Как работать с уже открытой книгой Экселя из другого приложения
Доброго всем дня! Прошу подсказать, всю голову сломал. Есть открытая книга Эксель БД_объектов.xls, при обращении к ней из другого...

Перенос данных из Экселя в Access
Уж прошу меня простить, но как то ленился всегда занятся изучением совместной работы приложений. А сейчас срочно понадобилось. Поэтому,...

Сворачивает (выходит из приложения) при возврате из дочерней активити в родительскую
Приветствую господа. Нуждаюсь в вашей помощи. Есть некая программа на андроид, при нажатии на кнопки переходит на (создает) новое...

12
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2016, 20:32
Лучший ответ Сообщение было отмечено Kkarn как решение

Решение

Если книга екселя не новая, т.е. не создается в сеансе автоматом, то можно на событии Deactivate книги прописать обновление формы. Примерно так
Visual Basic
1
2
3
4
5
Private Sub Workbook_Deactivate()
    Dim app As Object
    Set app = GetObject("путь\БД.accdb")
    app.forms!ИмяФормы.Requery
End Sub
1
 Аватар для Kkarn
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
03.04.2016, 20:36  [ТС]
mobile, Спасибо, как раз подойдет! Книга не новая, она создается копированием готовой книги, в которую я как раз и пропишу этот код.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2016, 20:37
Впрочем, если в екселе Вы "нажимаете на кнопочку", то код можно разместить в этой самой кнопочке
1
 Аватар для Kkarn
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
03.04.2016, 21:39  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Впрочем, если в екселе Вы "нажимаете на кнопочку", то код можно разместить в этой самой кнопочке
Сначала хотел было написать, что кнопка просто передает данные, а сам файл экселя при этом еще не закрывается, в нем могут еще работать, а обновлять нужно уже при закрытии - а потом понял, что туплю)))) И правда, так вообще шикарно получается. Еще раз БОЛЬШОЕ СПАСИБО!

Добавлено через 48 минут
Хм. Только вот, когда я перекинул этот код на кнопку - мне почему-то после ее нажатия стало открывать ВТОРОЙ экземпляр базы...
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2016, 22:09
Либо где-то переменная аппликейшена не закрывается, или вместо гетопшен криэйтопшен. Попробуйте после выполнения кода уничтожать переменную Application
Visual Basic
1
Set app=Nothing
Добавлено через 6 минут
Поэкспериментировал. Не смог добиться повторного вызова БД если использовать GetOption.

Kkarn, если у Вас по-прежнему повторно вызывается, выложите здесь файл екселя и фрагмент БД.
0
 Аватар для Kkarn
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
03.04.2016, 22:55  [ТС]
mobile, я эту строку прописывал, конечно. Все равно открывается.
Я так подозреваю, это получается потому, что у меня в коде самой кнопки перед этим используется АДО.рекордсет для обновления данных и добавления строк в одну таблицу. То есть я в коде объявляю этот рекордсет, делаю с ним всякие там операции, потом его закрываю, потом делаю гетобъект как Вы писали выше, обновляю форму и т.д.
Может это повторное открытие происходить именно из-за того, что ранее в коде была работа с рекордсетом таблицы?..

Добавлено через 1 минуту
а вот если код с гетобъектом и обновлением формы помещать именно на процедуру деактивации экселевского файла - тогда повторного открытия базы не происходит. Ну то есть явно виноват тот код, который сидит на кнопке до гетобъекта. Хотя в том коде кроме работы с рекордсетом нет никаких упоминаний объектной переменной Акса.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2016, 22:59
А рекодсет вы закрываете? Надо обязательно rst.Close и Set rst=Nothing перед GetObject. И тоже самое с конекшеном к базе. Иначе да, возможно из-за незакрытого рекордсета и конекшена появляется копия базы.
0
 Аватар для Kkarn
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
03.04.2016, 23:08  [ТС]
ага, рекордсет закрываю как раз перед гетобъектом. А вот про конекшн как-то не подумал. А как его правильно закрывать-то?.. У меня же просто в коде идет типа rst.Open strConnection, Source и т.д., то есть одной строкой открытия рекордсета...
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.04.2016, 23:29
Тогда давайте сделаем иначе. Пусть app будет публичной в общем модуле. В процедуре проверяем инициализирована ли переменная и если нет задаем ей сет.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
Public app As Object
 
Sub МакросКнопки()
    'Операции с рекордсетом
    '......................................................
    '......................................................
    'Обновление формы
    If app Is Nothing Then
        Set app = GetObject("путь\БД.accdb")
    End If
    app.forms!ИмяФормы.Requery
'    Set app = Nothing   'Теперь нафинговать app нельзя. Переменная должна жить до закрытия екселя
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
03.04.2016, 23:44
Цитата Сообщение от mobile Посмотреть сообщение
Переменная должна жить до закрытия екселя
Тогда на всяий случай напоминаю, что в случае любой необработанной ошибки все глобальные переменные обнуляются. Если глобальная перменная нужна точно живая - то в каждой фунции/процедуре должен быть оператор On Error
1
369 / 88 / 8
Регистрация: 14.08.2012
Сообщений: 248
04.04.2016, 00:06
Цитата Сообщение от texnik-san Посмотреть сообщение
Тогда на всяий случай напоминаю, что в случае любой необработанной ошибки все глобальные переменные обнуляются. Если глобальная перменная нужна точно живая - то в каждой фунции/процедуре должен быть оператор On Error
А мужики то и не знали (©)
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
04.04.2016, 00:20
Смех смехом, но тут на форуме в половине выкладываемых примеров обработкой ошибок никто не заморачивается.

Пэтому проще предупердить, чем ждать через день "я все сделал как вы написали, а оно не работает".

И да, предупреждение адресовано не mobile, а Kkarn.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2016, 00:20
Помогаю со студенческими работами здесь

Access violation writing location 0x0000001C при возврате вектора из функции
При возврате вектора из этой функции выкидывает исключение Exception thrown at 0x00E78AC8 in test.exe: 0xC0000005: Access violation...

Ошибка при экспорте данных в Word из другого Офисного приложения
Здравствуйте, друзья! Столкнулся с такой проблемой - сделал простенькую базу в Access 2007 (mdb) в которой хранится список литературы. В...

Взаимодействие данных с формы и листа Экселя
Здравствуйте! Буду благодарен, кто подскажет: задача: создаю форму, в ней список1 (стул, стол, кровать - к примеру), список2 (цвет синий,...

Как правильно обновить DataGridView при возврате из другой формы
Опять что-то конструктор поломался:- Private Sub TabPage3_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load ...

При нажатии на 2 форме кнопку Ok на первой надо выполнить обновление данных в БД Access
При нажатие на 2 форме кнопку Ok на первой надо выполнить обновление данных в БД Access Как это можно реализовать?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru