Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158

Запрос к внешнему файлу

16.02.2021, 17:00. Показов 5970. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
очередной вопрос новичка

можно ли делать запрос к внешнему файлу Excel так что бы не блокировать этот файл?

у меня почти такой запрос

SQL
1
2
3
SELECT *
FROM [Лист1$] AS Prkz 
IN 'N:\info\src\shtoto.xls'[Excel 8.0;HDR=YES;IMEX=1;ACCDB=YES ];
запускается одно (или несколько) справочное приложение Access c начальным запросом на получение данных из таблицы и всё - файл Excel заблокирован - только на чтение - что бы заменить его надо "завершить" все приложения Access
но у кого из сотрудников запущен справочник не узнать
приходится ждать начала следующего рабочего дня, что бы обновить информацию..

поэтому вопрос - можно ли делать запрос к внешнему файлу Excel так что бы не блокировать этот файл?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2021, 17:00
Ответы с готовыми решениями:

Путь к внешнему файлу Oracle Developer
День добрый, возникла небольшая проблема, не пойму как указать путь к внешнему (dbf) файлу на Oracle Developer?

Путь к внешнему файлу / Необрабатываемое исключение в приложении
Здравствуйте! В программе на с# WF при наведении на картинку, она должна быть заменена на другую. Картинка лежит в папке с exe файлом....

Не могу указать путь к внешнему txt файлу в Java EE Eclipse
Здравствуйте! Подскажите пожалуйста, я пишу простенькую программку для андроид на работу с текстовыми файлами. нужно указать внешний txt...

44
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
18.02.2021, 22:03  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от shanemac51 Посмотреть сообщение
корректируется внутренняя таблица аксесса, а не внешняя екселя
Так это и правильно, внешняя таблица должна быть доступна для изменений (например мной), а внутренняя - это некий справочник (только на чтение)
Но сейчас, как только запускается Access приложение, происходит единственный запрос к таблице и она оказывается заблокирована - её не перезаписать... а надо обновлять данные
Я пробовал разные варианты - не получается пока...

Eugene-LS предложил считать данные средствами VBA и закрыть(освободить) файл - я до марта не смогу это попробовать, а интересно... тогда можно будет периодически обновлять внутренние данные...
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
19.02.2021, 01:21
Цитата Сообщение от kahsel Посмотреть сообщение
внешняя таблица должна быть доступна для изменений
А что будет после ваших изменений? Один поменял в Акцесс, второй в Эксель. Какие сохранять будем?
1
Эксперт MS Access
 Аватар для Eugene-LS
13269 / 5946 / 1529
Регистрация: 05.10.2016
Сообщений: 16,637
19.02.2021, 01:38
Цитата Сообщение от alvk Посмотреть сообщение
Один поменял в Акцесс, второй в Эксель. Какие сохранять будем?
Очинь харошый вапрос!
Однаврименно - то, некак! - к сожалению
0
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
19.02.2021, 08:44  [ТС]
Цитата Сообщение от alvk Посмотреть сообщение
А что будет после ваших изменений? Один поменял в Акцесс, второй в Эксель. Какие сохранять будем?
По условиям задачи: приложение в Access - это витрина для информации, все изменения производятся только во внешнем файле формата Эксель.

Прошу не сбивать обсуждение с исходных условий... Пожалуйста!!!

Добавлено через 20 минут
Цитата Сообщение от kahsel Посмотреть сообщение
внешняя таблица должна быть доступна для изменений (например мной), а внутренняя - это некий справочник (только на чтение)
Приложение в Access - это витрина для информации

Работа у меня такая (вторая) - гружу информацию и делаю для неё интерфейсы для удобства пользования и сохранности,
То есть у пользователей не должно быть возможности её менять
0
Эксперт MS Access
 Аватар для Eugene-LS
13269 / 5946 / 1529
Регистрация: 05.10.2016
Сообщений: 16,637
19.02.2021, 08:46
Цитата Сообщение от kahsel Посмотреть сообщение
все изменения производятся только во внешнем файле формата Эксель
Тогда просто копируйте данные из Excel файла - в таблицу Access, с привязкой к параметрам файла (Название, (Путь), дата редакции, размер). Будет хоть видно "свежесть данных"
0
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
19.02.2021, 08:51  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Тогда просто копируйте данные из Excel файла - в таблицу Access,
Какими средствами? если с помощью мастера - то тогда даже второй пользователь не может нормально запустить приложение - блокировка Excel файла ..

Поэтому и вопрос возник - Как это сделать, что бы не было блокировки!
(и кстати - в рабочем проекте у всех данных есть дата их изменения/внесения)
0
Эксперт MS Access
 Аватар для Eugene-LS
13269 / 5946 / 1529
Регистрация: 05.10.2016
Сообщений: 16,637
19.02.2021, 09:08
Лучший ответ Сообщение было отмечено kahsel как решение

Решение

