Newsgroup: it.comp.lang.visual-basic
Titolo: E l'apostrofo nelle stringhe con SQL??

Ciao
Nell'eventualità che ne abbiate già parlato chiedo scusa :)
Come risolvere un problema analogo??? (leggi esempio scemo ma efficace
riportato qui sotto, pliz!)
(NB: lascio uno spazio prima e dopo il segno '  solo per evidenziarlo in
questo msg, pur essendo consapevole che non va bene in VB)
Dim Cognome as string, Paese as integer
Paese= 1
Cognome="D'Annunzio"
set RCS = DBS.OpenRecordset("Select * from Abitanti where_
paese="  & paese & " and Cognome=' " & cognome & " ' ")
Questa select da errore in quanto, associando il contenuto delle variabili
al testo, risulta essere:
Select * from Abitanti where paese=1 and Cognome='D'Annunzio'
Come faccio ad ottenere una istruzione SQL che non dia errore e che mi
faccia la stessa ricerca?? :-)
--
Ciao da MioMao!
_______________
Venghi anche lei alla CasaPagina 
http://www.miomao.it
E se non funzia prova con 
http://194.79.203.56/default.htm
_______________
ThisTag>>>  (=- Tag in Stereo Dolby (][) Surround -=)...  <<<FromMioTag!-

Select * from Abitanti where paese=1 and Cognome =" & Chr(34) & cognome & Chr(34) & ""
Ciao,
Moreno
#sirri#@
tin.it
(togliete "#" dall'indirizzo)

faccia la stessa ricerca?? :-)
Al posto degli apostrofi  '  usa  due doppiappici  ""  e si mettera' a
funzionare.
Ciao
By -MES-   Maronese Ettore
http://ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://www.murialdo.it/it_lang_vb

Cognome="D'Annunzio"


 wrote in message
7f4n58$l2t$1...@fe1.cs.interbusiness.it...


postata una) oppure, se hai VB6, la funzione REPLACE().
Dal momento che č una cosa che viene chiesta spesso, e la gente continua a chiederla, perché non fai un esempietto da
postare sul Sito Comune?
Magari sia con la funz "Replace" (VB6) che con una procedura "Made By Hand"...


crisi un software è spaventosa!. :-)
Confermo.... conosco 5 persone che potrebbero fare il beta testing
delle interfacce utente dei programmi, sia con GUI sia senza GUI
Sidewinder

Magari sia con la funz "Replace" (VB6) che con una procedura "Made By
Hand"...
Ehm, scusate il ritardo ma sono un po' indietro con la lettura dei messaggi
del newsgroup... :-)
Venendo al problema: qualche messaggio fa è stata postata una funzione che,
a una rapida lettura, sembrava OK.
Qui sotto c'è quella che uso io che è solo un po' più efficiente perchè usa
la funzione InStr().
Funzione VB4-VB5
----------------------------------------------
Function DblApos(ByVal sBr As String) As String
  'Sostituisce l'apice con due apici consecutivi
  Dim lPos As Long
  Dim sBl As String
  'Se la stringa è vuota esce
  If Len(sBr) = 0 Then Exit Function
  'Cerca l'apice
  lPos = InStr(sBr, Chr(39))
  While lPos <> 0 'Se lo trova
    'Accoda tutta la parte sinistra della prima stringa
    'nella seconda e aggiunge un altro apostrofo
    sBl = sBl & Left(sBr, lPos) & Chr(39)
    'Tronca la prima stringa dopo l'apostrofo trovato
    sBr = Right(sBr, Len(sBr) - lPos)
    'Cerca l'apice successivo
    lPos = InStr(sBr, Chr(39))
  Wend
  'Quando non trova più apici accoda la parte restante
  'della stringa in ingresso
  DblApos = sBl & sBr
End Function
-----------------------------------------------
In VB6 è sufficiente fare
strStringa = Replace(strStringa, "'", "''")
Perciò, se si vuole inglobare il tutto in una funzione (
p.es
. perchè così si
può chiamare sempre DblApos sia che ci si trovi sotto VB4/5 che sotto VB6),
basta scrivere
------------------------------
Function DblApos(ByVal sBr As String) As String
  'Sostituisce l'apice con due apici consecutivi
  DblApos = Replace( sBr, "'", "''")
End Function
------------------------------
Entrambe le funzioni vanno chiamate con
strSql = "SELECT * FROM Authors WHERE Author = '" & DblApos(Text1.Text) &
"';"
Ho inviato questo messaggio in copia al webmaster del sito comune che, se
vorrà, potrà pubblicarlo in modo che sia disponibile in caso di future
richieste analoghe.
Ciao,


 wrote in message
7fui8o$cc7$1...@fe1.cs.interbusiness.it...


Non ho ancora potuto (mannaggia al poco tempo!) leggere con attenzione i
vostri messaggi. Posto queste quattro righe di codice piu' per un parere che
per altro (non le ho ancora usate "sotto stress"). Mi sembra rappresentino
un'altra soluzione, ancora, al problema: mi scuso se sono in errore.
' AString, la stringa in esame;
' ASet,    la sequenza di caratteri da raddoppiare, se contenuti, in
AString.
Public Function Raddoppia(ByVal AString As String, ByVal ASet As String) As
String
Dim iCurPos As Integer
Dim iLenSet As Integer
    iLenSet = Len(ASet)
    Do
        iCurPos = InStr(iCurPos + 1, AString, ASet)
        If iCurPos = 0 Then
            Exit Do
        Else
            AString _
                = Mid$(AString, 1, iCurPos + iLenSet - 1) _
                & ASet _
                & Mid$(AString, iCurPos + iLenSet)
            iCurPos = iCurPos + iLenSet
        End If
    Loop
    Raddoppia = AString
End Function
--
Ciao.
Maurizio