Newsgroup: it.comp.www.asp
Titolo: Oggetto: ADDNew non supportato

Spett.le Ng
    ho realizzato per il mio sito un'area di prenotazioni riservata agli
utenti iscritti.
Nello script di salvataggio dei dati dell'utente che si iscrive come ultima
riga dopo aver prelevato tutte le variabili necessarie con:
"rsUsers.AddNew"
Quando il server raggiunge questa riga mi compare questo errore:
ADODB.Recordset error '800a0cb3'
Object or provider is not capable of performing requested operation.
/AddUser.asp, line 13
Vorrei precisare che non conosco benissimo asp. Questa non vuole essere una
scusante ma spero sarete clementi con me... oppure prendetemi a mazzate.
Posto qui sotto il codice della pagina
Un grazie a chiunque vorrà aiutarmi.
<!--#include file="Clssfd.asp"-->
<%
 Dim rsUsers
 Set rsUsers = Server.CreateObject("ADODB.Recordset")
 rsUsers.Open "Person", objConn
 If Session("PersonID") <> "" Then
  rsUsers.Filter = "PersonId = '" & Session("PersonID") & "'"
 Else
  rsUsers.Filter = "EmailAddress = '" & Request.Form("email") & "'" & _
       "AND Password = '" & Request.Form("password") & "'"
 If rsUsers.EOF Then
  rsUsers.AddNew
 End if
 End If
 rsUsers("EmailAddress") = Request.Form("email")
 rsUsers("Password") = Request.Form("password")
 rsUsers("FamilyName") = Request.Form("FamilyName")
 rsUsers("GivenName") = Request.Form("GivenName")
 rsUsers("StreetAddress1") = Request.Form("Address1")
 rsUsers("StreetAddress2") = Request.Form("Address2")
 rsUsers("City") = Request.Form("City")
 rsUsers("State") = Request.Form("State")
 rsUsers("PostalCode") = Request.Form("PostalCode")
 rsUsers("Country") = Request.Form("Country")
 rsUsers("Active") = True
 rsUsers("LastLogin") = Now
 rsUsers.Update
 Dim strName, strValue
 For each strFiled in rsUsers.Fields
  strName = strField.Name
  strValue = strField.value
  Session(strName) = strValue
 Next
 Sessio("blnValidUser") = True
 Response.Redirect "MenuUsers.asp"
%>


Pero' con questo script andrai incontro ad altri problemi: infatti tu dai
per scontato che il tipo dati contenuto nel form sia lo stesso del tipo dati
contenuto nel field del record.
Non sempre e' vero.
Intanto VBSCript utilizza un solo tipo dati che e' "VARIANT" e quando tu
esegui
rsUsers("EmailAddress") = Request.Form("email")
esegui un casting implicito tra variant e string.
Per fare una cosa fatta benino dovresti scrivere
rsUsers("EmailAddress") = cstr(Request.Form("email"))
e gestire eventuali errori.
Anzi, a rigor di logica dovresti fare una cosa ancora + raffinata: ti crei
un componente (si possono fare anche con VBScript) che accetta come dati in
entrata un recordset e un dictionary, il primo puo' essere anche vuoto, il
secondo contiene i nomi dei campi ed i relativi valori.
Poi il componente analizza il recordset, prende seleziona il tipo di dati +
adatto per ogni campo e verifica che il valore contenuto nel dictionary,
relativo al campo corrispondente, sia del tipo giusto e solo allora
inserisce il dato, altrimenti restituisce un errore.
Se ci riesci, sappi che non dovrai mai piu' preoccuparti di scrivere codice
che aggiorni qualsivoglia recordset: ti bastera' ogni volta richiamare
questo oggetto e passargli recordset e dictionary.
Per informazioni sull'oggetto "SCRIPTING.Dictionary" consulta
msdn.microsoft.com
 oppure scarica da microsoft la documentazione di
windows.script V5.6 e buona lettura.
Ciau
Andrea

inserisce il dato, altrimenti restituisce un errore.
E' questo che non mi è chiarissimo
Cosa intendi per "analizza il recordset"? Come è possibile capire che
un generico campo di un recordset (diciamo rs("ID")) vuole uno
specifico tipo di dati (mettiamo un INT)?
Ciao
Daniele
inmodis at tiscalinet dot it

specifico tipo di dati (mettiamo un INT)?
E questa invece era una domanda cretina.
Pardon.
Oggetto Fields, naturalmente. Vado a dipingermi la lingua di nero :-(
Ciao