Newsgroup: it.comp.lang.visual-basic
Titolo: Applivazione VB6: stallo senza errore

Ho realizzato un applicazione VB6 che legge dei dati presenti su
connessione TCI/IP e li memorizza in un database sql server.
Sempre dal database "estrae" dei dati e li invia come risposta.
Ora la problematica è che l'applicativo deve restare in piedi per
diversi giorni continuamente ed accade che, dopo qualche ora (a volte
dopo 12 ore,a volte dopo 20, ecc..) l'applicativo si blocca o meglio
sembra entrare in stallo, nel senso che anche se clicco su qualche
pulsante non sembra reagire.
Il tutto senza ritornare alcun errore e tra l'altro, andando a vedere
in task manager, lo stato dell'applicativo questo è running.
Cosa può essere? Scusate ma sono un neofita di VB&
Grazie mille dell'aiuto che mi vorrete dare.
P.S: aggiungo che la connessione al database la faccio con
ADODB.Connection in una variabile globale, così come globale è il
recordset. Non se sarebbe più giusto aprirla e chiuderla di volta in
volta.
Per verificare se l'applicativo è in piedi, ho realizzato una routine
che ogni minuto scrive all'interno del database la data e l'ora, valori
che posso leggere con una pagina .asp creata giusto per controllare lo
stato dell'applicativo. Non so se così facendo ho appesentito o meno
il tutto.

 il tutto.
Niente di che.
Ma continua a scrivere la data, o smette?
Alberto
-- 
A questo punto hanno trovato un muro,
un muro duro, molto molto duro,
che siamo noi.

Ciao Alberto allora provo a risponderti.
Non riesco a controllare la CPU poichè l'applicativo è presso un
server da me distante che non posso amministrare da remoto ahime.
L'applicativo non si riprende e quindi la data smette di essere
aggiornata nel campo di controllo creato.
In realtà la connessione tcp/ip viene gestita da un Active X che
interpreta i dati scambiati con protocollo UCP sulla porta 1900.
La cosa strana è che i vari pulsanti possono essere tranquillamente
premuti, ma non portano ad alcun risultato.
Grazie

 premuti, ma non portano ad alcun risultato.
La prima cosa che mi viene in mente è che ci siano cose del tipo If... 
Then Exit Sub, e a causa di un bug una certa variabile assuma un valore 
che fa uscire sempre.
Oppure, ci sono degli On Error, c'è qualcosa che non va (ad esempio, se 
la connessione ADO cade e tu non la testi ogni volta, non torna mica su 
da sola...), e tu non te ne accorgi perchè l'On Error fa tirare dritto.
Fai una versione commentando gli On Error non assolutamente 
indispensabili, e fai girare quella.
Se l'applicativo fosse un Servizio NT, ci sarebbero anche altre cose, 
ma per il momento partiamo da queste.
Ciao


Grazie dei consigli.
Mi sembra di fare ovunque il test della connessione con CONN.State dove
CONN è il mio oggetto adodb.connection.
In effetti gestisco gli errori tramite On error, puntanto poi ad un
etichetta che, se il Err.number<>0 mi scrive all'interno di una casella
di testo la parola errore. Ma questo non accade nel mio caso.
Per farti capire la stranezza: ho un pulsante di About che mi dovrebbe
aprire una form con alcune informazioni testuali. Quando l'applicativo
va in stallo, mi fa cliccare sul pulsante ma la finestra non mi si
apre.
Comunque provo a fare come mi hai detto e lo carico sul server domani
quando andrò in loco e ti faccio sapere.
Grazie ancora.
Gabriele

Ho provato a fare delle prove utilizzando un server locale.
Ho provato a simulare la perdita di connessione al database staccando
la spina di rete al pc su cui ho fatto girare l'applicativo. Il
controllo dell'errore con On error è stato effettivamente attuato
inserendo la scritta errore nella casella di testo, come
precedentemente ti dicevo.
Deduco che non sia problema di On Error e neanche di perdita della
connessione con il db.
Non riesco veramente a capire. Preferirei di gran lunga che mi
ritornasse un errore, ma così non riesco a individuare il problema.

help me!
Thanks

 help me!
Ma se non hai postato neppure una riga di codice, quantomeno la parte 
dell'evento timer, come pretendi di avere aiuto che non siano le 
semplici supposizioni fatte prima?


Hai ragione scusa.
Ecco la parte del timer
Dim CONN As ADODB.Connection
Private Sub gest_errore(errore_txt As String)
Dim query As String
query = "Update tbl_controllo SET tempo='" & Now & "', errore='" &
errore_txt & "' where id_controllo=1"
If CONN.State = 0 Then
Connetti
End If
CONN.Execute (query)
End Sub
Private Sub Timer1_Timer()
gest_errore 0
End Sub
Private Sub Connetti()
   'On Error Resume Next
   On Error GoTo errore
