Newsgroup: it.comp.lang.visual-basic
Titolo: SQL Ueeeeee2 - EOF infinito -

Ragazzi sto diventando matta. E’ da poco che mi sto cimentando con ADO
abbiate pietà
Vi spiego quello che sto cercando di fare.
Ho una form_Profilo dove l’utente deve compilarlo. Una parte di questo
profilo da
l’opportunità di impostare dei periodi di Inattività (Part Time,
Aspettativa,Maternità) nella parte relativa
al profilo aziendale e fin qui tutto okay.
Ho un tasto “AGGIUNGI” che aggiorna una tabella ( Profilo Inattività) di
un database (Aliquote)
E aggiorno la tabella in questo modo:
---------------------------------------------------------------------------------
Dim rs As New ADODB.Recordset
Dim cn As New ADODB.Connection
Dim i As Integer
Dim strMesi As String
Dim strSQL As String
'Si assicura che la connessione non sia gia aperta
If cn.state <> 0 Then cn.Close
'Apre la Connessione
cn.Open strCnn  
 strSQL = "[Profilo Inattività],cn"
With rs
    rs.Open "[Profilo Inattività]", strCnn, adOpenDynamic,_
adLockOptimistic, adCmdTable
    rs.AddNew "TipoInattività", TipoINA
    rs!DataInizio = DataInizio
    rs!DataFine = DataFine
    rs!DataFine = DataFine
    rs!N°MesiAnnui = TotMesi
    rs!MesiInattività = strMesi
    rs!SettInattività = SettMens
    rs!GiorniINA = GiorniINA
    rs.Update
    rs.Close
End With 
Poi però devo leggere le righe di questa tabella per aggiornare una
finestra ListView e lo faccio in
Questo modo
Dim i As Integer
Dim imgX As ListImage
Dim itmX As Variant '#######con ListItem non funge grrrrr!!!!
Dim lStyle As Long
Dim x As Integer
Dim Mese As String
Dim Descrizione, Quantità As String
Dim Temprs As New ADODB.Recordset
Dim cn As New ADODB.Connection
 
x = 0
i = 0
Report.ColumnHeaders.Clear
Report.ListItems.Clear
'Crea la listview e la riempie con dei dati
 
 
With Report
    .View = lvwReport
 
    '.SmallIcons = ImageList1.Object
    .ColumnHeaders.Add , "x1", "Descrizione" 
    .ColumnHeaders.Item(1).Width = 600
    .ColumnHeaders.Add , "x2", "Dal"
    .ColumnHeaders.Item(2).Width = 1000
    .ColumnHeaders.Add , "x3", "Al"
    .ColumnHeaders.Item(3).Width = 1000
'Si assicura che la connessione non sia gia aperta
    If cn.state <> 0 Then cn.Close
'Apre la Connessione
    Temprs.Open "[Profilo Inattività]", strCnn ', adOpenDynamic,
adLockOptimistic, adCmdTable
Do Until Temprs.EOF
   x = x + 1
   If Temprs.Fields("TipoInattività").Value = "Part Time Orizzontale"
Then Descrizione = "ORIZZONTALE " & Temprs.Fields("N°MesiAnnui").Value &
" Mesi - Anno"
        Set itmX = .ListItems.Add(x, , Descrizione)
        itmX.SubItems(1) = Format(Temprs.Fields("DataInizio").Value,
"dd/mm/yy")
        itmX.SubItems(2) = Format(Temprs.Fields("DataFine").Value,
"dd/mm/yy")
Loop
End With
Ma il ciclo Do Until Temprs EOF mi va in OverFlow ossia anche se nella
tabella c’è una sola riga non smette mai di leggerlo.
Dove sbaglio?
Io un idea ce l’ho ma più che altro è un intuito visto che non ho capito
a cosa servono i parametri del
Metodo OPEN del recordset forse sbaglio li. 
Mi sono letta più di una volta il Capitolo sui Recordset ma da per
scontato molte cose e mi sfugge qualcosa. Mi date una mano?
Vi ringrazio a priori
Debby
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Loop
Non ho letto bene il tuo codice, ma dentro al loop (che è poi questo che ti 
da il problema), non mi sembra di vedere uno spostamento del record....tipo: 
Temprs.movenext. Senno' come ci arrivi all'EOF?
Umbe
-----
Seminate Linux, che Windows si pianta da sè....

 ha scritto nel messaggio 
news:o4CAe.11674$tX6.2...@twister1.libero.it...

Anzi, rileggendo solo il ciclo, io direi di metterci (oltre al movenext)
do while not Temprs.EOF
    'codice
loop
Sempre che abbia capito bene...si intende....come ti ho detto ho letto solo 
il loop.....
Umbe
-----
"Se spari con questa pistola, devi raccogliere i pezzi..."
"Con la mia invece, di pezzi non se ne parla nemmeno..."
(Clint Eastwood in "Una 44 magnum per l'Ispettore Callaghan")

Che deficiente pensavo passasse alla riga seguente da solo...
Mi sto vergognando  =( 
Curiosita perchè meglio while not Temprs.EOF
invece di do until Temprs.EOF?



Perchè se usi Do while not Temprs.EOF è come se gli dicessi:
Esegui tutto il codice fino a quando Temprs è arrivato alla fine...Se è 
arrivato alla fine, passa alla riga successiva del loop.
Se invece usi Do until Temprs.EOF è come se gli dicessi:
Finchè Tempr è alla fine (Eof) esegui il codice.
Quando tempr non è piu' a EOF (???? ) allora passa alla riga successiva del 
loop.
Quindi non è questione di meglio. E' questione che non funzia!
Ci sono 2 correnti di pensiero per muoversi all'interno del recordset: c'e' 
chi usa un ciclo indefinito (come il loop) e chi invece usa un ciclo 
definito (for next). esempio del for next:
dim i as single
for i =1 to Temprs.recordcount -1
    'codice
next i
Consigliano il loop, ma se ti scordi il movenext.....
Ciao!
Umbe
-----
"Cara, togliti le mutande che devo parlarti..."
(Roberto "Freak" Antoni)

Grazie infinite Umbč


 invece di do until Temprs.EOF?
Do until e' meglio perche' piu' efficiente, per quello che puo' valere.
Dal punto di vista formale sono IDENTICI.
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs
­/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs
­/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org
 


Grazie Lokar per la giusta precisazione....avendo usato sempre do while e do 
while not e data l'ora tarda
mi era sfuggita questa cosa non da poco.
Per riassumere quindi:
con While (senza il Not), il ciclo viene eseguito finché la condizione 
specificata è vera (cioè si esce dal ciclo quando la condizione è falsa), 
mentre con Until accade il contrario: il ciclo viene ripetuto finché la 
condizione specificata è falsa (cioè si esce dal ciclo quando la condizione 
è vera.
Se pero' scrivo While Not ecco che diventa uguale ad Until.
Umbe
-----
Hombre que trabaja pierde tiempo precioso!
(Proverbio Cubano)

 Quindi non è questione di meglio. E' questione che non funzia!
Ripeto: While e Until sono identici, come funzionamento. Basta, 
ovviamente, ribaltare le condizioni.
Alberto
-- 
I have a dream that my four little children
will one day live in a nation where they
will not be judged by the color of their skin
but by the content of their character.


Si, grazie Alberto....ti rimando al reply fatto a Lokar.
Ciao!
Umbe
-----
Sono stato il primo a calcolare la velocità con cui si muove il tempo.
E' esattamente di un secondo al secondo.