powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как проверить, не открыт ли файл...
21 сообщений из 21, страница 1 из 1
Как проверить, не открыт ли файл...
    #32878270
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а если открыт - то попробовать выяснить кем именно?

Это нужно сделать программно перед переименованием/перемещением файла. Дело в том, что файлы расположены в папках по определенному принципу. В имени файла присутствует содержимое нескольких полей формы (месяц, год, название). Поэтому требуется синхронизировать имя файла в соответствии с данными, если они изменились.

Файлы екселевские
Форма в Акс 2002

Спасибо
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878284
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб проверить, не открыт ли кем - попытаться открыть с эксклюзивным доступом. если открыт - копать netapi, С-шный код могу кинуть в понедельник
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878657
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попытаться открыть с эксклюзивным доступомА как это сделать? Что то у FileSystemObject.OpenTextFile не нахожу такого режима....

Может попробовать тупо переместить/переименовать файл, используя конструкцию Name oldpathname As newpathname и отслеживать ошибку? Кажется, для успешного выполнения файл должен быть закрыт.

если открыт - копать netapi, С-шный код могу кинуть в понедельникБыло бы очень полезно взглянуть, хотя бы чтоб понять методику копания. Жду понедельника. :) Пока не представляю как код на Си можно привинтить к Аксу, но думаю что можно переписать на ВБА....
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878676
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) просто открой файл старым добрым бэйсиковским open типа
Код: plaintext
Open "f:\1.txt" For Input Lock Read Write As # 1 
если файл кем либо открыт - получишь ошибку 70
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878708
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно! А то я уже загнался в "высокие материи"... Все просто оказалось
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  On Error Resume Next
  Err.Clear
  Open pathSm & fName For Input Lock Read Write As # 1 
  If Err.Number =  70  Then
    MsgBox "Файл кем то открыт!"
    Exit Sub
  Else
    Close # 1 
  End If

Осталось выяснить имя того негодяя, который держит его открытым...
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878717
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Накопал такой код, который позволяет посмотреть кто какие файлы открыл на определенном компе.
Код: plaintext
1.
2.
3.
4.
5.
6.
Set fso = GetObject("WinNT://aDomain/aComputer/LanmanServer")

For Each r in fso.Resources
   str = str & r.User & " " & r.Path  & " " & r.LockCount & vbCrLf
Next

MsgBox str
В принципе, имя компа где файлы живут, известно, только вот r.Path возвращает локальный путь на том компе... хотя, это решаемо :)
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878727
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ принципе, имя компа где файлы живут, известно, только вот r.Path возвращает локальный путь на том компе... хотя, это решаемо :)

Это разумно, файл может быть доступен по разным share с разными правами. Копай дальше
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878783
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey ShКопай дальшеДальше опять вилы.... Этот код (немного измененный) НЕ работает, если запущен с пользовательскими привилегиями (впрочем, это понятно). Да и с админскими работает не быстро (3...5 секунд, и это когда в сети нет никого).... И то только в MDB. А будучи откомпилированым в MDE, вырубает Акс с предложением отправить отчет в Мелкософт.

Видно, нужен другой подход..... Будем копать :)
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32878839
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему собственно, не применить именно другой подход ?

Данные в Аксессе лежат ? Лежат. Думаю, вполне можно сделать форму/набор форм, которая и по внешнему виду и по функциональности будет очень похожа на екселовские листы.

Так может и не стоит таскать этот файловый багаж ? Насколько насущна необходимость иметь это еще раз именно в екселе ?

Если уж приспичило, можно каждый раз генерить свеженький табличный файл по требованию пользователя.
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32879011
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительДанные в Аксессе лежат ? Лежат.Данные внешних файлов? К сожалению, не лежат... Даже близко... Это различные документы, в основном *.XLS, попадаются *.DOC, внутри файлов могут быть и рисунки... В Аксесе только привязка документа(ов) к конкретной записи... Но если меняется допустим дата - то меняется и имя файла(ов). Это было утверждено давно, еще в эпоху мамонтов... Бардак и глупости? Естественно! Если б это разрабатывалось мной изначально - конечно многое было бы иначе Но к сожалению, сей порядок был заведен не мной. А мне надо попытаться обеспечить минимум путаницы и максимум функционала в этом бардаке...
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32879206
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспоминаю одну фразу (не свою): пускай безобразно, лишь бы единообразно...
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32879275
S l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
S l
Гость
Программист-ЛюбительА почему собственно, не применить именно другой подход ?