'**********************************************
'CONNESSIONE CON IL DATABASE
'**********************************************
Set CONN = New ADODB.Connection
Dim strSQLServerName As String
Dim strSQLDBUserName As String
Dim strSQLDBPassword As String
Dim strSQLDBName As String
Dim strsql As String
Dim Result2 As Long
Dim query As String
Dim cont As Integer
' strSQLServerName = "(local)"
 'strSQLServerName = "LINFANET"
 strSQLServerName = "localhost"
 'strSQLDBUserName = "user_polizia"
 strSQLDBUserName = "user_polizia1"
 'strSQLDBPassword = "pupass"
 strSQLDBPassword = "smspolizia"
 strSQLDBName = "polizia_sms"
 strsql = "Provider=SQLOLEDB;Server=" & strSQLServerName & ";User ID="
& strSQLDBUserName & ";Password=" & strSQLDBPassword & ";Database=" &
strSQLDBName & ";"
 CONN.Open strsql
    AddEvent txtLog, "Connesso al db"
    'query = "SELECT * from tbl_sms"
    'Set RCDS = CONN.Execute(query)
  'Do While (Not RCDS.EOF)
   ' AddEvent txtLog, RCDS("Numero")
    'RCDS.MoveNext
  'Loop
     '  inserisci_sms "Ciao a tutti gabriele", "393485247356"
errore:
If Err.Number <> 0 Then
  MsgBox "Si è verificato un errore in fase di connessione al
database: " & Err.Number
End If
 
End Sub

 End If
Scusa, ma se c'è un errore parte un msgbox (con, tra l'altro, quella 
concatenazione stringa&numero che a me provoca i crampi).
Non è che il msgbox va in background e tu non lo vedi?
Prova a passargli il VbMsgBoxSetForeground.
Ciao


 Prova a passargli il VbMsgBoxSetForeground.
E' probabile (cosa intendi per background?), anche se  non capisco come
mai il tutto funzioni per 15, 20 ore e poi il tutto si "freeza".
Comunque scusami per gli orrori di scripting :-(

 Comunque scusami per gli orrori di scripting :-(
Scripting?


 un problema in quel punto.
Mi sono accorto che l'avevi postato.
Non ci vedo niente di particolarmente sbagliato.
Al limite, anzichè ricreare la connessione ogni volta, potresti tentare 
di riassegnare la connectionstring e ripetere l'Open.
Fai anche una prova inserendo Persist Security Info nella connection 
string.
Ciao


Grazie dei consigli, proverò a vedere come va?
tra l'altro è da ieri sera che l'applicativo gira in continuazione
senza ancora andare in tilt su un server mio locale. Mahhhhh
Avevo anche pensato che potesse essere il fatto che all'interno del
timer, dove faccio l'update della data, per qualche motivo l'operazione
rimanga appessa per qualche motivo, anche per oltre un minuto ,
causando un nuovo richiamo da parte del timer dalle funzione di update
e quindi mandando tutto in tilt.

Sembra che 
g.si...@linfa.it
 abbia detto :

Un nuovo evento Timer no, perchè non ci sono doevents. Ma può al limite 
accodare gli eventi timer in una sequenza che non si sbloccherà mai 
più.
Il perchè, poi, non riesca a fare un update in un minuto, sarebbe da 
vedere.
Una prima possibilità, è legata al fatto che tu ricrei la connessione 
ogni volta, se la trovi chiusa. Questo potrebbe (ma solo in particolari 
condizioni), aggiungere spid al server, fino ad esaurire quelli 
possibili (esaurire le licenze per un Sql-Server, o, molto più 
difficile, esaurire le 8 esecuzioni batch in un MSDE).
Non per niente, ti ho suggerito nell'altro post di non ricreare la 
connection, ma solamente di riaprirla previa riassegnazione della 
connectionstring.


Quindi in parole povere dovrei mettere la stringa
Set CONN = New ADODB.Connection
al di fuori della funzione Connetti, vero?
Grazie

 al di fuori della funzione Connetti, vero?
Nel Load, ad esempio.


Grazie mille del supporto.
Oro faccio le modifiche e vado ad installarlo dal cliente.
Ti faccio sapere cosa accade.
Grazie ancora

  strSQLDBName = "polizia_sms"
Spero solo che non si tratti di un applicativo per la gestione di 
criticità relative alle attività di Polizia...
Ciao
-- 
Gianluca Cannalire
Microsoft MVP/MCP - Visual Basic
http://www.visual-basic.it
http://community.visual-basic.it/gianluca
 

 criticità relative alle attività di Polizia...
:P
non ti ricordi?
"volante1 a volante2... passo..."
al passo coi tempi, ora e'
vlnt1 vlnt2, c6?
ciao, a.quelli.della 

 vlnt1 vlnt2, c6?
ROTFL


Gianluca Cannalire [MVP] [
www.visual-basic.it
] ha scritto:

Ovviamente sono dei dati fittizi di un applicativo che gira su una
macchina locale e che non gestice alcuna attività critica della
polizia ... ovviamente ...

 polizia ... ovviamente ...
Beh, hai dato dei nomi "curiosi" al db, allora... ;)
