Newsgroup: it.comp.lang.visual-basic
Titolo: [Errore] Conflitto relativo a una operazione del cursore

Buon giorno a tutti.
Ho fatto un programmino in VB che preleva alcuni dati da dei log e li
va a scrivere in un DB SQL così da preparare successivamente della
reportistica.
Il programma funziona regolarmente da diversi mesi.
Questo mese quando lancio il programma ricevo il seguente errore
Errore di Run Time - 
2147217885
 (80040e23):
Conflitto relativo a una operazione del cursore
Il programma non è stato modificato nell'ultimo mese.
Invece è satato aggiornato il server SQL a 2000.
Il programma si ferma  su questa riga di codice:
rst.Update
Ringrazio chiunque possa spiegarmi cosa significa il messaggio e quali
potrebero essere le soluzioni applicabili
Grazie a tutti per l'aiuto
stefano

 rst.Update
Pochissime info:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adoce31/htm
l/ado30ref_103.asp
Parrebbe "Row is deleted"
Sicuro che altri non abbiano, appunto, cancellato la riga?

 us/adoce31/html/ado30ref_103.asp
(snip)
scusa lupone.... (per rendere la pariglia al sergione)
Per pura curiosità sono andato a leggere il link da te segnalato (non uso
sql server) e ho notato queste due incongruenze:
1) La pagina pare riferirsi a ADOCE
2) gli errori di quella pagina, secondo loro, dovrebbero avvenire in fase di
apertura del recordset (che problema possa dare il fatto che un record sia
stato cancellato quando io apro un recordset, lo sanno soltanto alla MS)
Comunque, visto che il nostro op parlava di un errore di conflitto sul
cursore, avrebbe potuto cominciare a confessare quale tipo di cursore
utilizza, e quali sono le istruzioni prima dell'update.
Salutoni
Sergio

 stato cancellato quando io apro un recordset, lo sanno soltanto alla MS)
Ecchettedevodì? Ho cercato il numero decimale, nisba, ho cercato
l'esadecimale e quello è l'unico link che mi è saltato fuori, ovviamente con
tutti i check attivati.
Sul fatto che gli errori ADO siano ancora in fase gestatoria, ... abbiamo
già dato. Che vengano meglio documentati, dubito fortemente, visto che pare
morto ancor prima di alzarsi in piedi...

 Ecchettedevodì?
Tu assolutamente nulla, hai già fatto qualcosa in più di quello che potrebbe
essere il comportamento standard del postatore (Se so rispondo, se per
rispondere devo cercare, pf arrangiati ;-) )
Insisto a dire che la palla è a Stefano, adesso.
Salutoni
Sergio


wrote:
Inanzitutto grazie a entrambi per l'interessamento.
naturalmente sto continuando a cercare una soluzione (tutta mattina)
sia su internet che sui vari Help.
Il problema č che non capisco l'errore che compare e cosa possa
significare.
Vi descrivo piů nel dettaglio cosa fa il programma.
Il programma legge un file di testo suddividendo i campi e
riscrivendoli poi in SQL.
La parte di codice relativa alla scrittura e' la seguente:
rst.AddNew
rst("Utente") = campo(7)
rst("Dt_LogIn") = inizio
rst("Dt_LogOut") = fine
rst.Update
l'errore avviene come detto su rst.Update
Stiamo parlando di inserire righe nuove quindi non puo' essere che non
venga trovata la riga.
Non so se queste informazioni chiariscono la meccanica della cosa.
fatemi tutte le domande del caso.
Grazie
stefano


Posta anche la stringa rst.open .. ???
--
[t]Eo
Una suora va dal ginecologo e gli spiega preoccupata che tutte le volte che
fa il bidè trova dei francobolli nella passera.
Il dottore la visita, guarda e dice:
"Ma che francobolli! Questi sono bollini Ciquita!"

 Posta anche la stringa rst.open .. ???
Giusto e, magari, anche la tipologia dei campi interessati e dei valori ad
essi assegnati...

On Fri, 02 May 2003 09:07:54 GMT, 
ste...@nomail.it
 (Stefano) wrote:
Ecco il listato del programma:
Private Sub cmdElabora_Click()
Dim fso As New Scripting.FileSystemObject, f As File
    If cnn.State = adStateOpen Then cnn.Close
    cnn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security
Info=False;User ID=****;Initial Catalog=statistiche;Data
Source=SRVSQL1"
    cnn.Open , "****", "*****"
    rst.Open "dbo.LogLanRover", cnn, adOpenDynamic, adLockOptimistic
    If txtFileName.Text = "" Then           'controllo della selezione
del log
        MsgBox "Selezionare la CARTELLA"
    Else
        Label3.Caption = "ATTENDERE"
        Me.Refresh
        For Each f In fso.GetFolder(txtFileName.Text).Files
            Call elabora(f)
        Next
    End If
    rst.Close
    cnn.Close
    Label3.Caption = "FINE"