Цитата Сообщение от kahsel Посмотреть сообщение
Какими средствами?
Подлинковка листа книги Excel:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Public Function LinkExcelList(filePath As String, listName As String, tableName As String) As Long
' es 18.01.04
' Подлинковка листа книги Excel в режиме: READONLY - редакция данных не доступна
' Возвращает код ошибки или 0
'-------------------------------------------------------------------------
'Аргументы:
'   filePath   = Полный путь к файлу
'   listName   = Название листа
'   tableName  = Название таблицы (в текущей базе)
'-------------------------------------------------------------------------
Dim strLink As String
Dim tdf As TableDef
'Удаляем старую таблицу (если есть)
On Error Resume Next
    DoCmd.DeleteObject acTable, tableName
    Err.Clear
On Error GoTo LinkExcelListErr
'Задаем строку подключения
    strLink = "Excel 8.0;DATABASE=" & filePath
    Set tdf = CurrentDb.CreateTableDef(tableName)
    tdf.Connect = strLink
'Задаем название листа
    tdf.SourceTableName = listName & "$"
'Удаление старой (если есть)
    If DCount("*", "MSysObjects", "[Name]='" & tableName & "' AND Type=6") > 0 Then
        CurrentDb.TableDefs.Delete tableName
    End If
 
'Создание подлинкованной таблицы
    CurrentDb.TableDefs.Append tdf
    Set tdf = Nothing
    CurrentDb.TableDefs.Refresh
    DoEvents
    Exit Function
 
LinkExcelListErr:
    LinkExcelList = Err.Number
    MsgBox "Функция [LinkExcelList] привела к ошибке:" & vbCrLf & _
    Err.Description & vbCrLf & " Err#" & Err.Number, vbCritical
End Function


01. Подключили
02. Запросиком импортировали данные ...
03. Удалили подключенное
Всё.
Файл свободен!
1
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
19.02.2021, 10:08  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Подлинковка листа книги Excel:
Красиво, однако!!!
Вот наступит март - разберусь!!!
Спасибо!!
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
19.02.2021, 11:04
Цитата Сообщение от kahsel Посмотреть сообщение
По условиям задачи: приложение в Access - это витрина для информации, все изменения производятся только во внешнем файле формата Эксель.
Телега впереди лошади? Успехов в вашем нелёгком труде.
0
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
19.02.2021, 11:48  [ТС]
Цитата Сообщение от alvk Посмотреть сообщение
Телега впереди лошади? Успехов в вашем нелёгком труде.
А прокомментировать - Что не так??? Углубить тезис? Помочь в познании истины?
0
Эксперт MS Access
 Аватар для Eugene-LS
13269 / 5946 / 1529
Регистрация: 05.10.2016
Сообщений: 16,637
19.02.2021, 12:27
Цитата Сообщение от kahsel Посмотреть сообщение
А прокомментировать - Что не так???
Видимо ув. alvk, хотел сказать, что имея в руках MS Access - работать с табличками MS Excel - это как копать траншею чайной ложкой сидя в экскаваторе
Что то в этом есть.
Не всё же сразу ...
0
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
19.02.2021, 12:46  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
имея в руках MS Access - работать с табличками MS Excel - это как копать траншею чайной ложкой сидя в экскаваторе
Ну это смотря на то, какая информация грузится ".. всё относительно.."
у меня неоднократно возникали ситуации, когда информацию было гораздо проще загрузить в MySQL редактируя в NotePad++ дамп базы данных
сотни фотографий к выставкам МДФ
десятки доп.видов к товарам в интернет-магазины
чего я только не грузил...

Возможно, когда я сочиню правильные формы и десяток процедур - в Access это будет быстрее и удобнее...

Но пока быстрее - выделить строку в таблице, сдублировать её, скопировать по несколько параметров в несколько столбцов..
0
Эксперт MS Access
 Аватар для Eugene-LS
