Newsgroup: it.comp.www.asp
Titolo: Problema con script: non ci capisco più niente!

Qualcuno mi sa spiegare perchè il seguente script non funziona ? Ovvero, a
volte funziona, a volte non funziona! A volte addirittura fa delle cose non
richieste, come creare delle directory virtuali! Ad esempio, nella directory
principale dove risiedono le pagine, 
teachingonline.it
, mi crea le directory
virtuali public ed al suo interno la directory docenti.mdb ...
Per quale motivo ?
Ad ogni modo, quello che vorrei creare è uno script che raccolti i dati in
un form, li inserisca in una tabella, AnagrafeDocenti del database Docenti.
Ho provato lo script, usando PWS, e alcune volte funziona correttamente, poi
improvvisamente non ne vuole sapere di funzionare. O si blocca sulla riga
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
server.mappath("\
teachingonline.it
\Public") & "\Docenti.mdb"
oppure si blocca sull'istruzione:
rs.update
Il funzionamento dellos cript è molto semplice:
1. si preleva l'indirizzo di email dal form,
2. verifico se la mail è già esistente
3. se non esiste, allora inserisco Nella tabella tutti i dati prelevati dal
form
<%
email=request.form("email")
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
server.mappath("\
teachingonline.it
\Public") & "\Docenti.mdb"
sql = "SELECT * FROM AnagrafeDocenti where email LIKE '" & email & "'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
if rs.eof then
rs.AddNew
rs.fields("Cognome") = request.form("cognome")
rs.Fields("Nome")=request.form("nome")
rs.Fields("via")=request.form("via")
rs.Fields("numero")=request.form("numero")
rs.Fields("cap")=request.form("cap")
rs.Fields("città")=request.form("city")
rs.Fields("provincia")=request.form("provincia")
rs.Fields("telefono")=request.form("telefono")
rs.Fields("cellulare")=request.form("cellulare")
rs.Fields("fax")=request.form("fax")
rs.Fields("email")=request.form("email")
rs.Fields("password")=request.form("password1")
rs.Fields("titolo_studio")=request.form("titolostudio")
rs.Fields("professione")=request.form("professione")
rs.update
end if
RS.Close
set rs=nothing
conn.Close
set conn=nothing
%>

Per quale motivo ?
<ZAP>
L'unica cosa che posso pensare e' che tu abbia dei seri problemi
a livello di Server, e che questo comporti dei malfunzionamenti
anomali sul sistema.
Verifica con l'amministratore del sistema.
Davide

 wrote in message
39851ec8...@news.cis.dfn.de...

Ciao Davide,
ti ringrazio per la tua risposta, ma avevo dimenticato di agiungere che
anche a livello locale (con PWS) ho dei problemi. Uno dei messaggi che
ottengo molto frequentemente è il seguente:
Microsoft OLE DB Provider for ODBC Drivers errore "80004005"
[Microsoft][Driver ODBC Microsoft Access]Errore nella riga
/
teachingonline.it/invia_dati.asp
, riga 58
e la riga 58 è l'istruzione
rs.update
Quello che mi lascia perplesso è che a volte riesco ( a livello locale) ad
inserire i dati nella tabella, altre volte invece  (quasi sempre!) ottengo
l'errore sull'istruzione di aggiornamento.
Aggiungo inoltre che uso Microsoft Access'97 per la creazione dei database.
Grazie,
Francesco

 wrote:

Hai gia' provato ad usare ODBC invece che OLE DB come driver di
collegamento ? Che succede in quel caso ?
Davide

 Davide
  Ciao, Davide,
usare ODBC non mi è servito, perchè l'errore non stava nè nel server nè
nello script ... il problema stava nell'uso che facevo delle tabelle del
database, e della struttura delle tabelle.
A pensarci mi sento un poco idiota, ma ho scoperto l'errore che facevo.
Per default Access ha settato a "Non accettare valori di lunghezza zero" di
tutti i campi di tipo testo. Inoltre, a peggiorare le cose, alcuni campi
erano indicizzati e non ammettevano duplicati.
Cosa succedeva, allora:
provando e riprovando, saltavo dei campi nella form di acquisizione dei
dati, e questo mi causava il primo tipo di errore.
Oppure, provando ad inserire tutti i campi del form, inserivo dei dati
duplicati, la username, ad essere pignoli. Il campo username era indicizzato
e non ammetteva duplicati, e questo alla fine generava un errore (il secondo
tipo) quando tentavo di aggiornare la tabella del database.
Da ciò l'errore sull'istruzione
rs.update
Ora, scoperto l'errore (o gli errori), come faccio a ritornare al form,
richiedendo i valori mancanti, oppure chiedendo di modificare valori non
accettabili, il tutto senza dover cancellare i dati precedentemente immessi,
ma che comunque sono corretti ?
Ti ringrazio per la gentilezza che hai dimostrato nel rispondere a tutti i
miei quesiti
Francesco

ma che comunque sono corretti ?
Devo supporre che la tua form invii i suoi dati ad una pagina ASP che
fa' l'inserimento.
In "testa" a questa pagina ci metti:
<%
	' verifica dei dati
	Errori = 0
	TestoErrore = ""
	If Request("nomecampo") = "" Then
		' il campo 'nomecampo' non puo' essere nullo !!!
		Errori = Errori + 1
		TestoErrore = TestoErrore & "Il campo 'nomecampo' e'_
			 obbligatorio!<br>"
	End If
	If Request("altrocampo") = "" Then
		' nemmeno questo !
		Errori = Errori + 1
		TestoErrore = TestoErrore & "Il campo 'altrocampo' e'_
			 obbligatorio!<br>"
	End If
	'....
	'procedi e controlli tutto
	'....
	If Errori > 0 Then
		Response.Write TestoErrore
%>
		qui' riporti il codice della stessa form
		da cui prendi i dati, ma aggiungendo ad
		ogni <INPUT il tag VALUE='<%=Request("nomecampo")'>
		dove nomecampo e' il nome dello stesso campo
		di input. In modo da "riempire" la form con
		gli stessi dati inviati dall'utente
<%
	Else
		' tutti i controlli sono stati superati.
		' puoi inserire i dati nel database
	End If
%>
Ovviamente questo non ti controlla la nonduplicazione delle
chiavi nel database. Per questo l'unica e' verificare prima
quale e' la chiave univoca ed accertarsi che non ci siano
duplicati (vedi il mio articolo sulle Transazioni su
www.aspitalia.com
 per l'implementazione delle Transazioni
ed il controllo degli errori).
E' un modo un po' macchinoso, ma e' funzionante. Un sistema
molto piu' sofistico e' quello di spostare i controlli sul
Client, cioe' farli usando il DHTML.
Vedi 
www.soft-land.org/articoli/aspdhtml.html
 per una prima
introduzione sull'argomento (ed i relativi PRO e CONTRO).
Davide