webForumDet fria alternativet

Funktion för insensitive sök fungerar ej

ASP

7 svar · 505 visningar · startad av Yepp

Medlem sedan juni 200083 inlägg
Frågan#1

För att lösa problemet med s k "insensitive accent"-sökningar kopplade till en Access-databas var tanken att använda nedanstående funktion, som enligt utsago skall fungera och lösa problemet.
Lyckas dock inte själv få den att fungera - och är inte helt haj på att skapa egna funktioner, någon som har någon lösning.

Funktionens kod:

<%
Function AccIns(Str As String) As String
  Dim CurLtr As String * 1
  For x = 1 To Len(Str)
  CurLtr = Mid(Str, x, 1)
  Select Case CurLtr
  Case "e", "é", "è", "ê", "ë", "E", "É", "È", "Ê", "Ë"
  AccIns = AccIns & "[eéèêëEÉÈÊË]"
  Case "a", "à", "â", "ä", "A", "À", "Â", "Ä"
  AccIns = AccIns & "[aàâäAÀÂÄ]"
  Case "i", "ì", "ï", "î", "I", "Ì", "Ï", "Î"
  AccIns = AccIns & "[iïîìIÏÎÌ]"
  Case "o", "ô", "ö", "ò", "O", "Ô", "Ö", "Ò"
  AccIns = AccIns & "[oôöòOÔÖÒ]"
  Case "u", "ù", "û", "ü", "U", "Ù", "Û", "Ü"
  AccIns = AccIns & "[uûüùUÛÜÙ]"
  Case "c", "ç", "C", "Ç"
  AccIns = AccIns & "[cCçÇ]"
  Case Else
  AccIns = AccIns & CurLtr
  End Select
  Next
End Function
%>

Felmeddalande:

Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A03EE)
')' förväntas.
/search.asp, line 8, column 20
Function AccIns(Str As String) As String
-------------------^

...vilket innebär första raden i funktionens kod.

Funktionen kommer för övrigt ifrån nedanstående adress, där det inte finns speciellt mycket info förutom själva funktionen i sig: http://www.zen51342.zen.co.uk/vbadv/vbadv_013.htm

Vore ytterst tacksam för hjälp !!

MVH
Ola

Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

Det känns som att felet inte ligger i funktionen, utan i ditt anrop, dvs i sql:en. Har du skrivit enligt exemplet, och alla parenteser finns med, och på rätt ställe?

Snygg funktion förresten! (Jo, jag vet att det inte är din, men ändå!)

Medlem sedan dec. 200012 464 inlägg
#3

ta bort alla

as String
Medlem sedan juni 200083 inlägg
#4

Hej!
Tackar för svaret - well, har kopierat koden rakt av och det är i funktionens kod som felet dyker upp - men det kanske har med det att göra ändå. Själva SQL-queryn ser ut såhär:

SQLE = "SELECT namn FROM tabell WHERE namn + text + alt LIKE '%" & AccIns("search") &"%' ORDER BY namn DESC"

Har även testat att bara skapa en tom sida.asp med ingen ASP-kod förutom själva funktionen (alltså helt enkelt en sida utan innehåll men med ovanstående ASP-kod inlagd innaför head-taggarna) - och samma fel dyker upp då...

Jo - visst är det en fin funktion - synd bara att jag inte får igång det hela riktigt ;)

Tackar dock för ovanstående tips - har laborerat och skalat om, men samma fel dyker upp om och om igen, dessvärre...

Medlem sedan apr. 20031 660 inlägg
#5

Hmm, kan man skriva "... WHERE namn + text + alt LIKE ..."?

Aldrig sett, eller gjort, söker själv endast i ett fält i sändern. Men det går kanske? Prova med & istället. + är det ovanligt man ser, fast det brukar fungera.

Medlem sedan juni 200083 inlägg
#6

Hej igen.

Johnny:
SQL-satsen fungerade innan, så det borde fungera - men för säkerhetsskull har jag provat med endast:

SQLE = "SELECT namn FROM tabell WHERE namn LIKE '%" & AccIns("search") &"%' ORDER BY namn DESC"

Dessvärre utan någon förändring - om jag kör endast funktionen i en separat test-sida - utan övrig kod borde det väl inte generera några felmeddelanden om koden är rätt, eller!?
Var ett tag sedan jag pysslade med sånt här - är därför ganska rostig om man säger så ;) - tacka för tipset dock, och har som sagt nu provat med en enklare SQL-sats (som skall hitta resultat ändå, då jag söker på namnet huvudsakligen).

LarsG:
Tackar även för ditt tips - får dessvärre inte det att fungera då heller - men jag kanske har missuppfattat dig något. Har testat de två nedanstående sätten:

<%
Function AccIns(Str)
    Dim CurLtr * 1
    For x = 1 To Len(Str)
        CurLtr = Mid(Str, x, 1)
        Select Case CurLtr
            Case "e", "é", "è", "ê", "ë", "E", "É", "È", "Ê", "Ë"
                AccIns = AccIns & "[eéèêëEÉÈÊË]"
            Case "a", "à", "â", "ä", "A", "À", "Â", "Ä"
                AccIns = AccIns & "[aàâäAÀÂÄ]"
            Case "i", "ì", "ï", "î", "I", "Ì", "Ï", "Î"
                AccIns = AccIns & "[iïîìIÏÎÌ]"
            Case "o", "ô", "ö", "ò", "O", "Ô", "Ö", "Ò"
                AccIns = AccIns & "[oôöòOÔÖÒ]"
            Case "u", "ù", "û", "ü", "U", "Ù", "Û", "Ü"
                AccIns = AccIns & "[uûüùUÛÜÙ]"
            Case "c", "ç", "C", "Ç"
                AccIns = AccIns & "[cCçÇ]"
            Case Else
                AccIns = AccIns & CurLtr
        End Select
    Next
End Function
%>

...vilket ger:
Kompileringsfel i Microsoft VBScript (0x800A0401)
Slut på programsats förväntas.
/search.asp, line 9, column 11
Dim CurLtr * 1
----------^

Dvs andra raden i funktionen - men som sagt, antar att det inte riktigt är som ovan du menar.

Har även testat nedanstående variant:

Function AccIns(Str)
    Dim CurLtr
    For x = 1 To Len(Str)
        CurLtr = Mid(Str, x, 1)
        Select Case CurLtr
            Case "e", "é", "è", "ê", "ë", "E", "É", "È", "Ê", "Ë"
                AccIns = AccIns & "[eéèêëEÉÈÊË]"
            Case "a", "à", "â", "ä", "A", "À", "Â", "Ä"
                AccIns = AccIns & "[aàâäAÀÂÄ]"
            Case "i", "ì", "ï", "î", "I", "Ì", "Ï", "Î"
                AccIns = AccIns & "[iïîìIÏÎÌ]"
            Case "o", "ô", "ö", "ò", "O", "Ô", "Ö", "Ò"
                AccIns = AccIns & "[oôöòOÔÖÒ]"
            Case "u", "ù", "û", "ü", "U", "Ù", "Û", "Ü"
                AccIns = AccIns & "[uûüùUÛÜÙ]"
            Case "c", "ç", "C", "Ç"
                AccIns = AccIns & "[cCçÇ]"
            Case Else
                AccIns = AccIns & CurLtr
        End Select
    Next
End Function

Nu får jag visserligen inget felmeddelande för funktionen i sig - men däremot fungerar inte sökningen - ger inga resultat...

Medlem sedan juni 200083 inlägg
#7

Well, pulade vidare lite ytterligare efter era förslag - finner inte riktigt vad som gjorts sen ovan (om något) men nu fungerar det :) Tackar för hjälpen.

Slutgiltig och fungerande kod:
(fungerar för övrigt med första SQL-satsen)

<%
Function AccIns(Str)
    Dim CurLtr
    For x = 1 To Len(Str)
        CurLtr = Mid(Str, x, 1)
        Select Case CurLtr
            Case "e", "é", "è", "ê", "ë", "E", "É", "È", "Ê", "Ë"
                AccIns = AccIns & "[eéèêëEÉÈÊË]"
            Case "a", "à", "â", "ä", "A", "À", "Â", "Ä"
                AccIns = AccIns & "[aàâäAÀÂÄ]"
            Case "i", "ì", "ï", "î", "I", "Ì", "Ï", "Î"
                AccIns = AccIns & "[iïîìIÏÎÌ]"
            Case "o", "ô", "ö", "ò", "O", "Ô", "Ö", "Ò"
                AccIns = AccIns & "[oôöòOÔÖÒ]"
            Case "u", "ù", "û", "ü", "U", "Ù", "Û", "Ü"
                AccIns = AccIns & "[uûüùUÛÜÙ]"
            Case "c", "ç", "C", "Ç"
                AccIns = AccIns & "[cCçÇ]"
            Case Else
                AccIns = AccIns & CurLtr
        End Select
    Next
End Function
%>

Än en gång, tack för hjälpen båda två :)

Medlem sedan apr. 20031 660 inlägg
#8

Koden du hämtat är för VB, och där kan (måste?) man berätta vad variabeln ska vara till. Det förstod LarsG meddetsamma, jag nu. :r
Det står CurLtr * 1, och det fungerar inte med VBScript. Därför kom jag på att jag hade fel.

Det står tom "With a few little modifications, it works great with ASP too!" vid exemplet. Det är det du gjort nu. Tipsa dem, så lägger de kanske till koden, eller länkar till wF.

Vad som skiljer ditt näst senaste från ditt senaste försök?
Säg det, så är det på internet! :P

267 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)