13269 / 5946 / 1529
Регистрация: 05.10.2016
Сообщений: 16,637
19.02.2021, 12:49
Цитата Сообщение от kahsel Посмотреть сообщение
Ну это смотря на то, какая информация ...
Это понятно.
Я просто попытался ответить на ваш вопрос (пояснить пост #29) .
...
Хоть в Excel, хоть в hex редакторе ... - лишь-бы вам было удобно.
0
510 / 164 / 22
Регистрация: 04.10.2015
Сообщений: 649
19.02.2021, 20:09
Проблему свели к простому копированию. И не надо париться.

Иногда самые сложные задачи решаются на рыбалке. ©
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
20.02.2021, 04:39
Цитата Сообщение от kahsel Посмотреть сообщение
Углубить тезис? Помочь в познании истины?
Лошадь(БД) - Акцесс, Телега(Построитель отчётов) - Эксель. Так понятно?
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
20.02.2021, 05:02
Цитата Сообщение от kahsel Посмотреть сообщение
поэтому вопрос - можно ли делать запрос к внешнему файлу Excel так что бы не блокировать этот файл?
Вы из ЭКСЕЛЯ пытаетесь сделать базу данных, вы считаете это правильным решением?

Добавлено через 1 минуту
Заберите в акцес свой эксель полностью и удалите нафиг этот файл экселя, пусть сотрудники в акцес работают
0
510 / 164 / 22
Регистрация: 04.10.2015
Сообщений: 649
20.02.2021, 08:45
Лучший ответ Сообщение было отмечено kahsel как решение

Решение

Хотя такая задача никогда не была востребована мной, но стало дюже интересно.
Путем экспериментов установил следующее:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
' Есть книга XL Naklad.xls
' в этой книге есть лист Prim
' необходимо подключить заданный лист к текущей базе данных
Function Create_LnlkXL()
Dim tdf As TableDef
Dim strPath As String
Dim sTable As String
Dim listName As String
Dim strLink As String
 
' путь к файлу
strPath = "C:\Tmp\Nakld.xls"
' создаваемая таблица
sTable = "Prim"
' источник подключения
listName = "Prim$"
' 1-й вариант.  Во время выполнения запроса файл Excel открывается только в режиме чтения
strLink = "Excel 5.0;HDR=YES;IMEX=1;DATABASE=C:\Tmp\Naklad.xls"
' 2-й вариант. Во время выполнения запроса файл Excel полностью блокируется
'strLink = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=C:\Tmp\Naklad.xls"
' параметр Excel 5.0 зависит от версии Excel
Set tdf = CurrentDb.CreateTableDef(sTable, dbVariableField, listName, strLink)
' добавляем таблицу
CurrentDb.TableDefs.Append tdf
Set tdf = Nothing
CurrentDb.TableDefs.Refresh
' далее можно добавить обработчик ошибок
End Function
1
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
24.02.2021, 11:38  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Всё.
Файл свободен!
Выполнив февральские работы досрочно, возвращаюсь к интересному
- можно ли делать запрос к внешнему файлу Excel так что бы не блокировать этот файл?

Вариант andris2 работать сразу не захотел ( кнопка Test2 в примере ) - выдает ошибку, "Лист1" уже существует (нет обработчика - буду разбираться позже!)

Вариант Eugene-LS заработал сразу и частично решил проблему:
- если я запустил Access, то потом я не могу открыть файл-источник в Excel, он заблокирован
- если я открыл файл-источник в Excel, а потом запустил Access, то изменения внесенный в источник, по запуску обновления ( кнопка Test в примере ) - информация в таблице tbl_0 обновляется, но через некоторое время Access выдает ошибку - "Потеряна связь с Microsoft Excel для просмотра присоединенных листов." и "обнуляет" подформу... через некоторое время данные в подформе восстанавливаются, но сообщение об ошибке продолжает висеть..

если посмотреть информацию о таблице с полученной информацией ( tbl_0 ) - то она "привязана" к файлу исходнику..
Вложения
Тип файла: zip test_VBA_24.zip (339.9 Кб, 7 просмотров)
0
4 / 5 / 0
Регистрация: 03.02.2021
Сообщений: 158
24.02.2021, 14:07  [ТС]
Пример для работы по месту C:\Access_VBA, иначе надо поправить путь в Module1

Добавлено через 2 часа 22 минуты
Цитата Сообщение от Eugene-LS Посмотреть сообщение

Visual Basic
1
2
3
4
5
6
'Создание подлинкованной таблицы
 CurrentDb.TableDefs.Append tdf
 Set tdf = Nothing
 CurrentDb.TableDefs.Refresh
 DoEvents
 Exit Function
Все же для меня уже написано
Visual Basic
1
CurrentDb.TableDefs.Append tdf
то есть - внешняя таблица подключается... и не отключается, потому что метод Append
даже если попробую создать временную таблицу к которой сделаю подобное подключение, и содержимое которой скопирую с рабочую таблицу, то полноценно удалить Линк не получится... внешняя таблица остается в "зависе"
0
Эксперт MS Access
 Аватар для Eugene-LS
13269 / 5946 / 1529
Регистрация: 05.10.2016
Сообщений: 16,637
25.02.2021, 02:26
Цитата Сообщение от kahsel Посмотреть сообщение
и не отключается, потому что метод Append
А ну это старый глюк MSA, он при смене идеологии приложения сам формы не переделывает, и соответственно не может удалить таблицу уже открытую в форме.
Это можно обойти не переделывая формы а просто перенаправив поток данных в другую сторону.

Пример ниже ...
Вложения
Тип файла: zip test_VBA_v003.zip (61.7 Кб, 11 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2021, 02:26

Как отправить AJAX запрос к внешнему ресурсу для переадресации?
Как отправить ajax запрос к внешнему ресурсу ? Или хотя бы сделать на него переадрессацию в контролере ?

AJAX запрос к файлу, который сам делает AJAX запрос
Прошу прощение за название темы, но я не знаю как это коротко описать... Здравствуйте. На странице HTML я обращаюсь к файлу PHP: ...

запрос к файлу Xml
Напишите запрос к файлу Northwind.xml,для нахождения времени существования самых активных заказчиков,например компаний общая сумма заказов...

Запрос к php файлу
Добрый день столкнулся с небольшой проблемой и не могу найти решения, есть программа она обращается к одному php файлу с разными запросами,...

Post запрос к локальному файлу
У меня файл с js должен отправить post к php файлу, который лежит в той же папке, что и он, и путь должен быть относительным. Как правильно...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru