powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запустить другой mdb (причем на переднем плане экрана), а старый закрыть
16 сообщений из 41, страница 2 из 2
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633055
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Hummerно писать в макросе открытие другого мдб и закрытие самого себя - именно в autoexec - полёт извращённой фантазии...
Все претензии - к постановке задачи. См. исходный вопрос топика. Значит, для моего случая это решение не годится.
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633063
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VictoshaИ Shell тебя не спасет.
Спасет. Точнее, отсутствие OpenCurrentDatabase спасет. Потому что у меня будет два разных mdb.
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633073
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VictoshaПочему, получив экземпляр Ексель, тебе не страшно открыть в нем рабочую книгу. Вдруг зациклишся, поскольку она начнет открывать сама себя в бесконечном цикле...
Потому что там нет Автоэкзека, который делает OpenCurrentDatabase.
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633078
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВсем привет. Спасибо всем, кто поможет.

Хочу сделать так, чтобы выполнялись две операции:
1. Копирование файла mdb из бэкапа.


Это внешний по отношению к текущему приложению процесс

Владимир Саныч

2. Запуск файла, полученного после копирования.
Но при этом юзер должен нажимать на один ярлык, а не на два.
Видимо, задача сводится к тому, чтобы по ходу работы программы запустить другой mdb (причем на переднем плане экрана), а старый закрыть. Реально ли такое?

Аксесс 2000.

Буквально вышеописанную комбинацию действий производит скрипт, указанный Hummer.


Почему объявлено, что не устраивает - я не понял.
Видимо какие-то существенные детали остались мной "непрочитаны".

ЗЫ
Извини за "пачкотню" - больше не буду (здесь)...
:)
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633084
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Саныч

1. Копирование файла mdb из бэкапа.
2. Запуск файла, полученного после копирования.

Для решения такой задачи аксес абсолютно не нужен - делается скрипт или екзешник, в котором можно указать путь к бекапу - в любом случае, работать будет быстрее, чем на аксесе:)
А макрос autoexec вообще не причём - в любом случае, не будет зацикливание - зачем копировать из бекапа файл, в котором при загрузке опять происходит копирование скамого себя?:) Это и имелось в виду.

Нормальное решение на сайте у Алексея Козина.
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633086
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч VictoshaПочему, получив экземпляр Ексель, тебе не страшно открыть в нем рабочую книгу. Вдруг зациклишся, поскольку она начнет открывать сама себя в бесконечном цикле...
Потому что там нет Автоэкзека, который делает OpenCurrentDatabase.

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

Саныч, а КУДА ОН ДЕНЕТСЯ?
ЧТО ЕГО ОСТАНОВИТ, если ты базу через Shell запустишь.

ЗЫ
Закралось подозрение, поэтому на всякий случай - autoexec - он локальный по отношений к конкретному mdb и, если есть, то у каждого свой.
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633095
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha
В командной строке можно указать запуск аксеса с имуляцие шифта, т.е. блокирования макросов на страте мдб или адп. Поэтому, если нужно универсально блокировать макрос автоекзек - то шелл лучше.
Но вот если там стоит защита от шифта - получаем замкнутый круг:)
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633105
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извените конечно, а нафига вообще этот аутоэкзек?
нельзя что-ли форму назначить и всё нужное на её открытие повесить?

Саныч , а у тебя в ивритских версиях с макросами разве не было проблем?
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633111
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 TatianaT
Дело вкуса.
Зачем мне лишняя форма, если я совершаю одно нужно действие, например, запуск моей функции, которая считает конфиг приложения и, в зависимости от типа аутентификации конкретного пользователя, выведет или нет форму для ввода логина и пароля к серверу? Мне больше подойдёт автоекзек:)
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633133
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ой скока мне сейчас отвечать... попробую коротко.

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

2. Про зацикливание - я говорю только про OpenCurrentDatabase. Вместо Автоэкзека можно взять что угодно другое, исполняемое при запуске базы, это ничего не меняет. Хотя, возможно, я не понял, что такое OpenCurrentDatabase, и тогда мои извинения. Я почему-то решил, что OpenCurrentDatabase открывает ту же базу, из которой он вызывается.

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

копируешь в текстовый редактор, сохраняешь под именем updater.vbs
и делаешь ярлычек на рабочий стол

Код: 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.
Const SrcPath = "c:\base\Client.adp"   'это исходное имя файла который будет скопирован  
Const DestPath = "c:\base\TIMESHEET\Client$.adp"   'это рабочее имя файла под которым будет запущено приложение 
Const StartupParams = ""  'дополнителные параметры командной строки 


 'Пробуем скопировать исходый файл под рабочим именем 
Set Fso = CreateObject("Scripting.FileSystemObject")
set oShell= WScript.CreateObject("WScript.Shell")
On Error Resume Next
        call Fso.copyfile (SrcPath , DestPath, True)
 If Err.Number =  0  Then
 'Если скопировать получилось значит приложение не было открыто ранее 
	openedbefore =false
 Else
     openedbefore =true
 End If
 err.clear

 'Ищем путь к аксессу XP 
 access10path = oShell.RegRead("HKLM\Software\Microsoft\Office\10.0\Common\InstallRoot\Path")
 If Err.Number <>  0  Then MsgBox "На данном компьютере установлены не все необходимые компоненты (MsAccess 2002-XP) " & vbCrLf & "Обратитесь в службу технической поддержки"
on error goto  0 
 if not openedbefore then
	 'Запускаем файл 
	oShell.Run """" & access10path & "MSACCESS.EXE" & """ " &  DestPath & StartupParams
 else
	 'Если файл загружен то просто максимизировать окно без обновления. 
	Set ACC = GetObject( DestPath)
	ACC.application.docmd.RunCommand  10 
 end if
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633280
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычОй скока мне сейчас отвечать... попробую коротко.

