Newsgroup: it.comp.lang.visual-basic
Titolo: Recordset ADO Open, Timeout ???

Ciao a tutti !
Nel caso in cui esita, quant'è (in termini di secondi oppure di
millisecondi) ed è possibile gestire il Timeout del Metodo Open di ADO
applicato ad un recordset ?
-- 
Advenire IT s.r.l.
Pool Galileo
r.p. Fabio Bertuzzi
Programmatore Visual Basic
Database Designer & Manager
ICQ# 88912631

applicato ad un recordset ?
Cacchio, col popò di firma che ti ritrovi, dovresti essere tu a dirlo
a me, non viceversa!! :)))
Scherzi a parte, dai un occhio alla proprietà CommandTimeout
dell'oggetto Command.
--
Ciao!
Luca Menegotto

 applicato ad un recordset ?
La CommandTimeout della Connection a cui il Recordset fa riferimento, 
definisce il timeout di un Execute invocato sulla connection stessa, e che 
restituisce un recordset. Potresti quindi usare questo metodo e avresti a 
disposizione il CommandTimeout.
Tale proprietà, tuttavia, potrebbe anche essere ereditata dal Open del 
Recordset, nel momento in cui questo viene associato alla Connection, ma non 
è documentato e sinceramente non posso garantirtelo.
Anzi, se hai una situazione in cui avviene un timeout, sarebbe gradito se tu 
provassi e ci facessi sapere.
La CommandTimeout della Connection rimane scrivibile anche dopo l'apertura 
della Connection.
So per certo che il CommandTimeout della Connection NON viene ereditato 
dall'Execute del Command che su di essa si appoggiasse, ma relativamente al 
recordset credo possa funzionare.
Fammi sapere.
Saluti
Alberto
-- 
E tutto mi sembrava andasse bene... 

Ho aumentato il settaggio della CommandTimeout (30 sec. di default)
nella Classe che utilizzo per la Connessione portandola dopo varie 
tarature a 120 sec. e l'Execute viene ora esguita correttamente.
Grazie 1000 per l'aiuto.
Lucilla.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 tarature a 120 sec. e l'Execute viene ora esguita correttamente.
Questo lo sapevo.
Quello che volevo sapere, era se il CommandTimeout venisse ereditato anche 
dall'Open del Recordset.
Ciao


 recordset credo possa funzionare.
in realtà, andando a guardare le proprietà dell'oggetto adodb.recordset,
non sono riuscito a trovare la proprietà commandtimeout, per cui ritengo
che in caso di apertura tramite il metodo open dello stesso venga
utilzzato il valore del commandtimeout della activeconnection.
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Luca Menegotto

 della activeconnection.
Era infatti ciò che speravo che il nostro amico potesse confermarci...


dell'oggetto _RECORDSET_ ...
Comprendo, il fatto è che probabilmente l'oggetto Recordset, in
mancanza di indicazioni differenti, utilizza un oggetto Command creato
automaticamente, e probabilmente con tutti i valori impostati a valori
predefiniti. Io, per non avere rogne, mi son scritto una funziella
(rivediti la formattazione):
Public Function OpenRecordset(cnsApp As ADODB.Connection, _
                              strSQL As String, _
                              Optional ByVal iCursorType As Integer =
adOpenStatic, _
                              Optional ByVal iLock As Integer =
adLockOptimistic, _
                              Optional ByVal iCursorPosition As
Integer = adUseClient, _
                              Optional ByVal iTimeout As Integer = -1)
As ADODB.Recordset
    Dim cmdApp As ADODB.Command
    Dim rstApp As ADODB.Recordset
 
    Set cmdApp = New ADODB.Command
    Set rstApp = New ADODB.Recordset
 
    Set cmdApp.ActiveConnection = cnsApp
    cmdApp.CommandType = adCmdUnknown
    cmdApp.CommandText = strSQL
    rstApp.CursorLocation = iCursorPosition
    If iTimeout > 0 Then
        cmdApp.CommandTimeout = iTimeout
    Else
        cmdApp.CommandTimeout = 0
    End If
    rstApp.Open Source:=cmdApp, _
                CursorType:=iCursorType, _
                LockType:=iLock
 
    Set cmdApp = Nothing
    Set OpenRecordset = rstApp
End Function
--
Ciao!
Luca Menegotto

 Alberto
Ciao e grazie 1000 !


 Ma viene correttamente applicata dopo uno o più cambiamenti ?
Si.
Ho fatto questa prova (con una query da 22" alla ennesima esecuzione)
Private Sub Command1_Click()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Set CN = New ADODB.Connection
    CN.ConnectionString = "Provider=SQLOLEDB.1;Password=alberto;" & _
    "Persist Security Info=True;User ID=vaccari;" & _
    "Initial Catalog=Vision_Plant;Data Source=PV-01"
    CN.Open
    CN.CommandTimeout = 10
    On Error Resume Next
    Set RS = New ADODB.Recordset
    Set RS.ActiveConnection = CN
    RS.Source = "select id_misurazione,count(1) " & _
    "From tb_eventi group by id_misurazione"
    RS.Open
    If Err.Number <> 0 Then Call MsgBox("Timeout 10sec", _
    vbOKOnly, "Esecuzione di Open")
    CN.CommandTimeout = 50
    Err.Clear
    Set RS = New ADODB.Recordset
    Set RS.ActiveConnection = CN
    RS.Source = "select id_misurazione,count(1) " & _
    "From tb_eventi group by id_misurazione"
    RS.Open
    If Err.Number <> 0 Then Call MsgBox("Timeout 50sec", _
    vbOKOnly, "Esecuzione di Open")
End Sub


 Ho fatto questa prova (con una query da 22" alla ennesima esecuzione)
Bene, molto bene; grazie 1000 per aver fatto la prova.
Io ho fatto la prova sulla query che mi dava errore e ora l'errore non c'è
più !
Direi che a questo punto abbiamo risolto.
Il timeout dell'oggetto Command non eridita alla Connection ne eridita dalla
Connection le sue impostazioni e perciò viaggia per conto suo, in base alle
impostazioni che uno gli da oppure con i 30 secondi di default. Volta per
volta si possono specificare diversi valori di timeout e questi vengono
mantenuti.
Il timeout dell'oggetto Connection eridita al Recordset le sue impostazioni
e perciò non viaggia per conto suo, ha 30 secondi come default. Volta per
volta si possono specificare diversi valori di timeout e questi vengono
mantenuti, sia nella Connection che nel Recordset.
Grazie a tutti per le preziose indicazioni.
Alla prossima ! :)
