CISA FotoGallery

Statistiche

Tot. visite contenuti : 928359
Home Articoli tecnici Access & Web Un problema con i database e le virgolette

Un problema con i database e le virgolette

Si supponga per esempio di aggiungere un nuovo prodotto denominato "L'ANTIVIRUS" alla tabella Prodotti. Il nome include una virgoletta singola, ovvero l'apostrofo. Cercando di eseguire l'SQL, ne risulterà un errore :

INSERT INTO Prodotti (Nome_Prodotto, Prezzo_Prodotto) value ( 'L'ANTIVIRUS' )

Microsoft Access rileverà la prima virgoletta, quella che precede immediatamente la L in L'ANTIVIRUS e interpreta correttamente la virgoletta come inizio della stringa di testo,. Poi, però, vedrà la virgoletta successiva, ovvero l'apostrofo contenuto nel nome del prodotto, e la interpreterà come fine della stringa. Si tratta quindi di un interpretazione non corretta, perché la stringa interpretata non sarà L'ANTIVIRUS ma L.
Per risolvere il problema, è necessario fare in modo che ogni singola virgoletta venga trasformata in due virgolette doppie. Microsoft Access interpreta le doppie virgolette in una riga come virgolette singole quando si trovano in una stringa di testo.
Quindi un inserimento del tipo :

INSERT INTO Prodotti (Nome_Prodotto, Prezzo_Prodotto) value ( 'L''ANTIVIRUS' )

risulterebbe valido.
Come fare a rendere automatico questo riconoscimento e trasformazione da virgoletta singola a virgoletta doppia?
Il modo più semplice consiste nel creare una piccola funzione VBScript che la esegue automaticamente
Il listato 1.8 contiene una funzione denominata VIRGOLETTE(), che raddoppia le virgolette singole in una stringa:

Listato 1.8 - Funzione VIRGOLETTE
---------------------------------
1 FUNCTION VIRGOLETTE(Stringa)
2 VIRGOLETTE = REPLACE(Stringa, "'","''")
3 END FUNCTION
---------------------------------


APPLICAZIONE
E' possibile aggiungere tale funzione nella parte superiore per esempio della pagina "Inserisci-process.asp" . Poi sarà necessario modificare la riga 18 in :

sqlString = "INSERT INTO Prodotti (Nome_Prodotto, Prezzo_Prodotto) value ( ' "&VIRGOLETTE(Nome_Prodotto)&" ',"Prezzo_Prodotto&")"