Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247

    Accesso a DB Access che potrebbe essere protetto da password

    Salve,

    ho realizzato un programma in Delphi che accede attraverso ADO a dei dati custoditi in un DB Access.

    Il problema è che questo DB access potrebbe (o potrebbe non) essere protetto da password.

    Quando il programma prova ad accedere a un database protetto, viene lanciata un'eccezione del tipo EOleException, e non EWrongPassword (magari esistesse! ): quindi non c'è modo di distinguere un'eccezione qualsiasi da quella per password errata.

    Come faccio a mostrare all'utente la form per l'inserimento di una password solo se è il database è effettivamente protetto?

    Grazie...

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Ah, dimenticavo... Accedo al DB Access mediante TADOQuery, in questo modo:

    codice:
        DBConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
        DbCorrente +
        ';Mode=Share Deny Read|Share Deny Write;Persist Security Info=False';
    
        EffettuaConnessione(DBConnectionString);
    codice:
    procedure TFormPrincipale.EffettuaConnessione(DBConnectionString : string);
    begin
            if ConnessioneEffettuata = False then
            begin
              try
                DefaultADOQuery := TADOQuery.Create(self);
                DefaultADOQuery.ConnectionString := DBConnectionString;
              finally
                ConnessioneEffettuata := True;
              end;
            end;
    end;

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Hai provato ad esaminare la proprietà ErrorCode dell'eccezione EOleException che viene generata? In genere, contiene informazioni relative all'errore specifico, mentre le proprietà Source e HelpFile restituiscono invece la sorgente dell'errore (l'applicazione) e il riferimento per la visualizzazione dell'argomento della Guida specifico (usato meno frequentemente).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    codice:
     
           except
              on e: Exception do
                begin
                      { messaggio d'errore personalizzato }
                end;
           end;
    Perdonami, non capisco... La variabile "e" non ha una proprietà di nome ErrorCode.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Ho trovato una soluzione! Il codice dell'errore è -2147217843.

    Ho provato a generare altri errori (ho danneggiato il database access, l'ho messo in sola lettura, ecc...) e producono altri codici d'errore.

    codice:
          except
              on e: EOleException do
                begin
                        if e.ErrorCode = -2147217843 then
                          begin
                            { E' richiesta una password o la password inserita è errata,
                               mostra form per il login. }
                          end
                        else
                          begin
                            { Altro errore, forse database danneggiato...
                               mostra messaggio di errore generico. }
                          end;
                end;
          end;
    Grazie alka, sei una persona generosa e sicuramente un buon programmatore.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Originariamente inviato da firefox88
    Perdonami, non capisco... La variabile "e" non ha una proprietà di nome ErrorCode.
    La variabile "e", in questo caso, è di tipo Exception, è generico e quindi non contiene quella proprietà.

    Devi intercettare il tipo di eccezione specifico o eseguire un "cast".

    codice:
    on e: EOleException do
    begin
      // ...
    end;
    oppure

    codice:
    on e: Exception do
    begin
      if (e is EOleException) then
      begin
        EOleException(e).ErrorCode ...
      end
    end;
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Originariamente inviato da firefox88
    Ho trovato una soluzione! Il codice dell'errore è -2147217843.
    Ho provato a generare altri errori (ho danneggiato il database access, l'ho messo in sola lettura, ecc...) e producono altri codici d'errore.
    Cerca in rete... probabilmente esiste una "reference" con tutti i codici di errore ADO.

    E' possibile che nello stesso Delphi siano definiti come costanti (non uso abitualmente ADO per l'accesso ai dati, soprattutto quando si tratta di Delphi).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Già risolto (vedi mio messaggio precedente).

    Ancora grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Originariamente inviato da alka
    Cerca in rete... probabilmente esiste una "reference" con tutti i codici di errore ADO.
    Cercherò... Comunque quante poche informazioni ci sono in giro... Sono sicuro che questa discussione sarà utile anche a qualcun altro.

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