End Sub
Sub elabora(objFile As File)
Dim fso As New Scripting.FileSystemObject, txs As TextStream
Dim riga As String
    If fso.GetExtensionName(objFile.Path) <> "act" Then
        Exit Sub
    End If
    Set txs = fso.OpenTextFile(objFile.Path, ForReading)
    While Not txs.AtEndOfStream
        riga$ = txs.ReadLine
        riga$ = LCase(riga$)
        If Mid$(riga$, 2, 3) <> "dat" Then 'controllo
            For i = 1 To 50
                If Mid$(riga$, 1, 1) = "," Then
                    campo(i) = " "
                    riga$ = Mid$(riga$, InStr(riga$, ",") + 1)
                Else
                    campo(i) = Mid$(riga$, 2, InStr(riga$, ",") - 3)
                    riga$ = Mid$(riga$, InStr(riga$, ",") + 1)
                End If
            Next i
            campo(44) = riga$
            'INIZIO ELABORAZIONE CAMPI
            'campo(1)= data disconnessione, campo(2) ora
disconnessione
            'campo(4)= Messaggio di start o stop, campo(7)= utente
            'campo(15)= durata connessione in secondi
            If campo(4) = "stop" And Trim(campo(15)) <> "" Then
                campo(1) = Mid$(campo(1), 4, 2) + "/" + Mid$(campo(1),
1, 2) + "/" + Mid$(campo(1), 7, 4)
                fine = campo(1) + " " + campo(2)
                campo(7) = Replace(campo(7), "ssb\", "")
                inizio = DateAdd("s", -campo(15), fine)
                If campo(7) = "pippo" Or campo(7) = "pluto"  Then
                    Label3.Caption = "xxxxx"
                Else
                    rst.AddNew
                    rst("Utente") = campo(7)
                    rst("Dt_LogIn") = inizio
                    rst("Dt_LogOut") = fine
                    rst.Update
                End If
            End If
        End If
    Wend
    txs.Close
    objFile.Name = Left(objFile.Name, Len(objFile.Name) - 3) & "old"
End Sub

 Ecco il listato del programma:
Troppo lungo, ma prova a cambiare quel adOpenDynamic in adOpenStatic e facci
sapere...


ho provato ma non č cambiato nulla
grazie
stefano

 ho provato ma non è cambiato nulla
Ok, allora concentriamoci.
La parte incriminata pare essere questa (lo confermi?):
rst.AddNew
rst("Utente") = campo(7)
rst("Dt_LogIn") = inizio
rst("Dt_LogOut") = fine
rst.Update
Domande:
-La tabella LogLanRover prevede almeno un indice con chiave univoca?
-Che tipo di campi sono Utente, Dt_LogIn, Dt_LogOut?
-Quali sono, esattamente, i contenuti di campo(7), inizio e fine e che tipo
di variabili sono?
-L'errore è sistematico o lo fa solo con alcuni valori assegnati ai campi?
Rispondi a queste domande e, IMHO, troverai la soluzione. Se poi ce la dici,
è meglio.

 ho provato ma non è cambiato nulla
Provo a buttare lì qualche idea....
1) rst è una variabile condivisa: c'e qualche altro punto del codice in cui
gli viene fatto qualcosa che la disturba? (non sembrerebbe, ma non si sà
mai)
2) nel passaggio a sql 2000, il database è stato trasferito con le medesime
caratteristiche (campi, dimensioni, ecc)?
3) I campi da te citati tra l'addnew e l'update sono tutti quelli presenti
nella tabella?
hth, ma siamo arrivati al problem solving a distanza :-(
Salutoni
Sergio

On Fri, 02 May 2003 09:07:54 GMT, 
ste...@nomail.it
 (Stefano) wrote:
OK, vedo cosa riesco a fare con queste info.
Grazie per la disponibilità.
Purtroppo finchè non avrò risolto il problema ci sono 146 colleghi che
nella prossima busta paga beccheranno meno soldi e ci sarà una testa
in più con cui giocare a bocce.
Posterò la soluzione appena trovata.
Saluti
Stefano

 Stefano

On Fri, 02 May 2003 09:07:54 GMT, 
ste...@nomail.it
 (Stefano) wrote:
buon giorno a tutti
Per chi fosse interessato e a coloro che mi hanno aiutato posso
fornire la documentazione microsoft relativa all'errore segnalato in
un mio precedente post.
L'errore è dovuto ad un problema di sql server 2000. Per risolverlo
abbiamo dovuto cambiare un po' di codice eliminando l'utilizzo dei
recordest.
Inoltre sono state modificate anche alcune impostazioni della tabella
Sql.
per la scrittura dei dati su sql la parte di codice relativa a
recordset è stata sostituita da questa.
                    With oCmd
 
                        .CommandText = "spInsertLog"
                        .Parameters(1).Value = campo(7)
                        .Parameters(2).Value = inizio
                        .Parameters(3).Value = fine
                        .Execute
Buon lavoro a tutti
Stefano