PDA

Visualizza la versione completa : Connessione a database in Delphi


FabioMitic
20-10-2004, 14:59
Ciao a tutti!
Avrei un piccolo problemino in Delphi...

Ho un'applicazione che si attacca a SQL Server, ma l'applicazione deve girare anche quando non c'è la rete!

Io per connettere il database uso il componente TDataBase, e faccio un'istruzione "nomedatabase.open", ma quando la rete è giù, la open si "impianta" e mi esce un'errore!

Come posso gestire questo errore per farsi che non esca all'utente?

Spero che qualcuno possa aiutarmi.
Grazie!!!

Fabio Mitic

alka
20-10-2004, 16:30
Ti risponderei in modo molto semplice: non chiamare il metodo Open. :)

Non ti consiglierei di ingabbiare la chiamata al metodo Open all'interno di un costrutto try...except altrimenti non ti verrebbero più notificate le eccezioni "vere" e non previste che si possono verificare in condizioni di funzionamento normale.

E' ovvio che se il tuo programma prevede operazioni le quali presuppongono una connessione attiva verso il database, ti troveresti a dover gestire una marea di eccezioni.
In tal caso, adotta un metodo alternativo per la "modalità offline" del tuo programma.

Ciao! :ciauz:

FabioMitic
20-10-2004, 16:46
Io ho previsto una modalità offline per il mio programma, ma il mio problema è che devo sapere quando la rete è su!

Cioè, la open potrei farla solo quando la rete è su, però devo saperlo quando la rete è su!

alka
20-10-2004, 17:11
In tal caso, puoi racchiudere la chiamata al metodo Open all'interno di un blocco try...except; nella parte except...end inserisci codice di gestione dell'eventuale errore che si verifica.

Fai una prova sperimentale e controlla quale classe (tipo) di eccezione viene generata quando la rete è offline; se intercetti un simile errore, o più in generale non riesci ad aprire il tuo database, allora il tuo programma funzionerà in modalità offline (magari avverti opportunamente con un messaggio).

Ciao! :ciauz:

FabioMitic
20-10-2004, 17:40
Purtroppo ho provato, ma la open non riesce a gestirmela come eccezione... è questo che non capisco!

Io ho fatto un costrutto tipo questo:

try
database.open;
trovato = True;
expect
trovato = False;
end;

dove database è il nome del database e trovato è una variabile booleana.
Se la rete è giù, quando passa dall'istruzione open si impianta comunque, cioè non passa nell'expect....
Sono in braghe di tela se non funziona così!

Grazie comunque

alka
20-10-2004, 17:44
Originariamente inviato da FabioMitic
Se la rete è giù, quando passa dall'istruzione open si impianta comunque, cioè non passa nell'expect....
Sono in braghe di tela se non funziona così!

Questo perchè - molto probabilmente - stai eseguendo il debug all'interno di Delphi (che si ferma automaticamente alle eccezioni), ma il file eseguibile si comporta correttamente.

Se vuoi verificare il comportamento in Delphi, togli la spunta Stop on Delphi exceptions dalla finestra di dialogo Debugger Options.

Ciao! :ciauz:

FabioMitic
20-10-2004, 17:49
scusa ma mi sono dimenticato di dirti che ho
già provato ad eseguire l'exe, senza debug, ma niente da fare!

Tenta di aprire il database, ma quando non ci riesci butta fuori un errore di connessione, con scritto che praticamente non riesce a connettere l'odbc (mi collego su sql server con l'odbc).

alka
20-10-2004, 17:52
Tutto ciò mi sembra molto strano... :master:

Hai qualche componente che interviene nella gestione delle eccezioni, ad esempio ApplicationEvents?

Loading