Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    165

    [vb6] Intercettare Errori Sql Con Vb6

    Ciao a tutti, Vi ringrazio anticipatamente perche so che saprete aiutarmi.

    Problema:

    Vorrei intercettare gli errori database(sql server 2005) con vb6 dando un mio messaggio di errore e quindi fare in modo che non appaia quello standard di database tipo:

    "Errore di run-time '3021'


    come posso fare?


  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Inserisci un gestore di errori
    Per inciso, io lo uso in 'quasi' tutte le routine.
    E raccomando di farlo a chiunque.

    Esempio:

    codice:
    Public Function EseguiQualcosa(parametri) As Long
        Dim ..... 'dichiarazione variabili
    
        On Error Goto ERR_HANDLER
    
         '  ... codice da eseguire...
    
        On Error Goto 0
        Exit Function
    
    ERR_HANDLER:
    
        MsgBox Err.Number & vbCrlf & Err.Description & vbcrLf & "nella procedura EseguiQualcosa del modulo Form1"
        ' oppure testi il numero di errore
        Select Case Err.Number 
        Case -12345678
            MsgBox "Errore ...."
        Case -555
            MsgBox "Errore ...."
        End Select
    
    End Function

  3. #3
    l'ado.connection espone una collezione errors su cui puoi iterare per ricavare i dettagli
    degli errori occorsi;
    ...ovviamente devi intercettare l'errore con on error

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    VB6 non offre molte alternative. L'istruzione per intercettare gli errori è On Error GoTo <label>.
    <label> è un'etichetta che in genere viene posta al temine della Sub o della Function e che segna l'inizio delle istruzioni da eseguire quando si verifica un errore.
    In genere è buona norma scrivere una routine centralizzata per la gestione degli errori, nella quale è possibile personalizzare i messaggi in base al codice di errore e intraprendere la azioni appropriate.
    Poiché è sempre utile sapere in quale parte del programma l'errore ha avuto origine, è consuetudine richiamare la suddetta routine generalizzata passandole un paramentro che in qualche modo identifichi appunto l'origine.

    Esempio:
    codice:
    Private Sub Esempio
        Const COD_ERR = "Esempio"
        On Error Goto Errore
        ....
        ....
        Exit Sub
    
    Errore:
        GestioneErrori COD_ERR
    Exit Sub
    
    Private Sub GestioneErrori (sCodErr As String)
    ' qui si hanno a disposizione le seguenti utili informazioni:
    ' Err.Number
    ' Err.Description
    ' sCodErr, che ci indica dove è avvenuto l'errore
    ....
    ....
    End Sub

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    165
    Grazie mille a tutti....davvero

    appena avrò tempo proverò...




  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    165


    Ciao a tutti,

    Ho provato e però non sono riuscito.

    Premetto che non sono molto esperto.

    In particolare non so dove mettere le parti di codice da voi proposte.
    Non è che avreste un esempio completo???!!


    Grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    Originariamente inviato da gioviskius
    In particolare non so dove mettere le parti di codice da voi proposte.
    Immagino che il tuo programma sia composto, per la parte codice, da Sub e/o da Function.
    Ogni Sub/Function in cui vuoi gestire le condizioni di errore, al limite tutte, deve essere strutturata come ti è stato indicato.
    L'esempio di gibra gestisce l'errore al termine di ogni Sub/Function, quello che ti ho postato io rimanda ad una routine centralizzata che, come dice il suo nome, lo fa in un punto unico.

    Però, la tua domanda (non so dove mettere le parti di codice), mi porta a pensare che dovresti prima acquisire delle nozioni di base, magari leggendo qualche buon libro.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    165
    grazie mille per l aiuto,

    è vero ed hai perfettamente ragione..
    lezioni di vb6 l ho fatte solo a scuola e dopo ho programmato in un altro linguaggio.

    Però la domanda specifica era questa:

    io eseguo la connessione al db;
    faccio la select;
    dopo di che faccio la cn.execute(sSql) --> eseguo la stringa sql
    dopo questa quindi dovrei richiamare la routine da te suggerita??

    grazie ancora

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da gioviskius

    Però la domanda specifica era questa:

    io eseguo la connessione al db;
    faccio la select;
    dopo di che faccio la cn.execute(sSql) --> eseguo la stringa sql
    dopo questa quindi dovrei richiamare la routine da te suggerita??
    No, o per meglio dire, quella ci vuole per forza (come ti ho indicato anche io nel mio precedente post) ma per conoscere lo specifico errore restituito dall'oggetto ADODB.Connection che usi, nel tuo caso CN, devi fare come ti ha indicato sspintux
    cioè analizzare la collection Errors dell'oggetto ADODB.Connection, ad esempio

    codice:
    Debug.Print cn.Errors(0)
    Debug.Print cn.Errors(1)
    Debug.Print cn.Errors(2)
    ' ecc.
    Considera che non sai a priori QUANTI errori contiene la collection, quindi dovrai fare il classico ciclo...

    Di norma si crea una routine apposita per elencare tutti gli errori e relative proprietà, di cui le due più interessanti sono Description e Number:
    codice:
    dim s As String
    s = ""
    s = "Errori della connessione: " & vbcrlf 
    s = s & CN.Errors(0).Number & " " &CN.Errors(0).Description  & vbcrlf
    s = s & CN.Errors(1).Number & " " &CN.Errors(1).Description  & vbcrlf 
    Debug.Print s

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    165
    scusami se sono rompi ba***, me ne rendo conto.
    e anche che dovrei leggere qualche libro in merito..

    In sostanza io vorrei gestire l'errore run-time '3021' del db, che si ha quando si tenta di fare una select con una where e quest ultima si riferisce ad un record che non esiste.

    Per esempio:

    la mia tabella utenti ha come valori all interno:
    luca
    Paolo

    io faccio la select "WHERE Nome = Angelo" e logicamente il sql server 2005 si incavola.

    So che quello che ti sto chiedendo è stupido ma mi servirebbe, dopo aver fatto questo il programma è terminato.


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 © 2026 vBulletin Solutions, Inc. All rights reserved.