Newsgroup: it.comp.lang.visual-basic
Titolo: Stringhe SQL, apostrofi e ASP

Ciao a tutti.
Non so se la sede giusta è questa, ma trattandosi di VBScript vedo
un'affinità !!!
Ho un problema, apparentemente banale, con una stringa Sql che interroga un
Db Access in un server web. La tabella contiene un campo, festivita, dove
sono indicate delle feste religiose (p.e. Natale, Ascensione, Pentecoste ecc
ecc). La stringa che compongo, e che FUNZIONA sul web, dopo le aperture di
rito ecc ecc, è la seguente
rs.open "SELECT * FROM schede where festivita = ' " &
Request.Form("select1") & " ' ", conn
dove select1 è il valore del campo nella form (method=POST action=feste.asp)
da dove scelgo di visualizzare i dati di quella festa.(ho inserito degli
spazi, in questa mail, per evidenziare la presenza del delimitatore di
testo).
Fin qui, e con quei dati, tutto bene.
Il problema sorge quando una festa, è, per esempio, Sant'Anna.
La stringa composta viene passata, ma viene generato un errore, in quanto,
ovviamente, Anna è valutata come operatore e non riconosciuta come stringa,
e la valutazione della stringa si arresta all'apostrofo dopo Sant'.
Ho simulato lo stesso inconveniente in Access, ed ottengo lo stesso
problema. Guardando l'help, trovo altri modi di comporre la stringa, con i
doppi apici """", e risolvo il problema simulando il comportamento in
Access, componendo la stringa di cui sopra in
rs.open "SELECT * FROM schede where festivita = """ &
Request.Form("select1") & """", conn
Questa stringa funziona, in Access, ma non ne vuol sapere nel Web, anche se
l'errore è modificato e mi richiede un parametro aggiuntivo (too few
parameter).
La stringa composta, e visualizzata nel web con Response.write, sembra però
corretta; è, infatti, "SELECT * FROM schede where festivita = "Sant'Anna"
Dove si trova l'arcano ?
Ciao e grazie a tutti
Nicola

Prova a scrivere la stringa SQL cosi' :
SELECT * FROM schede where festivita = 'Sant''Anna'
(con gli apici singoli)
Ciao Fabrizio

Request.Form("select1") & " ' ", conn
Ciao, quasi omonimo. :-)
Fabrizio Macedonio ti ha già dato la risposta corretta.
Se vuoi risolvere in maniera più generale il problema puoi utilizzare la
routine che uso io in VB (adattata per le ASP).
<%
Function DblApos(ByVal sBr)
  Dim lPos
  Dim sBl
  If Len(sBr) = 0 Then Exit Function
  lPos = InStr(sBr, Chr(39))
  While lPos <> 0
    sBl = sBl & Left(sBr, lPos) & Chr(39)
    sBr = Right(sBr, Len(sBr) - lPos)
    lPos = InStr(sBr, Chr(39))
  Wend
  DblApos = sBl & sBr
End Function
%>
poi la richiami con
<%
rs.open "SELECT * FROM schede where festivita = '" &
DblApos(Request.Form("select1")) & "';", conn
%>
Se vuoi, invece di scriverla in ogni pagina ASP, metti la funzione in un
file (
p.es
. dblapos.inc) nella root del tuo server web e poi la richiami in
tutte le pagine in cui ti serve con
<!--#include virtual = "/dblapos.inc"-->
Ciao,
   <--< Nik >-->
Per rispondermi in E-Mail togliere "deleteme" dall'indirizzo.
To reply me by E-Mail remove "deleteme" from my address.

Ciao a tutti.
Ho risolto il problema che ho postato venerdě 21 maggio "Stringhe SQL
Apostrofi e ASP". Occorre effettivamente creare una funzione che affianca un
altro
apostrofo chr(39) all'eventuale trovato nella stringa passata.
Eccola.
<%
Function ImpostaApostrofo(StringaIn)
Dim StringaNuova
Dim StringaPassata
Dim Lunghezza
Dim i
StringaNuova = ""
StringaPassata = StringaIn
Lunghezza = Len(StringaPassata)
For i = 1 To Lunghezza
    StringaNuova = StringaNuova & Mid(StringaPassata, i, 1)
    If Mid(StringaPassata, i, 1) = Chr(39) Then
StringaNuova = StringaNuova & Mid(StringaPassata, i, 1)
    End If
Next
StringaPassata = StringaNuova
ImpostaApostrofo = StringaPassata
End Function
%>
Ringazio Fabrizio Macedonio e Nicola (quasi omonimo) Pietralunga per i loro
preziosi suggerimenti che
ho unito alle mie "farneticazioni"...... ;-)
Ciao Nicola