Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Run-time error 9 all'uscita

    Salve ragazzi, ho sviluppato un'applicazione VB6 per la gestione di un magazzino. Sembra vada tutto bene ma quando chiudo l'applicazione, tramite un pulsante che ho messo io, mi parte il messaggio di errore "Run-Time error '9': subscript out of range".

    Il pulsante che consente l'uscita contiene solo il seguente codice:
    Unload Me

    Nella Form_Unload c'è il seguente codice:
    call mobjGlobale.ChiudiConnessione
    objReSetOrientation 'this resets the printer to portrait

    La funzione Chiudi connessione contiene questo codice:
    Public Sub ChiudiConnessione()
    conn.Close
    set conn = Nothing
    End Sub

    Sapete aiutarmi?
    Vi ringrazio in anticipo
    Mirko

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461

    Moderazione

    Il linguaggio va riportato anche nel titolo, come da Regolamento.

    Qui l'ho aggiunto io.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Opsss....mi scuso tanto ma la fretta fa commettere questi errori.

    Per il problema nessuna risposta?
    Considerate che in ambiente sviluppo l'errore non si verifica.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Caravaggio
    Opsss....mi scuso tanto ma la fretta fa commettere questi errori.

    Per il problema nessuna risposta?
    Considerate che in ambiente sviluppo l'errore non si verifica.
    in quale riga genera l'errore?


  5. #5
    Non te lo so dire....il debug non mi genera l'errore.

    In pratica io ho creato il programma poi l'ho messo in un pacchetto di installazione con il tool di Microsoft VB e ho provato ad installarlo. Tutto bene sulla mia macchina.
    Tutto bene anche nelle altre...ma in queste, quando provo a chiudere l'applicazione, mi esce questo maledetto errore. Da cosa può dipendere?

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Caravaggio
    Non te lo so dire....il debug non mi genera l'errore.
    Hai messo nella routine UnLoad un gestore degli errori per poter intercettare eventuali errori?

    Originariamente inviato da Caravaggio
    Da cosa può dipendere?
    Da un sacco di cose. Chi può saperlo...
    Noi di certo no, dato che:
    - non conosciamo niente del tuo progetto.
    - non conosciamo la versione di Windows su cui hai sviluppato, e quale/i installato il programma.

    In ogni caso, prima di distribuire applicazioni a terzi è una best practice fare i dovuti test su macchine virtuali con le varie versioni di Windows 'pulite' su cui si prevede debba essere installata l'applicazione.

    Oggi come oggi è il minimo.



    P.S. Se per tool di Microsoft VB tu intendi il preistorico PDW di VB6, allora anche quello potrebbe essere causa di problemi. Meglio starci distante...

  7. #7
    Ho scoperto dove è il problema. L'errore sparisce se tolgo la seguente riga di caodice:
    - obj.ReSetOrientation
    dove obj è un PageSet.PrinterControl

    in pratica l'avevo messo per riportare l'orientamento della stampante a "verticale" visto che ho un sviluppato un report con DataReport che stampa in un orientamento "orizzontale".

    Me ne sono accorto perchè ho provato a chiamare il report dalle macchine in cui ho installato questo programmino e usciva fuori lo stesso errore.

    Ma ora il problema è un altro: Perchè non mi fa fare le chiamte al report? Ora se tolgo le chiamate al report tutto mi funziona ma avrei necessita di stampare. Sapete cosa dovrei controllare per individuare il problema che non mi fa lanciare il report?

    Faccio notare che sulla macchina dove è installato VB6 tutto funziona. E' nelle altre macchine (dove l'applicazione deve girare in rete) che si presenta il problema.

    Grazie

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Caravaggio
    Ma ora il problema è un altro: Perchè non mi fa fare le chiamte al report? Ora se tolgo le chiamate al report tutto mi funziona ma avrei necessita di stampare. Sapete cosa dovrei controllare per individuare il problema che non mi fa lanciare il report?
    Premetto che non uso il DataReport (preferisco usare tool migliori) ma ci provo:

    Perchè resetti l'ortientamento nel Form_Unload?

    Il DataReport non è un fulmine ed ha i suoi limiti, per cui non ci vedrei niente di strano se per fare questa operazione ci impiegasse un po' di tempo e magari durante l'Unload, quando il form tenta di rilasciare gli oggetti istanziati, l'operazione non è ancora conclusa.

    D'altra parte devi pensare che per accedere al driver della stampante e modificarne la proprietà occorre sempre un po' di tempo; l'operazione non è mai fulminea; oltretutto dipende anche dalla bontà del driver.

    Prova invece a resettare nella routine di stampa 'appena terminata la stampa ' in modo che l'Unload del form vada via liscio.
    Non so darti un'indicazione precisa perchè non ricordo niente del DataReport.

    Oppure potrebbe anche essere d'aiuto usare DoEvents :

    codice:
    Call mobjGlobale.ChiudiConnessione
    objReSetOrientation
    DoEvents
    In breve, mi par di capire che il problema sia più una questione di 'tempi', che un errore di codifica.
    Questo spiega anche perchè in ambiente di progettazione il problema non si verifica, in quanto VB possiede delle strategie interne che entrano in azione per correggere le cose, in particolare quando si chiude un singolo form oppure quando si chiude l'applicazione ovvero si ritorna in progettazione.
    Se da una parte questi meccanismi aiutano lo sviluppatore, dall'altra non lo mettono in condizione di affrontare alcune problematiche che si rivelano solo quando si eseguirà il programma compilato.
    L'uso dissennato dell'istruzione End è un esempio classico.




  9. #9
    Grazie Gibra per la risposta.

    Appurato che il problema è dato dalla comunicazione con il driver della stampante ho provato comunque a a lanciare il report dalle macchine installate in rete. Non c'è niente da fare il report non me lo fa neanche vedere. Ho messo una MsgBox ad ogni passaggio nel codice e ho rilevato che tutto fila liscio fino alla creazione del recordset da passare al DataReport. Poi appena il codice tenta di impostare l'orientamento della pagina in orizzontale scatta l'errore. Per cui neanche lo vedo il report. Ho pensato che in questi computer non ci fosse la PageSet.dll che è necessaria per comunicare con il driver della stampante ma invece è presente nella cartella system32 di windows. A questo punto non so proprio cosa fare.
    Sembra che non ci sia un perchè a questo strano comportamento.....il codice è lo stesso di quello che uso sul pc per sviluppare........la dll c'è....la comunicazione con la stampante dovrebbe farla... ma allora perchè non funziona?
    Ho notato solo che, ora che ci sono le MsgBox ad ogni passaggio nel codice, il messaggio di errore me lo da immediatamente appena premo il pulsante di stampa...mentre prima dovevo aspettare sicuramente più di 30 secondi.

    Qualche aiuto ancora?

  10. #10
    Nessun aiuto? Ma se provassi ad usare Crystal Report eviterei questi problemi oppure potrebbero sempre ricomparire?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.