Newsgroup: it.comp.appl.access
Titolo: Verifica anomalia connessione odbc

Ecco un'altro problema , con tabelle collegate tramite odbc , ho una
maschera che al Time ricalcola dei dati (variano in base al tempo) ,
ora mi capita ogni tanto che il server possa essere riavviato o
altro , quindi ovviamente perdo la connessione , messaggio di errore e
il sistema si blocca.Ora la mia domanda e questa , esiste un route o
qualcosa che al time prima di lanciare tutte le funzioni controlla che
sia in linea col server ?


Basta che al Timer invece di "FARE DIRETTAMENTE" prima controlli...
Private Sub VerificaSQL()  As string
        Dim contrSQL As String
        contrSQL = DLookup("[TuoCampoID]", "[TuaTabellaODBC]")
        If contrSQL = "" Then
            'Errore : ODBC disconesso
            VerificaSQL = "OK"
        Else
            'ODBC connesso regolarmente
            VerificaSQL = "NO"
        End If
End Sub
Sul timer dirai :
if VerificaSQL="OK" then
...fai quel che devi...
Else : End If


Grazie per la risposta ma mi da un'nomalia
quando scrivo Private Sub VerificaSQL()  As string si colora di rosso
e mi dice che e prevista al fine istruzione


Le sub al contrario delle function non prevedono ritorno e quindi l' As 
String non va messa. Se devi avere un ritorno, quindi, non puo' essere 
una sub ma deve essere una function
-- 
ac (x=y-1)

 ha scritto nel messaggio 
news:a9b6b37c-f8ae-480f...@g7g2000vbl.googlegroups.com...


------------
Si scusa, refuso da neurone in palla... :D
non è Private Sub, ma Private Function
;) 

 ha scritto nel messaggionews:a9b6b37c-f8ae-480f...@g7g2000vbl.googlegroups.com...

Grazie per la risposta ma non funge...;(
mi da errore 3146 , impossibile collegarsi a informix odbc ect ect
ho provato la funzione , per simulare l'anomalia ho disattivato la
scheda di rete e per magia il solito errore
Credo che la sub debba testare il dns attuale , se lo trova attivo
(verifica=ok) allora procede , altrimenti stoppa.


Deve funzionare... Tu stai interrogando la tab con quella function...
Niente altro... Se la trova risponde altrimenti no... Fa cosi,
Metti un :
On error resume NeXT


ora ci provo anche se ho seguito l'idea del ping e devo dire che
funziona , anche se mi crea un'anomalia
ora riprovo con On error resume NeXT
poi magari posto cio che ho fatto e vediamo se secondo te e piu
funzionale
intanto grazie ancora


Nulla da errore
If VerificaSQL = "OK" Then
docmd.runmacro "miamacro"
il problema e qui
se la connessione si interrompe apre la finestra di dialogo
impossibile eseguire la macro con l'errore 3146


il problema e che lui perde la connessione e poi per un lasto di tempo
non la ritrova quindi dovrei fare una sorta di relink table oppure
altro


Il problema é la funzione o la macro che lanci?


Allora , quando perdo la connessione , e poi la ritrova lancia
immediatamente la macro come da comando , nella macro il primo comando
e una query passthrough (set isolation to dirty read) ora non so il
problema dove lo crea ma mi dice impossibile lanciare la macro , dando
l'errore 3146


Rettifico , ho appena simulato l'errore senza lanciare nessun
comando ,
se non trova la connessione mi dice:
errore run-time 3146
odbc:chiamata non riuscita
[informix][informix odbc driver][informix]system error occurred in
netword function.

 netword function.
perfetto... e io per questo ti dicevo di mettere la riga :
On Error Resume Next...
in maniera tale che "SE" incontra l'errore, procede cmq, e ti
valorizza la variabile Funzione a "DISCONNESSO", in maniera tale da
dirti "Hey amico, guarda che la connessione NUN CE STA!!!"
Ripropongo il codice riveduto e corretto :
Private Function VerificaSQL() As string
On Error Resume Next :
  Dim contrSQL As String
  contrSQL = DLookup("[TuoCampoID]", "[TuaTabellaODBC]",
"TuoCampo=TuoCriterio")
    'Controllo "SE" la variabile è stata valorizzata, ovvero se il
Dlookup ha funzionato e quindi è connessa la tab odbc
    If contrSQL = "" Then
      'Errore : ODBC disconesso
      VerificaSQL = "DISCONNESSO"
    Else
      'ODBC connesso regolarmente
      VerificaSQL = "CONNESSO"
    End If
End Function
Sul timer dirai :
If VerificaSQL="CONNESSO" then
----> Lanci la tua Macro
Else : End If
----
mi pare ovvio che se la function risulta "CONNESSO", e le attività
della MACRO buttano giù la connessione nel mentre dell'esecuzione
della stessa, ci son pochi ca***i, non la intercetti la cosa!
scusa ma perchè non usi il debug con un punto di interruzione e
verifichi passo passo n'do sta il problema?


Grazie per la pazienza , il codice lo avevo modificato con il tuo
suggerimento per l'errore, il problema che man mano riscontro e
questo , ti spiego passo passo come cerco di simulare l'errore e dove
trovo l'intoppo
il codice funziona bene e fin qui non ci piove , poi per simularlo o
simulare un'anomalia , disattivo la mia scheda di rete , in modi da
far perdere la connessione , e il sistema ok va avanti , il problema
iniza quando riattivo la mia scheda di rete( parlo della scheda di
rete come simulazione non e che sto facendo tutto questo macello
perche mi piace attivare e disattivare la scheda di rete ;)) , quando
e attivata ( o comq ritrova la connessione ) il db e aperto e quindi
le tabelle risultano non connesse.
Domanda se faccio fare un relink risolvo il problema?
oppure le cancello e le ricollego?


e se apri e richiudi semplicemtente il DB ?


Questo lo potrei fare se fossi vicino al pc , ma visto che non e
cosi ,volevo trovare una soluzione , oppure esiste un metodo che mi
chiusa e riapra il db tramite vba?


puoi metter che su QUIT del DB1 ti apra un secondo DB (DB2) fatto
apposta per "riaprire" il primo DB1.


Aspetta questa e bella , mi e venuto in mente mentre aspettavo il tuo
suggerimento di compattare e riapre il db automaticamente , di solito
funziona no?
bene allora sulla maschera che visualizza i dati su time , ho messo un
if che non fa altro che una verifica , se la conessione si perde ,
chiude la maschera e me ne apre un'altra dicendo server scollegato ect
ect , intanto su time di questa maschera , se ritrovala la
connessione , ho messo il codice per ricompattarlo....
CommandBars("Menu Bar"). _
    Controls("Strumenti"). _
    Controls("Utilità database"). _
    Controls("Compatta e ripristina database..."). _
    accDoDefaultAction
il sistema trova la connessione , compatta il db e lo riapre (quello
che volevo giusto?) ma sull'apertura della maschera da errore della
macro , eseguo la procedura manuale e funziona , misteri di accesS?


compattare non è proprio la stessa cosa in realtà perchè probabile che
certe connessioni restino "bloccate" per chissà quale problema, e il
CompactDB non te le sblocca, lasciandoti cmq in panne... la chiusura
invece si...