961 messaggi dal 29 aprile 2002
ciao, mi trovo di fronte ad un problema mai riscontrato e che non riesco a risolvere.
ho questa query
 sqlvoti="select * from voti, sondaggi where voti.id=sondaggi.id"

dove relazione i due contatori delle due tabelle (i campi "id")..
più in basso faccio un update del recordset semplicemente scrivendo
rs.update

quando vado a estare la pagina il browser mi dà questo errore:

Tipo di errore:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Driver ODBC Microsoft Access] Impossibile aggiornare. Database o oggetto di sola lettura.


Il database non è in sola lettura, in quanto se cambio la query in questo modo:
sqlvoti="select * from voti"

non ricevo nessun errore e il recordset si aggiorna normalmente..

Quale può essere il problema?
Ciao ;)
3.122 messaggi dal 16 maggio 2002
La tua query estrae tutti i campi di entrambe le tabelle, perciò ti trovi con due campi di nome id che non riesci a gestire. Devi usare un alias per almeno uno dei due.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
961 messaggi dal 29 aprile 2002
e in che modo? cioè mi fai un esempio? ;)
3.122 messaggi dal 16 maggio 2002
Devi specificare "a mano" tutti i campi di almeno una tabella, in modo da non avere nomi di campi uguali. Esempio:

select voti.id as voti_id, voti.campo1, voti.campo2, sondaggi.*
from voti, sondaggi
where voti.id=sondaggi.id

Comunque per fare un update ti consiglio vivamente di non aprire recordset ma di eseguire la solita query di update

UPDATE tabella
SET campo1=valore1
WHERE condizione

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
961 messaggi dal 29 aprile 2002
purtoppo nel mio caso non posso farlo.. o almeno credo di non poterlo fare..
Ti spiego:
Si tratta di uno script per fare un sondaggio. Ho due tabelle nel database:
"sondaggi" e "voti"

nella tabella sondaggi ci sono 6 campi:
id-domanda-risposta1-risposta2-risposta3-data

nella tabella voti ci sono 4 campi:
id-opzione1-opzione2-opzione3

lo script completo è questo: (ho cambiato la select come dici tu ma mi dà sempre lo stesso problema (database o oggetto di solalettura) :(

<%
'prima di iniziare l'elaborazione, eseguo un controllo in maniera 
'da bloccare l'esecuzione e stampare a video un messaggio di errore
' nel caso l'utente abbia gia votato o non abbia 
'selezionato nessuna opzione. Il controllo è basato sui cookie.

'estraggo dal cookie il valore
dim controllo
controllo = Request.Cookies("sondaggio")("controllo") 

'se la variabile controllo è uguale a 1 l'utente ha gia votato
if controllo = 1 then
 Response.Write "Hai gia votato"

'controllo se è stata selezionata un'opzione nel form
elseif request.form("voto") = "" then
  Response.Write "Non hai ancora votato..? Fallo adesso!"
else 

'l'utente non ha ancora votato, quindi creiamo il cookie in 
'maniera da bloccare la votazione in futuro
  Response.Cookies("sondaggio")("controllo") = 1
  
  'ci connettiamo al database

  dim rsvoti
  set rsvoti = Server.CreateObject("ADODB.Recordset")
  sqlvoti="select voti.id as voti_id, voti.opzione1, voti.opzione2, voti.opzione3, sondaggi.* from voti, sondaggi where voti.id=sondaggi.id"
  rsvoti.Open sqlvoti, conn,3,3 
  
 
  'prendiamo tutti i valori dal database 
dim opzione1, opzione2, opzione3, voto
opzione1= rsvoti.fields("opzione1")
opzione2= rsvoti.fields("opzione2")
opzione3= rsvoti.fields("opzione3")

'prende il valore dal form 
voto = request.form("voto")

'controllo il valore che ha la variabile voto, ossia la votazione 
'fatta dall'utente, e dopo aver incrementato di 1 il valore presente
'nel database, lo aggiorno 
Select Case voto
Case "primo"
  opzione1 = opzione1 + 1
  rsvoti("opzione1")=(opzione1)
  rsvoti.Update
Case "secondo"
  opzione2 = opzione2 + 1
  rsvoti("opzione2")=(opzione2)
  rsvoti.Update 
Case "terzo"
  opzione3 = opzione3 + 1
  rsvoti("opzione3")=(opzione3)
  rsvoti.Update
End Select

'libero risorse   
'rsvoti.close
'set rsvoti = nothing

'calcolo la somma dei valori presenti nel database 
dim total, unoper, dueper, treper
total= CDbl((opzione1)+(opzione2)+(opzione3))

'per ogni valore calcolo la percentuale visualizzando solo un valore
' dopo la virgola 
unoper = FormatPercent((opzione1 / total), 1) 
dueper = FormatPercent((opzione2 / total), 1) 
treper = FormatPercent((opzione3 / total), 1) 


'prendo le percentuali dei voti e li converto in interi.
' Questo servirà per visualizzare la barra nel grafico.
dim unobarra, duebarra, trebarra
unobarra = FormatNumber(unoper) * 100 
duebarra = FormatNumber(dueper) * 100 
trebarra = FormatNumber(treper) * 100 

%>


Prima di questo script apro un altro recordset selezionando la tabella "sondaggi" per stampare domanda e risposte.. (una semplice select)
Mi puoi aiutare? ;)
3.122 messaggi dal 16 maggio 2002
Prima cosa: non hai fissato il sondaggio che vuoi votare. Quindi devi modificare la query specificando l'id del sondaggio

sqlvoti="select voti.id as voti_id, voti.opzione1, voti.opzione2, voti.opzione3, sondaggi.* from voti, sondaggi where voti.id=sondaggi.id and sondaggi.id=" & id_sondaggio

Poi da questa riga.

'prendiamo tutti i valori dal database
...

usa il codice seguente

'prende il valore dal form 
voto = request.form("voto") 

'controllo il valore che ha la variabile voto, ossia la votazione 
'fatta dall'utente, e dopo aver incrementato di 1 il valore presente 
'nel database, lo aggiorno 
Select Case voto 
Case "primo" 
voto = 1
Case "secondo" 
voto = 2
Case "terzo" 
voto = 3
End Select

sql = "UPDATE voti SET opzione" & voto & " = opzione" & voto & " + 1 WHERE voti.id=" & id_sondaggio
conn.Execute(sql)

Poi torna alla riga
'calcolo la somma dei valori presenti nel database

aprendo di nuovo il recordset con la query precedente.

In ogni caso è strano che non ti venga eseguito l'aggiornamento anche con il recordset (usi Access, vero?! MySql non lo permette), sei sicuro che il database non sia davvero in sola lettura? E' certamente un metodo poco performante, ma da lì a non funzionare del tutto...
Prova così e fammi sapere.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
9 messaggi dal 11 giugno 2002
L'errore di Database solo di lettura è dato anche nel caso in cui l'utente IUSR_nomeserver (utente di default che accede al sito) non ha l'accesso in scrittura sul db.
Quindi assicurasri che nelle proprietà del file mdb esista l'utente e abbia accesso in lettura e scrittura

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.