Newsgroup: it.comp.www.asp
Titolo: errato update

Salve a tutti
Ho qualche problemino con il seguente script che posto per intero al fine di 
renderlo più chiaro (spero). Lo script in questione dovrebbe verificare se 
all'interno di una tabella di un database fatto in access 2000 esistono 
valori identici per l' "IDCamera" e per Il "Prezzo" e nel caso in cui li 
trovi effettuare l' update quindi modificare il prezzo per le date trovate o 
nel caso contrario in cui non ne verifichi l'esistenza inserire i nuovi 
valori. Tutto bene in fase di verifica quindi riesco a verificare se ci sono 
o meno i campi e a determinare se bisogna effettuare un Update o un Insert 
ma e qui c'è il problema quando effettuo l'update non mi modifica i campi ma 
ne inserisce di nuovi essendo certo che effettua l'update anche perchè per 
verifica come noterete nel codice ho inserito dei response.write(sql) per 
vedere quale delle due query andava ad effettuare. Qualcuno ha qualche 
suggerimento ? Personalmente ipotizzavo che il problema potesse essere sulle 
date che attualmente nel database sono di tipo data ma ho provato a 
modificarle anche come tipo stringa modificando ovviamente la query ma 
nulla. Non so cosa provare magari una vostra occhiata mi troverà subito il 
problema che non riesco a vedere.
Grazie mille
Il codice incriminato:
-------------------------------------------------------------------------------------------------------------------------------------------------
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
Response.buffer = true
Dim objConn, strConnect, data_inizio, data_fine, camera, supplemento, valore
Set objConn =  Server.CreateObject("ADODB.Connection")
Set rstVer = Server.CreateObject("ADODB.Recordset")
Set rstIns = Server.CreateObject("ADODB.Recordset")
Set rstUpd = Server.CreateObject("ADODB.Recordset")
strConnect = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & 
server.MapPath("/mdb-database/reservation.mdb")
objConn.Open strConnect
If request.Form("data_inizio") = "" OR request.Form("data_fine") = "" OR 
request.Form("camera") = "" OR request.Form("valore") = "" Then
 response.Redirect("prezzi.asp?errore=1")
Else
data_inizio=CDate(request.Form("data_inizio"))
data_fine=CDate(request.Form("data_fine"))
camera=CInt(request.Form("camera"))
valore=0 & Replace(request.Form("valore"),",",".")
 For data = data_inizio To data_fine
 sql="SELECT * FROM prezzi WHERE IDCamera="&camera&" AND Data=#"&data&"#"
 rstVer.Open sql, objConn, 3, 3
 If rstVer.EOF Then
  aggiorna = 0
 Else
  aggiorna = 1
 End If
 rstVer.Close
 Next
 If aggiorna = 0 Then
  For data = data_inizio To data_fine
  sql="INSERT INTO prezzi(IDCamera, Data, Prezzo) 
VALUES("&camera&",#"&data&"#,"&valore&")"
  rstIns.Open sql, objConn, 3, 3
  response.Write(sql)
  Next
  'response.Redirect("prezzi.asp")
 Else
  For data = data_inizio To data_fine
  'data = CStr(data)
  sql="UPDATE prezzi SET IDCamera="&camera&", Data=#"&data&"#, 
Prezzo="&valore&" WHERE IDCamera='"&camera&"' AND Data=#"&data&"#"
  rstUpd.Open sql, objConn, 3, 3
  response.Write(sql)
  Next
  'response.Redirect("prezzi.asp")
 End If
End If
%> 

  Next
Evidentemente non trova mai il record, quindi la variabile "aggiorna" viene
sempre impostata su "0" e quindi eseguito di seguito la query per
l'inserimento.
Innanzitutto ti consiglio di controllare che venga realmente eseguito il
ciclo "for...next" per le date. Controlla con un banale Response.Write.
Anche se sarebbe meglio scrivere:
sql="SELECT * FROM prezzi WHERE IDCamera="&camera&" AND
Data>=#"&data_inizio&"# and Data<=#" & data_fine &"#"
 rstVer.Open sql, objConn, 3, 3
If rstVer.EOF Then
  aggiorna = 0
 Else
  aggiorna = 1
 End If
 rstVer.Close
Senza cicli "for...next".
Ti consiglio inoltre di verificare il campo data su cui esegui il filtro.
Prova ad eseguire la select senza controllare la data:
For data = data_inizio To data_fine
 sql="SELECT * FROM prezzi WHERE IDCamera="&camera
rstVer.Open sql, objConn, 3, 3
E verifica se viene eseguito l'update o l'insert.
Ciao
-- 
AZ [Microsoft - .NET MVP]
Mia Home page: 
http://ciclismo.sitiasp.it
Asp.Net community: 
http://www.aspitalia.com
Il mio blog: 
http://blogs.aspitalia.com/az