Ho un bel problemino su una classe creata da me che dovrebbe usare un metodo Save() per salvare i suoi parametri nel database.
Per semplificare :
Ho due classi, la classe Articolo e la classe Connessione
Nella classe Connessione ho 2 metodi,
e sono rispettivamente :
codice:'// restituisce un recordset disconnesso Public Function RetrieveRS(sSQL) Dim objConn, objRS Set objConn = Server.CreateObject("ADODB.CONNECTION") Set objRS = Server.CreateObject("ADODB.RecordSet") objConn.ConnectionString = sConn objConn.Open objRS.CursorLocation = adUseClient objRS.CursorType = adOpenStatic 'adOpenKeyset(1) objRS.LockType = adLockBatchOptimistic objRS.Open sSQL, objConn, , , adCmdText Set objRS.ActiveConnection = Nothing Set RetrieveRS = objRS.clone Set objRS = Nothing Set objConn = Nothing End Function
Queste due classi io le utilizzo dalla classe Articolo che ha come parametri :codice:'// dovrebbe salvare nel db un recordset disconnesso Public Sub SaveRS(objRS) Dim objConn Set objConn = Server.CreateObject("ADODB.CONNECTION") objConn.ConnectionString = sConn objConn.Open Set objRS.ActiveConnection = objConn objRS.UpdateBatch Set objRS = Nothing Set objConn = Nothing End Sub
iId | sTitle | sText
e come metodi :
Load() e Save()
codice:Public Sub Load() if iId > 0 then ' Modifica strSQL = "Select * From Articoli Where art_ID = "& iId else ' Crea Nuovo strSQL = "Select * From Articoli Where art_ID = 0" end if Set objData = New Connessione objData.ConnectionString = sConn Set objRS = objData.RetrieveRS(strSQL) With objRS If Not .EOF Then ' Load .MoveFirst iId = cInt(objRS("art_ID")) sTitle = Trim(objRS("art_titolo")) sText = Trim(objRS("art_testo")) End If End With If IsObject(objData) Then Set objData = Nothing If IsObject(objRS) Then Set objRS = Nothing End SubIl problema è sul Save()codice:Public Sub Save() if iId > 0 then ' Modifica strSQL = "Select * From Articoli Where art_ID = "& iId else ' Crea Nuovo strSQL = "Select * From Articoli Where art_ID = 0" end if Set objData = New Connessione Set objRS = Server.CreateObject("ADODB.Recordset") objData.ConnectionString = sConn Set objRS = objData.RetrieveRS(strSQL) If objRS.EOF = True And objRS.BOF = True Then objRS.AddNew End If if objRS.state = 1 then objRS("art_titolo") = sTitle objRS("art_testo") = sText objRS.Update objData.SaveRS(objRS) end if If IsObject(objData) Then Set objData = Nothing If IsObject(objRS) Then Set objRS = Nothing End Sub
Ogni tanto lo fa, ogni tanto no.
Il problema lo da nella riga del metodo Save(), dove i campi del recordset disconnesso vengono modificati.
i campi nel db esistono, quindi teoricamente esistono con quel nome anche nel recordset disconnesso...codice:objRS("art_titolo") = sTitle objRS("art_testo") = sText
e l'errore è questo :
Microsoft Cursor Engine (0x80040E21)
Si sono verificati errori in un'operazione composta da più passaggi. Controllare i singoli valori di stato.
Cosa posso fare?
p.s. la variabile sConn è impostata dalla pagine che istanzia la classe Articolo.

Rispondi quotando
(a meno che tutti non lavorino come me :P :P :P)