Newsgroup: it.comp.www.asp
Titolo: NEWBIE chiede semplice aiuto

Gentili amici, ho un problema da vero principiante che però, credetemi, non
riesco a risolvere pur cercando in centinaia di siti web (tutti ti fanno
vedere le cose difficili, nessuno le basi !). Se qualcuno di voi può
aiutarmi, anche indirizzandomi ad un sito ben fatto, lo ringrazio
anticipatamente di cuore.
La questione è all'apparenza piuttosto semplice, si tratta di fare una query
su di un database sul web.
Si parte con un form in una pagina web
<form name="prova" method="get" action="pagina.asp"
Inserisci il nome<input type="text" name="nome">
</form>
Essendo alle basi di ASP (ne conosco a malapena la sintassi), ho fatto
generare la pagina asp da Access partendo da una semplice query con un
parametro, ma questi tira fuori una schifezza che risulta sempre sbagliata
(errore di sintassi o altri errori vari) ODBC, connessione al database e
compagnia bella sono perfettamente settati e già provati.
L'errore arriva sulla stringa sql :
sql = "SELECT * FROM elenco WHERE (((elenco.nome)="& Request.form("nome")
Io credo che una ricerca più semplice di questa non si possa fare. Inserisco
un dato in un form, lo passo ad una pagina ASP che si connette al database e
mi SELECTa tutti i record dove un certo campo corrisponde al dato da me
inserito nel form. Ma perchè mi da errore ???? Oppure, una cosa del genere,
voi come la fate di norma ?
Qualsiasi aiuto è ben accetto, ormai sono in preda ad una rassegnata
disperazione. Grazie in anticipo.
Marco Claudio
-- 
Posted from IDENT:qmailr@[151.17.83.2] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

sql = "SELECT * FROM elenco WHERE (((elenco.nome)="& Request.form("nome")
access ha il viziaccio, quando "crea" una query, di inserirci un sacco
di parentesi del tutto ridondanti.
(è anche inutile riportare il nome della tabella prima del campo
quando fai una query che coinvolge una tabella sola: da quale altra
tabella potresti prendere il campo?).
nella tua stringa sql si aprono ben tre parentesi (del tutto
inutili...), e se ne chiude solo una!  e le altre due?
inoltre tutto mi fa pensare che il campo su cui esegui il filtro where
sia di tipo testo.  in questo caso il valore da paragonare dev'essere
compreso tra apici.
la tua stringa dovrebbe diventare:
sql = "SELECT * FROM elenco WHERE nome = '" & Request.form("nome") &
"'"
altro problema: hai usato un nome "banale" per il campo della tabella.
"nome" potrebbe benissimo essere una parola riservata, cioè una parola
che il motore del db usa per scopi suoi.  utilizzandola nel codice si
potrebbero avere ambiguità.  ad es., è conclamato che usare un campo
di nome "note" crea problemi.
quindi abbi più fantasia e dai un nome diverso a quel campo.  usa ad
es. NomeBattesimo, o, se proprio vuoi essere politically correct (vai
a chiedere il nome di battesimo ad un musulmano o ad un ebreo...),
PrimoNome.
stesso dicasi per nomi quali "data", "giorno" ecc..  non usare nemmeno
vocali accentate, come in "città".
torniamo agli apici.  l'apice serve per delimitare un pezzo di testo
da paragonare al campo.  se devi paragonare una stringa che contiene a
sua volta un apice, ad es. "... where comune = 'L'Aquila'",
l'interprete sql crederà che tu vuoi paragonare 'L' e poi troverà un
"Aquila" del quale non saprà che farsene.  in questo caso la regola
sintattica è: raddoppiare l'apice, cioè "...where comune =
'L''Aquila".
per fare ciò si usa la funzione di vbscript replace, il cui
funzionamento è intuitivo: replace("L'Aquila", "'", "''") restituisce
"L''Aquila".
-- 
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport

 sql = "SELECT * FROM elenco WHERE (((elenco.nome)="& Request.form("nome")
