- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- selezione da elenco e apostrofi
-
@franciros said:
...Io popolo l'elenco con questa sql:
SELECT cognone FROM [elenco aree] GROUP BY cognome
grazie
Franciros
Ciao! basta che all'interno di SQL sostituisci l'apostrofo con un altro carattere (e poi ti ricordi di ripristinarlo quando generi l'url della scheda personale:
SELECT Replace(Cognome, ""''"",""*"") AS Cognome1 FROM [elenco aree] GROUP BY cognome
N.B.:
Il secondo parametro passato alla funzione Replace (funzione di SQL) è costituito da:
doppio apice+doppioapice+apice singolo+apice singolo+doppio apice+doppio apice.Il terzo parametro:
doppioapice+doppioapice+asterisco+doppioapice+doppioapicePer la cronaca:
>> La sequenza di due doppi-apici consecutivi dice all'inteprete ASP di passare un solo doppio-apice alla string SQL (se ce ne fosse solo uno sarebbe interpretato malamente come fine stringa).
>> La sequenza di due apici-singoli dice all'interprete SQL di considerare il carattere apice-singolo come non identificatore di parametro (stringa) ma per quello che è: il carattere apice-singolo!Si, lo so è un casino ma è così!! Che ci volete fà?
Poi tramite ASP ritrasformi l'asterisco in apice singolo...
-
Poi tramite ASP ritrasformi l'asterisco in apice singolo...
....perdona la mia ignoranza, ma come?
-
Sempre con la funzione replace (di vb.script in questo caso):
<% ... Dim cognome_da_db cognome_da_db = Replace(myRecordSet("Cognome1"),"*","'") .... %>
-
aggiungo anche che al limite, se tutti questi apici ti intrigano :D:D puoi usare il codice html per salvare gli apici nel db
Replace(Cognome,"'","&# 39;")
(tra il cancelletto e il 39 lo spazio lo devi togliere)Ciao
-
la stringa sql la modifico così:
SELECT Replace(cognome, ""''"",""*"") AS cognome1 FROM [elenco aree] GROUP BY cognome
però mi ritorna questo errore:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][Driver ODBC Microsoft Access] Funzione 'Replace' non definita nell'espressione.
Domanda: come fa a riconoscere cognome1 nella select?
Poi il rimettere a posto la stringa, come tu dici l'ho fatto prima del passaggio parametro per il riconoscimento della pagina, e cioè
<%
Dim cognome_da_db
cognome_da_db = Replace(cognome("cognome1"),"*","'")
While (NOT cognome.EOF)
%><option value="<%=(cognome.Fields.Item("cognome_da_db").Value)+"/default.asp"%>"><%=(cognome.Fields.Item("cognome_da_db").Value)%></option>
<%
cognome.MoveNext()
Wend
If (cognome.CursorType > 0) Then
cognome.MoveFirst
Else
cognome.Requery
End If
%>cmq non funziona dal momento che mi da errore sull'sql
ciao
F
-
@franciros said:
Ciao a tutti dovrei selezionare da un elenco a cascata un cognome che poi passo come collegamento a pagina personale. Il **problema **si pone ogni qualvolta devo passare un cognome con il maledetto apostrofo. Io popolo l'elenco con questa sql:
SELECT cognone FROM [elenco aree] GROUP BY cognome
grazie
Franciros
Quale sarebbe il problema?
-
Il problema è dato dai nomi con l'apostrofo, come avrai letto sopra. Se seleziono i nomi normali è tutt'ok e mi smista alla pagina relativa al nome selezionato, viceversa se seleziono il mome apostrofato mi blocca la selezione e non va avanti. Ho provato la soluzione propostami da paocavo ma da errore e quindi mi sono impantanato.
grazie
franciros
-
Se ho capito bene ed utilizzi l'evento javascript onchange sulla select per inviare l'utente alla pagina relativa a quel cognome allora prova così:
<% Dim cognome_da_db cognome_da_db = Replace(cognome("cognome1"),"*","'") While (NOT cognome.EOF) %><option value="<%=**Replace(**(cognome.Fields.Item("cognome_da_db").Va lue)**,"'","\'")**+"/default.asp"%>"><%=(cognome.Fields.Item("cognome_da_db").Value)%></option> <% cognome.MoveNext() Wend If (cognome.CursorType > 0) Then cognome.MoveFirst Else cognome.Requery End If %>
Ho replicato l'apice con lo stesso preceduto dal backslash altrimenti va in errore javascript.
-
il problema però va risolto prima nella sql che popola la lista, perché già lì mi da errore, che riporto nuovamente:
SELECT Replace(cognome, ""''"",""*"") AS cognome1 FROM [elenco aree] GROUP BY cognome
l'errore è:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][Driver ODBC Microsoft Access] Funzione 'Replace' non definita nell'espressione.
quindi se non esco fuori da questa, non posso provare la tua soluzione. Che ne pensi di questa stringa sql?
ciao
Franciros
-
@franciros said:
il problema però va risolto prima nella sql che popola la lista, perché già lì mi da errore, che riporto nuovamente:
SELECT Replace(cognome, ""''"",""*"") AS cognome1 FROM [elenco aree] GROUP BY cognome
l'errore è:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][Driver ODBC Microsoft Access] Funzione 'Replace' non definita nell'espressione.
quindi se non esco fuori da questa, non posso provare la tua soluzione. Che ne pensi di questa stringa sql?
ciao
Franciros
Il replace fallo solo una volta. Puoi farlo via codice o via SQL. Nel primo caso usa il codice che ti ho dato sopra senza effettuare il replace via sql quindi toglilo dalla query.
In alternativa fai il replace SOLO via sql ma ti consiglio di replicare l'apice con lo stesso preceduto dallo backslash così da renderlo compatibile con javascript (altrimenti pensa che sia la fine di una stringa e va in errore). Per evitare l'errore che hai postato prova così:
SELECT dbo.Replace(cognome, ""''"",""\'"") AS cognome1 FROM [elenco aree] GROUP BY cognome
-
macché...altro errore:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][Driver ODBC Microsoft Access] Funzione 'dbo.Replace' non definita nell'espressione.
ciao
F
-
@franciros said:
macché...altro errore:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][Driver ODBC Microsoft Access] Funzione 'dbo.Replace' non definita nell'espressione.
ciao
F
Usi Access97?
Ad ogni modo utilizza il metodo alternativo ovvero togli il replace dalla query ed usalo solo nello script.
-
no, uso access2003. Cmq provo l'altro metodo
ti farò sapere
Franciros