Newsgroup: it.comp.appl.access
Titolo: errore runtime all'avvio, senza spiegazione

tradotto dall'inglese: l'esecuzione è stata interrotta a causa di un 
errore runtime
 
capita subito all'apertura, visualizza mezzo menu, nessun codice di 
errore, nessuna spiegazione
 
sul computer c'è office 2021 + runtime Office 2019/365 a 64bit
c'è il driver ODBC SQL versione 18 a 64 bit
 
su versioni più datate talvota funziona talaltra no
 
ci sono anche altre due applicazioni access che invece partono senza 
dire nè a nè ba, ergo il problema è nel file access
 
all'inizio di uno dei due che funzionano c'è questa roba, che manca 
nell'altro e in quello che non funziona:
 
Option Compare Database
 
#If VBA7 Then
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias 
"ShellExecuteA" _
    (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As 
String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, ByVal 
nShowCmd As Long) As Long
    Private Declare PtrSafe Function GetDesktopWindow Lib "USER32" () 
As Long
#Else
Private Declare Function GetDesktopWindow Lib "USER32" () As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias 
"ShellExecuteA" _
    (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As 
String, _
    ByVal lpParameters As String, ByVal lpDirectory As String, ByVal 
nShowCmd As Long) As Long
#End If
 
(nota: la parte dopo #else è in rosso, come se fosse un errore)
 
 
ho tolto la 2019/365 e ho provato a mettere la 2016: non si installa, 
dice che c'è un conflitto di tipo di software, uno è click-to-run, 
l'altro non si capisce
 
ho provato a mettere la 2013: si installa ma poi si comporta come la 
2019
 
 
nel log eventi di windows non trovo nulla
 
 
che si fa se il sistema non dice di che errore si tratta?
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Non ho ben capito il problema ma mi saltano all'occhio le dichiarazione API... sei sicuro di aver scritto correttamente il codice Condizionato...?
Da quanto capisco stai usando la versione 64Bit... e quelle API sono per il 32...
 
Esempio, ShellExecute e GetDesktopWindow, secondom e si usano così:
 
#If VBA7 Then 
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
            ByVal hWnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
            ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
    Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As LongPtr
 
#Else
   Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
                                          ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
                                          ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
#End If
 
Con il 64Bit serve capire se il VarType Long richiede la modifica al LongPtr ecc....
Questo molto probabilmente è una possibile causa del ROSSO...
 
Chiaramente se poi usi delle Dichiarazioni nelle Funzioni o Sub, dovrai anche li condizionare il Type...
 
Es:
Public Function EseguiCodice()
#If VBA7 Then 
Dim dskHwnd As LongPtr
#Else
Dim dskHwnd As Long
#End If
dskHwnd=GetDesktopWindow ()
.....
End Function
 
Vedi tu poi... 
Saluti
@Alex

 (nota: la parte dopo #else è in rosso, come se fosse un errore)
 
Non so come sia finito il codice qui sopra in questo post :(
 
oggi lo ho riguardato, c'è questo:
 
 
#If VBA7 And Win64 Then
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" _
  Alias "ShellExecuteA" (ByVal hWnd As Long, _
  ByVal lpOperation As String, ByVal lpFile As String, _
  ByVal lpParameters As String, ByVal lpDirectory As String, _
  ByVal nShowCmd As Long) As Long
#Else
Private Declare Function ShellExecute Lib "shell32.dll" _
  Alias "ShellExecuteA" (ByVal hWnd As Long, _
  ByVal lpOperation As String, ByVal lpFile As String, _
  ByVal lpParameters As String, ByVal lpDirectory As String, _
  ByVal nShowCmd As Long) As Long
#End If
 
 
(la parte #Else è sempre in rosso)
 
c'è una mia nota del 14.04.2022 che dice che ho sostituito quella 
vecchia (adesso sono righe REM) in quanto avevo problemi sul server
 
effettivamente sul server funziona, nulla da dire, non va invece quando 
la "installo" su alcuni pc
 
intando grazie per la dritta, verifico bene il codice


Hai provato a COPIA/INCOLLARE il mio suggerimento...?
Come ti ho provato a spiegare, quel codice NON va bene...è errato, ma non comprendo se hai capito bene...
 
@Alex 

 comprendo se hai capito bene...
 
eccomi, un po' in ritardo: ho provato: esce sempre un errore di runtime 
non specificato (non c'è traccia nemmeno nel registro eventi) per cui 
non so che pesci pigliare


 che si fa se il sistema non dice di che errore si tratta?
 
L'errore generico senza spiegazione è normale nel Runtime se manca 
un'adeguata gestione degli errori. Per questo motivo, c'è il vecchio 
consiglio di utilizzare una gestione degli errori eccessiva in 
un'applicazione che deve funzionare con il runtime.
 
Cosa che ho fatto nei casi in cui non è stato fatto:
 
1. Fornire all'applicazione una gestione degli errori che includa 
messaggi significativi in punti "sospetti". Nel tuo caso, tutto ciò che 
viene eseguito all'avvio.
 
Se questo non è d'aiuto:
 
2. Ho commentato ampie sezioni di codice e le ho testate col Runtime. A 
seconda del risultato, ho esteso il commento o riattivato parte del 
codice commentato e l'ho testato finché non ho trovato il punto debole.
 
3. Se non è servito a nulla, ho sostituito il runtime con la versione 
completa alcune volte. Se l'errore si verificava comunque, ho potuto 
eseguire il debug. Poi ho tolto di nuovo la versione completa e ho 
rimesso il runtime.
 
-- 
Ciao
Karl
*********
Access Info: 
https://AccessForever.org
 
Access News: 
https://youtu.be/aKqZX4eE5NA
 
Access DevCon: 
https://www.donkarl.com/devcon
 
Access FAQ: 
https://www.donkarl.com/it
 

 all'avvio.
 
nel codice che viene eseguito On Load della maschera Menu, che è quella 
impostata nelle opzioni, ho messo questo, copiato da un esempio sul 
web:
 
Err_Comando_Click:
strMsg = "An unexpected situation arose in your program." & vbCrLf & _
  "Please write down the following details:" & vbCrLf & vbCrLf & _
  "Calling Proc: " & strCallingProc & vbCrLf & _
  "Error Number " & lngErrNumber & vbCrLf & strErrDescription & vbCrLf 
& vbCrLf & _
  "Unable to record because Error " & Err.Number & vbCrLf & 
Err.Description
MsgBox strMsg, vbCritical, "LogError()"
 
 
 
le prime istruzioni sono:
 
Private Sub Form_Load()
On Error GoTo Err_Comando_Click
 
 
la modifica qui sopra non ha fornito aiuto in quanto l'errore si 
manifesta subito dopo aver mostrato la maschera, però... (suspance)
 
 
 
fecendo molta attenzione a quello che succede ho notato che prima di 
mostrare il menu iniziale (e piantarsi subito) c'è un messaggio a 
video, in una finestrella piccolina, che scompare in un batter d'occhio
 
ho avviato il programma almeno 20 volte prima di riuscire a mettere a 
fuoco quello che c'era scritto: Missing c:\windows\system\qualcosa.dll
 
nella cartella della applicazione access ci sono una serie di DLL e OCX 
che non ho mai toccato, li aveva messi lo sviluppatore nel lontano 1998 
e io mi son sempre guardato bene dallo spostarli
 
ACEDAO.DLL
comdlg32.dll
dynapdf.dll
msadox.dll
StrStorage.dll
comdlg32.OCX
SNAPVIEW.OCX
 
li ho copiati in c:\windows\system (come amministratore) ed oplà, 
errore sparito, programma avviato, elaborazione effettuata, risultato 
ottenuto
 
dall'alto dei cieli mi son giunte voci...
https://i.imgur.com/Arla1jE.jpeg
 
 
 
ok, prossimo passo provare il trucco anche su altre installazioni