Io invece scriverei: (non capisco perchè tutte quelle parentesi:
sql = "SELECT * FROM elenco WHERE elenco.nome = '" & Request.form("nome") &
"'"
N.B. dopo l'= c'è l'apice e dopo il doppio apice; e poi per finire: doppio
apice, apice, doppio apice.
In tal modo la stringe sql sarà :
SELECT * FROM elenco WHERE elenco.nome = 'pippo'
e non
SELECT * FROM elenco WHERE (((elenco.nome)=pippo

sql = "SELECT * FROM elenco WHERE nome = '"& Request.form("nome") & "'"
In caso di ricerca su un campo testo occorre usare l'apice singolo seguito
dalle virgolette, il testo da ricercare, le virgolette, l'apice e di nuovo
le virgolette.
VincePik

sql = "SELECT * FROM elenco WHERE (((elenco.nome)="& Request.form("nome")
alla stringa sql che hai postato, mancano gli apici (sempre se il
campo nome e' un campo testo, come credo che sia...)
sql = "SELECT * FROM elenco WHERE(((elenco.nome)= '
"&Request.form("nome") & "'"
Ciao


Se l'errore ti si presenta nella query ti consiglio di vederla come viene
eseguita da Access.
Per farlo basta che aggiungi le seguenti righe (generalmente):
Response.write sql ' Scrive la query cos' come l'hai creata nella pagina
Response.End    ' Interrompe l'esecuzione dello script
Tornando alla tua query se Request.form("nome") = "Rossi"
La tua query sarebbe :
SELECT * FROM elelnco WHERE (((elenco.nome)=Rossi
Errori:
1) Le parentesi ne apri tre e ne chiudi una
2) Rossi viene interpretato come parametro e non come stringa
Correzzioni:
1) Toglile tutte
2) Aggiungi gli apici a Rossi
Cioč:
sql = "SELECT * FROM elenco WHERE elenco.nome='"& Request.form("nome") & "'"
Se poi vuoi fare meglio:
sql = "SELECT * FROM elenco WHERE elenco.nome='"&
Replace(Request.form("nome"),"'","''") & "'"
Questo ti permette d'includere gli apostrofi nella ricerca!
Ciao!!

Gentili amici, vi ringrazio di cuore per l'aiuto che mi avete dato,
finalmente sono riuscito in questo primo passo che a me sembra grandioso,
avere una pagina HTML con un form che chiama una pagina ASP la quale, in
base al dato inserito dall'utente nel FORM ricerca in un DB al quale si
connette via ODBC. Wow ! Più lungo a dirlo che a farlo. Ma senza di voi
non ce l'avrei mai fatta (grazie per avermi aperto gli occhi su Access !!!).
Ora sono così spudorato da chiedervi aiuto per il passo successivo.
Mettiamo il caso che nel FORM si richieda all'utente di inserire "Nome" e
"Cognome", due campi di testo.
Nella stessa pagina HTML del FORM, io ho un JavaScript che prende gli input
dell'utente, li corregge nella formattazione e crea un'unica variabile
stringa del tipo "Nome Cognome" (diciamo che elimina le minuscole e mette
certe maiuscole, il mio funziona così).
Come faccio poi a dire alla pagina ASP che la variabile con cui mi deve
confrontare un campo di una tabella del mio DB è questa nuova variabile
stringa contenente "Nome Cognome" e non i campi del FORM introdotti
dall'utente, quasi sempre con formattazione "non compatibile" con il db ? Ci
ho provato in mille modi guardando mille esempi, ma ottenendo altrettanti
errori di diversi tipi, e davvero ci dev'essere qualche teoria di base che
mi manca sul passaggio di parametri e simili.
Vi ringrazio calorosamente se avrete la pazienza di risolvere anche questo
mio quesito, che per voi sarà semplice, ma per noi NIUBBI' fonte di mille
imprecazioni...
Un caro saluto.


dall'utente, quasi sempre con formattazione "non compatibile" con il db ? Ci
mah, io sposterei l'elaborazione delle stringhe sul server.  ti
sconsiglio dal dare ai campi delle tabelle nomi banali tipo "Nome",
"Data", "Note" ecc.: potrebbero essere parola riservate e si
creerebbero ambiguità.