2. Про зацикливание - я говорю только про OpenCurrentDatabase. Вместо Автоэкзека можно взять что угодно другое, исполняемое при запуске базы, это ничего не меняет. Хотя, возможно, я не понял, что такое OpenCurrentDatabase, и тогда мои извинения. Я почему-то решил, что OpenCurrentDatabase открывает ту же базу, из которой он вызывается.


OpenCurrentDatabase открывает файл (mdb), который, после открытия, становится текущей базой данных для того приложения Акцесс, в котором он (файл) открыт.
вот кусок из хелпа.

OpenCurrentDatabase Method
See Also Applies To Example Specifics

You can use the OpenCurrentDatabase method to open an existing Microsoft
Access database (.mdb) as the current database.

expression.OpenCurrentDatabase(filepath, Exclusive, bstrPassword)

expression Required. An expression that returns one of the objects in the Applies To list.

filepath Required String. A string expression that is the name of an existing database file, including the path name and the file name extension. If your network supports it, you can also specify a network path in the following form: \\Server\Share\Folder\Filename

Note If you don't supply the filename extension, .mdb is appended to the filename.

Exclusive Optional Boolean. Specifies whether you want to open the database in exclusive mode. The default value is False, which specifies that the database should be opened in shared mode.

bstrPassword Optional String. The password to open the specified database.

Remarks
You can use this method to open a database from another application that is controlling Microsoft Access through Automation, formerly called OLE Automation. For example, you can use the OpenCurrentDatabase method from Microsoft Excel to open the Northwind.mdb sample database in the Microsoft Access window. Once you have created an instance of Microsoft Access from another application, you must also create a new database or specify a particular database to open. This database opens in the Microsoft Access window.

Note Use the OpenAccessProject method to open an existing Microsoft Access project (.adp) as the current database.

If you have already opened a database and wish to open another database in the Microsoft Access window, you can use the CloseCurrentDatabase method to close the first database before opening another.

Set the Exclusive argument to True to open the database in exclusive mode. If you omit this argument, the database will open in shared mode.

Note Don't confuse the OpenCurrentDatabase method with the ActiveX Data Objects (ADO) Open method or the Data Access Object (DAO) OpenDatabase method. The OpenCurrentDatabase method opens a database in the Microsoft Access window. The ADO Open method returns a Connection object variable, and the DAO OpenDatabase method returns a Database object variable, both of which represent a particular database but don't actually open that database in the Microsoft Access window.

Example
The following example opens a Microsoft Access database from another application through Automation and then opens a form in that database.

You can enter this code in a Visual Basic module in any application that can act as a COM component. For example, you might run the following code from Microsoft Excel, Microsoft Visual Basic, or Microsoft Access.

When the variable pointing to the Application object goes out of scope, the instance of Microsoft Access that it represents closes as well. Therefore, you should declare this variable at the module level.

' Include the following in Declarations section of module.
Dim appAccess As Access.Application

Sub DisplayForm()
' Initialize string to database path.
Const strConPathToSamples = "C:\Program " _
& "Files\Microsoft Office\Office\Samples\"

strDB = strConPathToSamples & "Northwind.mdb"
' Create new instance of Microsoft Access.
Set appAccess = _
CreateObject("Access.Application")
' Open database in Microsoft Access window.
appAccess.OpenCurrentDatabase strConPathToSamples
' Open Orders form.
appAccess.DoCmd.OpenForm "Orders"
End Sub
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633359
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
АлексейКзачем разбираться - вот с комментариями:
Честное слово, спасибо. В этом скрипте есть несколько вещей, которые мне не подходят. Если надо, я могу объяснить подробно, но топик вырастет страниц на 10.

VictoshaOpenCurrentDatabase открывает файл (mdb), который, после открытия, становится текущей базой данных для того приложения Акцесс, в котором он (файл) открыт.
Да, дошло. Я тормоз и серость. :^)
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633377
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ тормоз и серость

вихвам,
этого флага у мене ты вырвешь
:))
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633384
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victosha авторЯ тормоз и серость

вихвам,
этого флага у мене ты вырвешь
:))
Я себе свой сошью. Серого цвета.
...
Рейтинг: 0 / 0
запустить другой mdb (причем на переднем плане экрана), а старый закрыть
    #32633929
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В конечном счете сделан вариант, основанный на предложении paparome.

Код: 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.
Function DoAll()

Dim f As Integer, i As Integer, s As String, e As String
Dim s1 As String, s2 As String
On Error GoTo errDoAll

s = CurrentDb.Name
For i = Len(s) To  1  Step - 1 
    If Mid(s, i,  1 ) = "\" Then
        s = Left(s, i)
        Exit For
    End If
Next

f = FreeFile
Open s & Command For Input As #f
Line Input #f, s1  'файл для обновления и запуска 
Line Input #f, s2  'файл в бэкапе 
Close #f

Kill s1
FileCopy s2, s1
s = SysCmd(acSysCmdAccessDir)
Shell s & Dir(s & "MSaccess*.exe") & " " & s1, vbMaximizedFocus
DoCmd.Quit

Exit Function
errDoAll:
e = Error
If Err =  70  Then e = "Видимо, аппликация запущена. Извольте закрыть ее"
If MsgBox(e & vbCrLf & "Попробовать еще раз?", vbYesNo + vbQuestion) <> vbYes Then DoCmd.Quit
Resume

End Function
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / запустить другой mdb (причем на переднем плане экрана), а старый закрыть
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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