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.
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
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
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?
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'...
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
Ciao milio
la path si riferisce al database, a questo punto dovrei cercare di aprirlo?
path = Application.Path &/ "verifica.gambas"
devo passare dal programma principale al programmino i seguenti dati per la connessione:
M1.Rhost
M1.Rname
M1.Rlogin
M1.Rhost
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
riapro il post
@milio
c'è un errore nel codice ma non riesco a capire dove, mi da sempre database chiuso anche quando il server è acceso.
Con il server acceso ho provato il tempo di connessione dal mio programma ed è di 1.5 sec.
Con il codice che mi hai postato anche arrivando fino a 40 sec mi dice sempre chiuso.
PUBLIC SUB VerificaDb()
Verifica = EXEC [path] FOR READ AS "Process"
Tim.Start()
END
PUBLIC SUB Process_Kill()
Tim.Stop()
IF NOT NonConnesso THEN
Message.Info("Aperto")
ScaricaQuote 'avvia la connessione dal mio programma
ELSE
Message.Info("Chiuso")
ENDIF
END
PUBLIC SUB VTimer_Timer()
Tim.Stop()
NonConnesso = TRUE
Verifica.Kill()
END
Hai fatto in modo che se il programma di verifica ottenendo la connessione si chiuda?
no
il programmino apre solo la connessione
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
DIM RMyConn AS NEW Connection
DIM sqlr AS String
DIM MyRSR AS Result
WITH RMyConn
.Close
.Type = "mysql" ' indicazione del tipo di database da utilizzare
.Host = "95.241.68.179" 'M1.Rhost
.Name = "Mazzini" 'M1.Rname
.Login = "luca" 'M1.Rlogin
.port = "3306" 'M1.Rport
.Password = "ptk569"
.Open
END WITH
RMyConn.close
END