Newsgroup: it.comp.appl.access
Titolo: Errore 429 su avvio mde da riga vbs

Ho un piccolo file in formato vbs che uso per avviare una procedura 
Access 2013 in formato mde
Se col mouse ci doppio-clicco sopra al file mde, il programma parte 
correttamente
Se tento di avviarlo dal file vbs con l'unica istruzione:
 
Set oApp = GetObject("C:\dir_programma\peppe.mde").Application
 
mi spara fuori "Errore 429"
Ho provato ad inserire nel programma una routine per verificare i 
riferimenti se tutti identificabili, e sembrano tutti a posto
 
Su questo pc, oltre al runtime del 2013 c'e' la versione completa del 
2010 di Office
 
Che possa essere legato alla presenza dell'Office precedente il problema?
Il 2010 e' stato installato come primo in ordine temporale
Poi e' stato installato il runtime del 2013
 
Qualche idea?

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........

Ipotizzo che la variabile [oApp] sia Object...?
 
Hai provato così:
Set oApp = GetObject("C:\dir_programma\peppe.mde")
 
Poi se ti serve l'oggetto Application lo usi ma secondo me conviene così, soprattutto se poi ci sono Più versioni installate di Access... converrebbe aprire con una Shell la Versione EXE di Access volta e poi da li aprire il file MDE...
 
A titolo di es:
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/getobject-function
 
 
e questo ancora più chiaro:
https://www.everythingaccess.com/tutorials.asp?ID=How-to-specify-which-version-of-Access-to-use-for-OLE-automation
 
 
@Alex


In realta' non c'e' una dichiarazione della variabile oApp
Nell'esempio dal quale ho derivato l'istruzione incriminate, non c'era 
niente prima del
 
Set oApp = GetObject("C:\dir_programma\peppe.mde").Application
 
Il problema vero e' che su un paio di pc di sviluppo, un Win8 ed un 
Win10, questo problema non si presenta, mentre su altri si
Per capire chi fosse nel giusto e chi nel torto, ho predisposto una 
macchina virtuale con un Win10 (64bit) vergine, ho installato il runtime 
di Access 2013 (32bit), copiato il file mde, copiato il file vbs e 
provato a doppio-cliccarci sopra
Il malefico 429 salta fuori con precisione svizzera
Quindi l'anomalia e' sui pc sviluppo, dove l'effetto desiderato (di 
avviare il file mde) si ottiene correttamente, e sarebbe utile capire il 
perche'
 
Ho provato ad eseguire lo script anche con VbsEdit che e' uno strumento 
molto carino per debuggare i vbs, ed anche lui manda fuori
 
"Il componente ActiveX non puo' creare l'oggetto: 'GetObject' "
"Code 800A01AD"
 
Detto questo, la domanda resta, perche' il file vbs con le due righe 
sopra non riesce ad avviarmi l'mde usando l'applicazione predefinita per 
quell'estensione di file?


Allora il problema, e' legato alla presenza di Access
Intendo Access ambiente di sviluppo
Sembra che col runtime  il GetObject non riesca a fare il suo lavoro
E quindi la domanda si modifica in:
- come avviare un mde da codice vbs, usando il GetObject, avendo solo il 
runtime di Access installato?
 
Il fatto di impuntarmi sul GetObject e non tentare altre vie deriva 
dalla capacita' del GetObject di restituire un istanza all'mde 
everntualmente gia' in esecuzione, o avviarlo se non in escuzione
Ed il fatto di evitare istanza multiple per me e' essenziale in questo caso
 
 


Hai provato a gestire l'errore 429, ed usare in quel caso il CREATEOBJECT...?
Oppure come già detto aprire via Shell Access.Exe e con GetObject recuperarne l'istanza...?
 
@Alex


Si, gia' provato col CreateObject nel caso di errori e da' esattamente 
lo stesso problema
Quello che non riesco a capire e' che se e' gia' presente in esecuzione 
l'mde incriminato, le GetObject funziona normalmente, anche col solo 
runtime di Access
E' come se funzionasse a meta'
Ora provo via shell
 
 
 


A chi servisse, ho anteposto un bel
 
If Err.Number = 429 Then
    CreateObject("WScript.Shell").Run "C:\MSACCESS.EXE C:\peppe.mde", 1
    WScript.Sleep 1000
    End If
 
al  GetObject("C:\peppe.mde").Application  ed ora fila tutto liscio 
anche nelle postazioni col solo runtime di Access, nelle quali l'mde non 
sia ancora stato caricato
Resta la curiosita' di capire come mai il GetObject, solo col runtime, 
se l'mde e' gia' in esecuzione non da' errore, mentre da' errore se 
l'mde non e' ancora stato caricato

A cosa serve lanciare WSO...?
A nulla.
 
Usa la Shell nativa di Access con la stessa sintassi.
 
@Alex

Il 22/11/2019 18:08, @Alex ha scritto:

Non capisco il tuo consiglio
Cosa avresti messo tu?


Shell "C:\MSACCESS.EXE C:\peppe.mde", 1 
 
Ti faccio in ogni caso notare che usando la Shell di WSH, mettere lo SLEEP è assolutamente inutile, basterebbe mettere a TRUE il 3° Parametro della chiamata che rende SINCRONA l'esecuzione.
 
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "C:\MSACCESS.EXE C:\peppe.mde",1,True
 
Saluti
@Alex
 


Stiamo parlando di un file vbs
Non mi risulta si possa usare una riga di questo tipo



Si scusa mi era sfuggita la questione VBS... allora valida solo l'altro aspetto...
 
Ciao
@Alex


Mettere a True il terzo parametro, non consente al codice del vbs di 
proseguire nel suo flusso, finche l'mde avviato viene chiuso
Mentre il codice deve avviare l'mde (o restituirne l'istanza se gia' in 
esecuzione)  e proseguire perche' ci sono altre istruzioni dopo che 
devono essere eseguite (invio comandi dal vbs verso l'mde caricato)
Ciao