• User

    selezione da elenco e apostrofi

    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


  • Moderatore

    @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+doppioapice

    Per 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...


  • User

    Poi tramite ASP ritrasformi l'asterisco in apice singolo...

    ....perdona la mia ignoranza, ma come?

    :mmm: :mmm: :mmm: :mmm:


  • Moderatore

    Sempre con la funzione replace (di vb.script in questo caso):

    
    <%
    ...
       Dim cognome_da_db
       cognome_da_db = Replace(myRecordSet("Cognome1"),"*","'")
    ....
     
    %>
    
    

  • Moderatore

    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
    :ciauz:


  • User

    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


  • User Attivo

    @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?


  • User

    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


  • User Attivo

    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.


  • User

    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


  • User Attivo

    @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
    
    

  • User

    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


  • User Attivo

    @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.


  • User

    no, uso access2003. Cmq provo l'altro metodo

    ti farò sapere

    Franciros