Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Watch Dog in Vb6

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89

    Watch Dog in Vb6

    Qualcuno di voi ha mai avuto la necessità di fare una chiamata
    ad un programma esterno 'temporizzata' ?
    Ovvero, devo chiamare un programma esterno e rimanere in attesa della risposta per un massimo di 5 secondi.
    Come posso fare un temporizzatore del genere in VB6 ?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Come colloquiano le due applicazioni ?
    In pratica, come faresti a sapere che l'applicazione 'chiamata'
    non ha risposto ?

    Ciao,
    Ciao, Brainjar

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89
    Devo fare una chiamata ad AS/400 quindi utilizzo la seguente
    sintassi :

    Set cmdAS400Lib = New ADODB.Command
    Set cmdAS400Lib.ActiveConnection = objConnAS400

    cmdAS400Lib.CommandText = ...
    cmdAS400Lib.CommandType = adCmdText
    cmdAS400Lib.Prepared = True
    cmdAS400Lib.Parameters.Append ...
    cmdAS400Lib.Parameters(0).Value = ...
    cmdAS400Lib.Execute

    Quando eseguo "cmdAS400Lib.Execute" se AS/400 non mi risponde entro 5
    secondi devo sganciarmi e dare una segnalazione di errore
    Ciao e grazie

  4. #4
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Imposta il timeout di connessione su objConnAS400

    objConnAS400.ConnectionTimeout = 5 'secondi di timeout

    Caio,
    Ciao, Brainjar

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89
    Provato ma...non funz...
    Qualche altra idea ?
    Grazie

  6. #6
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Per funzionare devi impostare la connessione PRIMA di aprirla :

    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionTimeout = 5
    cn.Open "......."

    Se però il provider del driver di connessione non supporta il
    timeout, non funziona. E questo è purtroppo il caso dell OLEDB
    Provider per AS/400 :

    http://msdn.microsoft.com/library/de...vsam_oledb.asp

    Il comando che esegui, ritorna un recordset e/o un valore ?

    Fammi sapere.
    Ciao,
    Ciao, Brainjar

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    89
    La prova l'avevo fatta esattamente come hai scritto tu.
    Per rispondere alla tua domanda, il comando mi torna una stringa
    valorizzata (Quindi una valore)
    Ciao

  8. #8
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Allora il meccanismo te lo devi creare tu.
    La chiave di tutto è l'uso del CallBack.

    Adesso non ho esempi di codice sottomano.

    Ci 'risentiamo' dopo pranzo.

    Ciao,
    Ciao, Brainjar

  9. #9
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Allora metti nel form un timer e setta la proprietà Interval a 100.
    L' istruzione cmdAS400Lib.Execute la metti in una sub che chiami
    DoQuery. Dichiara blResp come boolean. Dichiara l'api Sleep

    codice:
    Dim blResp As Boolean
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Public Sub DoQuery()
        blResp = False
        cn.Execute
        blResp = True
    End Sub
    
    Private Sub Timer1_Timer()
        Timer1.Enabled = False
        DoQuery
    End Sub
    
    Private Sub Command1_Click()
    Dim TimeCount As Long
        TimeCount = 0
        Timer1.Enabled = True
        Do While True
            DoEvents
            Sleep 500
            Time Count = TimeCount + 500
            If TimeCount > 5000 Then Exit Do
            If blResp Then Exit Do
        Loop
        If blResp Then
            ' Fai qualcosa con il risultato della query  
        Else
            ' Stoppi la connessione   
            Set cn = Nothing 
            ' Dai la segnalazione di errore 
            MsgBox "Errore di Time Out ......." 
        End If
    End Sub
    Il meccanismo è questo :

    1) Al click sul bottone, parte il Timer
    2) Subito dopo la tua applicazione entra nel ciclo Do while
    3) Dopo un decimo di secondo il Timer si stoppa e lancia DoQuery
    che in questo modo è asincrona al ciclo.
    4) Intanto il ciclo conta i millisecondi grazie a Sleep
    5) Se la execute della query risponde, il valore di blResp è true
    ed il ciclo lo scopre e termina
    6) Altrimenti il ciclo termina comunque dopo 5 secondi
    7) Testi blResp per comportarti di conseguenza

    Le mie prove danno esito positivo. Prova anche tu e fammi sapere.

    Ciao,
    Ciao, Brainjar

  10. #10
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Public Sub DoQuery()
    blResp = False
    cn.Execute
    blResp = True
    End Sub

    diventa

    Public Sub DoQuery()
    blResp = False
    cmdAS400Lib.Execute
    blResp = True
    End Sub

    Ciao,
    Ciao, Brainjar

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