Autore Topic: [Risolto] Verificare database remoto  (Letto 2838 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[Risolto] Verificare database remoto
« il: 22 Marzo 2012, 02:06:51 »
Ciao raga
con il seguente codice mi connetto su un database remoto che si trova su un pc in un'altra sede
il problema è che quando il pc remoto è spento il programma non riesce a connettersi e si blocca.
dovrei fare tipo un ping o qualcosa del genere prima di avviare la connessione.
Codice: [Seleziona]
WITH RMyConn
      .Close
      .Type = "mysql" ' indicazione del tipo di database da utilizzare
      .Host = M1.Rhost
      .Name = M1.Rname
      .Login = M1.Rlogin
      .port = M1.Rport
      .Password = M1.Rpass
      .Open
    END WITH
« Ultima modifica: 26 Marzo 2012, 02:07:17 da dex »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Verificare database remoto
« Risposta #1 il: 22 Marzo 2012, 11:00:21 »
Nell'apertura prova a controllare gli errori. Qualcosa dovrebbe ritornarti...
Magari metti un timer che ti chiude dopo un certo tempo, se nessuno ti risponde...

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #2 il: 23 Marzo 2012, 01:14:55 »
Nell'apertura prova a controllare gli errori. Qualcosa dovrebbe ritornarti...
Magari metti un timer che ti chiude dopo un certo tempo, se nessuno ti risponde...

mi dice che non riesce a connettersi

Codice: [Seleziona]
Cannot open database: Can't connect to MySQL server on '94.231.58.169'(110)

come si fà a mettere un timer a una connessione?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Verificare database remoto
« Risposta #3 il: 23 Marzo 2012, 13:36:03 »
Se ti risponde (visto il messaggio), e in tempi accettabili, vuol dire che il driver funziona, e che il problema è sicuramente esterno.

Per prima cosa dovresti provare la connessione da remoto manualmente, nel senso di utilizzare il cliente mysql puntando al server incriminato, per vedere se così funziona.
La cosa che mi sfugge è il valore "(110)", riportato nel messaggio, come se si trattasse di una porta. Sei sicuro di usare la porta 3306 (se è utilizzata quella di default)?

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #4 il: 24 Marzo 2012, 00:20:31 »
Se ti risponde (visto il messaggio), e in tempi accettabili, vuol dire che il driver funziona, e che il problema è sicuramente esterno.

Per prima cosa dovresti provare la connessione da remoto manualmente, nel senso di utilizzare il cliente mysql puntando al server incriminato, per vedere se così funziona.
La cosa che mi sfugge è il valore "(110)", riportato nel messaggio, come se si trattasse di una porta. Sei sicuro di usare la porta 3306 (se è utilizzata quella di default)?

mi freza il pc per un pò di tempo e poi mi dà quell'errore.
Per la porta era venuto anche a me il dubbio, ma ho controllato uso la 3306, e sul router del server la 3306 è aperta per TCP.
In pratica si collega al router poi trova il pc spento e mi va in errore.

dovrei fare un ping a quella porta e vedere se cè un demone in ascolto, ma non so come si possa fare.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #5 il: 24 Marzo 2012, 15:30:18 »
dimenticavo.
il codice funziona, quando il pc remoto è acceso mysql si connette e scarica i dati, il problema è quando lo trova spento che si blocca e mi dà errore.
Dato che il codice deve funzionare automaticamente ogni 15 minuti, non posso fermarlo quando il pc remoto è spento.

Una soluzione alternativa sarebbe di non far comparire il messaggio di errore, quando compare il messaggio tutto il programma è bloccato, eliminando il messaggio anche se non si connette è mi freeza il pc, dopo un pò riparte da solo.
Come si fà a non far comparire il messaggio di errore?

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Verificare database remoto
« Risposta #6 il: 24 Marzo 2012, 15:50:23 »
Metti un Try davanti alla funzione che apre il db... nell'istruzione successiva, se vuoi intercettare l'errore dai un If Error Then ...

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #7 il: 24 Marzo 2012, 23:33:51 »
Raga niente da fare
Provato con try e con un timer, quando entra nel codice della connessione si blocca.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #8 il: 24 Marzo 2012, 23:41:34 »
con CATCH  riesco ad evitare il messaggio di errore.
resta il problema che mi freeza il pc per 45/50 sec.

si può impostare a priori il tempo massimo per la connessione senza timer ?  Quando tenta di connettersi il timer non funziona !!

O in alternativa esiste un'opzione nel tipo di connessioni che non devono prendere tutte le risorse?

raga datemi una mano è importante che completi questo passaggio.   :hard: :hard:

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Verificare database remoto
« Risposta #9 il: 25 Marzo 2012, 09:29:20 »
Potresti fare un piccolo programma di verifica che lanci con EXEC e catturi i suoi comportamenti con i vari Eventi di Process...

In questo modo e' sicuro che il tuo programma continua a funzionare

Piu' o meno cosi'...

Codice: vb.net [Seleziona]
Private Verifica As Process
Private Tim As Timer
Private NonConnesso As Boolean

Public Sub _new()

  Tim = New timer As "VTimer"
  Tim.Delay = 3000 'imposto il tempo di risposta a tre secondi

End

Public Sub VerificaDb()
Dim path As String

  path = Application.Path &/ "verifica.gambas"
 
  Verifica = Exec [path] For Read As "Process"
  Tim.Start()

End

Public Sub Process_Kill()

  Tim.Stop()
  If Not NoConnesso Then
    Message.Info("Aperto")
  Else
    Message.Info("Chiuso")
  EndIf

End


Public Sub VTimer_Timer()

  Tim.Stop()
  NonConnesso = True
  Verifica.Kill()

End

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #10 il: 25 Marzo 2012, 23:37:00 »
Ciao milio

la path si riferisce al database, a questo punto dovrei cercare di aprirlo?
Codice: [Seleziona]
path = Application.Path &/ "verifica.gambas"  

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Verificare database remoto
« Risposta #11 il: 26 Marzo 2012, 00:36:42 »
Io intendo farti un piccolo programmino in gambas che ha come scopo il solo tentativo di connessione al database...

Se si connette si chiude subito.

Il tuo programma principale, con le funzioni che ti ho postato sopra, intercetta la chiusura del programmino di verifica e fa la connessione...

Se il programmino di verifica non si connette e, come nell'esempio, passano tre secondi, il programma principale chiude il programmino di verifica e non tenta la connessione...

Questa procedura ti evita di avere il programma principale bloccato mentre tenta una connessione che non risponde...

Il timeout del timer ovviamente te lo imposti secondo le tue esigenze...

« Ultima modifica: 26 Marzo 2012, 00:40:56 da milio »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #12 il: 26 Marzo 2012, 00:43:40 »
Ah quindi un programmino esterno.
Avevo già pensato a un programmino esterno che tentava la connessione e scaricava i dati, se non riusciva a connettersi si bloccava  ma non interferiva con il programma principale.

Posso aggiungere il tuo codice al programmino per testare la connessione.

Ho aperto un'altro post per chiedere come passare i valori delle variabili dal programmino al programma principale.

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Verificare database remoto
« Risposta #13 il: 26 Marzo 2012, 00:46:33 »
Perche' devi passare delle variabili da un programma all'altro?

Cioe' in questo caso non serve... e' la chiusura del programmino di verifica che da il via alla connessione...


Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Verificare database remoto
« Risposta #14 il: 26 Marzo 2012, 00:54:31 »
devo passare dal programma principale al programmino i seguenti dati per la connessione:

M1.Rhost
M1.Rname
M1.Rlogin
M1.Rhost

Codice: [Seleziona]
WITH RMyConn
      .Close
      .Type = "mysql" ' indicazione del tipo di database da utilizzare
      .Host = M1.Rhost
      .Name = M1.Rname
      .Login = M1.Rlogin
      .port = M1.Rport
      .Password = M1.Rpass
      .Open
    END WITH

Non posso inserirli fissi nel programmino in quanto variano, deve girare su 10 pc diversi e sono gia 10 name e 10 login, in più per host sono 3 ip diversi.
Se esiste un modo di passarli al volo è meglio altrimenti mi devo appoggiare a un file e farlo leggere da entrambi.

Edit: 10 login e 10 Password
« Ultima modifica: 26 Marzo 2012, 01:01:00 da dex »