[RISOLTO] modifica campo recordset ResultSetConcurrency

Discussioni sulle caratteristiche di database
Rispondi
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

[RISOLTO] modifica campo recordset ResultSetConcurrency

Messaggio da fulk »

Ciao a tutti,

come da titolo la mia esigenza sarebbe quella di modificare il campo di un recordset ma non riesco..
Il problema è dovuto alla ResultSetConcurrency che non fa quello che dovrebbe.
Il valore che mi restituisce infatti è 1007 che corrisponde a READ_ONLY.
Nonostante forzi il suo valore ad UPDATABLE (che sarebbe 1008), non ne vuole proprio sapere ed il valore rimane sempre 1007.
Quindi nel momento in cui vado a modificare il campo con updateString viene restituito l'errore:
The result set is read-only.

Prendendo spunto da qui:
http://wiki.services.openoffice.org/wik ... ase_Access

Il codice che sto utilizzando per scorrere i record della mia tabella è questo:

Codice: Seleziona tutto

sub subAggiornaCampo(sDatabaseName as string)
	Dim DatabaseContext As Object
	Dim DataSource As Object
	Dim Connection As Object
	Dim InteractionHandler as Object
	Dim Statement As Object
	Dim ResultSet As Object
	 
	DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
	DataSource = DatabaseContext.getByName(sDatabaseName)
	 
	Connection = DataSource.GetConnection("","")

	Statement = Connection.createStatement()
	Statement.ResultSetConcurrency = UPDATABLE 'oppure 1008 che è il corrispettivo valore ma rimane sempre 1007 quindi READ_ONLY

	ResultSet = Statement.executeQuery("SELECT ""campo1"", ""campo2"" FROM ""tabella1""") 
	 
	If Not IsNull(ResultSet) Then
	  While ResultSet.next
	    MsgBox ResultSet.getString(1) 'visualizzo correttamente il primo campo
	    MsgBox ResultSet.getString(2) 'visualizzo correttamente il secondo campo
	    ResultSet.updateString(2, "campo_modificato") 'questa istruzione mi restituisce l'errore...
	    ResultSet.updateRow(2) 'utile per aggiornare il recordset appena modificato
	  Wend
	End If
End Sub
Non riesco proprio a capire il motivo per cui i recordset non diventi UPDATABLE :crazy:
Qualcuno può illuminarmi ?
Grazie.
Ultima modifica di fulk il venerdì 22 aprile 2011, 11:21, modificato 1 volta in totale.
OpenOffice 3.3.0 su Windows 7 Professional 64bit
giannidalmi
Messaggi: 62
Iscritto il: lunedì 21 febbraio 2011, 7:00

Re: modifica campo recordset ResultSetConcurrency non funzio

Messaggio da giannidalmi »

vedi cosa riesci a fare con queste istruzioni
usi un rowset perchè il recordset non mi pare sia modificabile
sono di fretta e... vado in vacanza :D
ciao

Codice: Seleziona tutto

 
oRowSet = createUnoService("com.sun.star.sdb.RowSet") 
with oRowSet
      .activeConnection = oConnection
      .CommandType=com.sun.star.sdb.CommandType.TABLE
       .Command=Nometabella
      .execute '
      .movetoinsertrow()
        .updateString(1,form.getbyname("IDprestito").text)  
 	  .updateString(2,form.getbyname("IDlettore").text)  
        .updateString(3,form.getbyname("IDlibro").text)  
        .updateString(4,0)  
        .updateString(5,0) 
        '.updateString(6,form.getbyname("Dataprestito").text)  
        .updateString(7,form.getbyname("durata").text)  
        .insertrow()
  	end with
open office 3.2.1
window 7
fulk
Messaggi: 46
Iscritto il: martedì 19 aprile 2011, 12:11

Re: modifica campo recordset ResultSetConcurrency non funzio

Messaggio da fulk »

Ciao Gianni e grazie per la risposta !!

Partendo dal tuo esempio e "scartabellando" anche il forum inglese sono arrivato alla soluzione che fa per me.
Di seguito il codice di esempio della macro che accetta come parametri:
nome database (senza estensione)
nome tabella
indice del campo da aggiornare (parte da 1)

Questa non fa altro che scorrere la tabella e azzerare il campo.

Codice: Seleziona tutto

sub subUpdateField(sDatabaseName as string, sTableName as string, iFieldIndex as integer)
	
	Dim oRowSet As Object
	
	oRowSet=createUnoService( "com.sun.star.sdb.RowSet" )
	
	'impostazione parametri
	With oRowSet
   		.DataSourceName=sDatabaseName
		.CommandType=com.sun.star.sdb.CommandType.TABLE
		.Command=sTableName
		.execute()
	End With
   
	'scorrimento record tabella
	While oRowSet.next()
  		oRowSet.updateDouble(iFieldIndex,0)
   		oRowSet.updateRow()
	Wend
	
End Sub
Grazie ancora e buone vacanze ;)
OpenOffice 3.3.0 su Windows 7 Professional 64bit
Rispondi