Данные в Аксессе лежат ? Лежат. Думаю, вполне можно сделать форму/набор форм, которая и по внешнему виду и по функциональности будет очень похожа на екселовские листы.

Так может и не стоит таскать этот файловый багаж ? Насколько насущна необходимость иметь это еще раз именно в екселе ?

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

а если такие требования? у нас вообще это нормативными документами регламентируется :(
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32879687
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В порядке понедельничного бреда.

Можно взять какой-нибудь учебник по OLEDB. Такие учебники чаще всего начинаются с написания OLEDB-провайдера на основе NTFS. Ну а дальше все просто
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32879826
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обещал "выгонялку" закинуть. В параметрах - не имя файла, а префикс, короче всё как в NET FILE, ессно права админа должны быть
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32881239
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Alexey Sh
Спасибо за примерчик. Пытаюсь разобраться. Хотя, на первый взгляд кажется, что прикрутить это в полной мере непосредственно к Аксу - дело тухлое...
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32881250
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неа :) описать на VBA функции NETAPI, чуток повоевать с указателями - и ваши волосы будут в полном порядке
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32881897
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я такую штуку через net file летом предлагал
/topic/99452&hl=
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32890326
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как посмотреть кто что открыл на сервере. Попался почти готовый код на VB.

Но как быть с вот этим?
MSDNOnly members of the Administrators or Server Operators local group can successfully execute the NetFileEnum function.
Запихнуть группу пользователей БД в операторы сервера.... или... ???
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32890615
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написать сервис, запускаемый на сервере и обращаться к этому сервису из пользовательских программ
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32890817
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдя... ну не каждый день пишу сервисы... Точнее, вааабще никогда их не писал... С чего начать то, чтоб с ними разобраться?

Вот так маленькое желание добавить в пользовательский интерфейс маленькую вкусность (к тому же редко используемую) порождает большие проблемы.
...
Рейтинг: 0 / 0
Как проверить, не открыт ли файл...
    #32891984
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Sh , спасибо за пинки в нужном направлении.

Может быть и криво, но тем не менее, кажется работает. Тока не смейтесь.....
На сервере, где файлы живут, поднял веб-сервер на IIS и положил туда ASP-страничку с таким кодом
Код: plaintext
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.
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1251"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4" -->
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<META http-equiv="pragma" content="no-cache">
</HEAD>
<BODY>
<BODY>
<%  Dim fso, fName, resp

  fName = Request.ServerVariables("QUERY_STRING")
  fName = Replace(fName, "%20", " ")

  If fName <> "" Then
    Set fso = GetObject("WinNT://./LanmanServer")

    For Each r In fso.Resources
      If InStr(r.Path, fName) >  0  Then
         resp = r.User
         Exit For
      End If
    Next

    If Len(resp) >  0  Then %>
  <%= resp %>
<%  Else  %>
      Да хрен его знает....
<%  End If
  Else  %>
    Имя файла не указано!!!
<%End If %>
</BODY>
</HTML>
На клиенте в Аксе такая функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
' запрос имени юзверя через веб-браузер
' нужно подключить рефренс Microsoft Internet Controls
Function GetNameOfFUser(ByVal fileName As String) As String
  Dim wbIE As New InternetExplorer
  wbIE.Navigate2 "http://asrv:82/reqnameofuser.asp?" & fileName
  Screen.MousePointer =  11  ' часики
  Do ' ждем окончания загрузки
  Loop While wbIE.ReadyState <> READYSTATE_COMPLETE
  Screen.MousePointer =  0  ' стрелка
  GetNameOfFackenUser = wbIE.Document.body.innerText
  Set wbIE = Nothing
End Function

PS. Может быть когда нибудь и научусь ловить рыбу удочкой. Только бы научиться ей пользоваться. А пока нанял рыболовный траулер, чтоб кошкам на ужин наловить.....
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как проверить, не открыт ли файл...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]