Problemi di runtime con pacchetto pubblicato

Anonimo
2017-11-27T21:18:22+00:00

Ho creato un pacchetto da un database access utilizzando il software SSE. Sono andato a testarlo su di una macchina virtuale su cui avevo preventivamente installato il runtime di access 2013 (versione di access con cui ho realizzato il DB) per vedere se tutto era a posto. L'installazione dell'eseguibile è andata bene, ho lanciato il programma e si è aperto con il suo desktop senza problemi. Il programma richiede di effettuare un login:

si apre la maschera qui sopra in cui viene scelto, fra le voci già presenti, l'operatore con cui loggarsi. Quando esco da questo campo per portarmi al successivo dove inserire la password necessaria compare il popup di "errore runtime" e mi si chiude l'applicazione.

Preciso che all'uscita del campo operatore è prevista l'esecuzione della seguente sub :

Private Sub Operat_AfterUpdate()

Dim rstOpe As New ADODB.Recordset

rstOpe.Open "TOperatori", CurrentProject.Connection, adOpenForwardOnly

Do Until rstOpe.EOF

If rstOpe!Utente = Operat Then

chk1 = rstOpe!Sigla

chk2 = rstOpe!Password

pw.SetFocus

Exit Sub

Else

rstOpe.MoveNext

End If

Loop

rstOpe.Close

Set rstOpe = Nothing

End Sub

Qualcuno ha idea del perchè di quest'errore? Considerate che io sono un autodidatta che sta cercando di imparare come si fa... Grazie anticipatamente per ogni suggerimento che potete darmi.

Roberto Pisoni

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

7 risposte

Ordina per: Più utili
  1. Anonimo
    2017-11-29T23:03:25+00:00

    Mi spiace per Alessandra Salvaggio, evidentemente non è così preparata nello scrivere codice VBA, sia per il modo in cui gestisce il recordset scorrendolo a da codice senza motivo, sia per l'exit sub senza chiudere il recordset.

    Comunque hai sostituito il codice con quello che ti ho suggerito?

    Quando lo fai ti segnalerà un codice errore e una descrizione che aiuteranno nel capire cosa non funziona.

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-11-29T20:39:09+00:00

    prima di tutto grazie 1000 a tutti e tre voi che mi avete dato prontamente un interessamento. Allora, andiamo con ordine:

    Sandro mi domanda: Testando la stessa routine nel db originale tutto funziona?

    si, funziona perfettamente

    Altra domanda di Sandro: Cosa rappresentano chk1 e chk2, sono variabili, controlli...?

    si tratta di due campi nascosti che, a password controllata e approvata, creeranno il nuovo record di login nella tabella TLog.

    Sandro mi fa pure notare che "Nelle routines, quasi tutte, per non dire tutte, è bene implementare sempre una gestione errore, a maggior ragione se poi su usa il Runtime."

    Hai perfettamente ragione solo che io, come tutti quelli alle prime armi, ho sempre premura...

    Davide mi dice di non mettere l'Exit Sub nel loop...

    Copiato paro paro dal libro "Access 2010 programmazione VBA di Alessandra Salvaggio.

    Per terminare e soddisfare l'altra richiesta di Sandro circa quello che sto cercando di ottenere...

    Ho creato questo database con Access 2013 per un amico di un'associazione senza scopo di lucro con cui dovrebbero gestire le vendite di oggettistica relativa al loro scopo associativo con emissione di ricevute per gli incassi, una stringatissima contabilità di magazzino e un report statistico delle vendite effettuate da ciascun associato. La maschera iniziale di cui stiamo parlando qui è quella di login nel programma e conta di default solo due possibili operatori: Admin Admin o Utente Generico. Loggandosi come Admin Admin si rende accessibile un menu da cui è possibile inserire o modificare addetti, prodotti, listini, causale, ecc nonché vedere a video o stampare elenchi, statistiche, giagenze ecc. mentre loggandoci come Utente Generico viene disponibile un unico grosso pulsantone in centro al desktop del db che apre la maschera di inserimento delle vendite e la relativa stampa delle stesse.

    Questo è quanto.

    Vi ringrazio già da adesso per qualunque ulteriore aiuto che potrete darmi.

    Ciao Roberto

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-11-27T23:36:06+00:00

    Oltre a quanto ti hanno già detto gli altri, il tuo codice è inefficiente e impreciso e questo lo può rendere imprevedibile.

    Inoltre contiene un errore, l'Exit Sub buttato nel loop esce dalla sub senza rilasciare il recordset, che invece è sempre meglio rilasciare esplicitamente.

    Prova a scrivere il codice in modo diverso:

    Private Sub Operat_AfterUpdate() Dim rstOpe As New ADODB.Recordset

    Dim chk1 As ...

    Dim chk2 As ... (a meno che questi non siano controlli della maschera ,nel qual caso è meglio anteporre Me. quando li usi)

    On Error Goto Errore

    rstOpe.Open "SELECT * FROM TOperatori WHERE Utente='" & Me.Operat &"'", CurrentProject.Connection, adOpenForwardOnly

    If not rstOpe.EOF Then

    chk1 = rstOpe!Sigla

    chk2 = rstOpe!Password

    pw.SetFocus

    End If

    rstOpe.Close

    Set rstOpe = Nothing

    Exit Sub

    Errore:

    MsgBox Err.Number & ": "& Err.Description

    End Sub

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-11-27T21:44:27+00:00

    ciao Roberto,

    qualche domanda e considerazione.

    Testando la stessa routine nel db originale tutto funziona?

    Cosa rappresentano chk1 e chk2, sono variabili, controlli...?

    Se il database è Jet/Ace è bene appoggiarsi a Dao e non ad Ado, in ogni caso scorrere un recordset in questo caso mi sembra troppo...

    Ma se ci spieghi per bene il tutto e quale è la tua intenzione magari ti sui può indirizzare meglio.

    Nelle routines, quasi tutte, per non dire tutte, è bene implementare sempre una gestione errore, a maggior ragione se poi su usa il Runtime.

    L'evento che stai scatenando è dopo aggiornamento e non su uscita sono due cose diverse.

    [...]

    Qualcuno ha idea del perchè di quest'errore? Considerate che io sono un autodidatta che sta cercando di imparare come si fa... Grazie anticipatamente per ogni suggerimento che potete darmi.

    [...]

    tranqui si parte tutti  da zero.

    Attendiamo news per il passo successivo.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-11-27T21:28:00+00:00

    Salve,

    la prima regola se lavori col Runtime è di avere la gestione di errore in ogni procedura. Altrimenti ricevi solo questo errore generico che non specifica l'errore vero e poi il Runtime sempre chiude l'applicazione.

    La risposta è stata utile?

    0 commenti Nessun commento