Discussione:
errore runtime all'avvio, senza spiegazione
(troppo vecchio per rispondere)
Ammammata
2023-12-14 16:19:23 UTC
Permalink
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 ] ...........
@Alex
2023-12-15 09:40:44 UTC
Permalink
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
Ammammata
2023-12-18 13:14:21 UTC
Permalink
Post by Ammammata
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)
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
--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........
@Alex
2023-12-19 06:52:24 UTC
Permalink
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
Ammammata
2024-01-17 09:58:44 UTC
Permalink
Post by @Alex
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...
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
--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........
Karl Donaubauer
2024-01-17 12:23:41 UTC
Permalink
Salve,
Post by Ammammata
...
#If VBA7 Then
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" _
...
#Else
Private Declare Function GetDesktopWindow Lib "USER32" () As Long
...
#End If
(nota: la parte dopo #else è in rosso, come se fosse un errore)
Questo è normale nella compilazione condizionale. La parte di codice non
utilizzabile è rossa, ma non ha importanza perché non viene eseguita.
Post by Ammammata
...
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:

Access DevCon: https://www.donkarl.com/devcon
Access FAQ: https://www.donkarl.com/it
Ammammata
2024-01-17 13:49:39 UTC
Permalink
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.
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...
Loading Image...


ok, prossimo passo provare il trucco anche su altre installazioni
--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........
Continua a leggere su narkive:
Loading...