webForumDet fria alternativet

SQL sats och mellan slag

8 svar · 339 visningar · startad av His Divine Shadow

His Divine ShadowMedlem sedan sep. 20004 079 inlägg
#1

Jag försöker få ett formulär med ett textfält där man kan skriva in koder som "KJ6 BL9 L98 R74 EXP" osv.

Vad jag vill att SQL satsen ska göra är att behandla mellanslaget som en separator så att varje text längd sök efter i databasen, så att om man skriver in t.ex. "AAA Y84" i textfältet i formuläret och dessa två finns i databasen som skilda poster, så visas dom på nästa sida.

Här är nu SQL satsen, inte så sofistikerad inte...

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Connection
SQL = "SELECT * from TABLE WHERE Code = '"& Searchstring &"' ORDER BY Code ASC" 
set RS = Conn.execute(SQL)
@ndersMedlem sedan juni 200032 969 inlägg
#2

Det är visserligen mest ASP, men:

varSearch = Split(Request.Form("search"), " ")
for i = 0 to ubound (varSearch)
     if not i = 0 then strSearch = strSearch & " OR "
     strSearch = strSearch & " Code ='" & varSearch(i) & "'"
next
SQL = "SELECT * from TABLE WHERE ("& strSearch &") ORDER BY Code ASC"
His Divine ShadowMedlem sedan sep. 20004 079 inlägg
#3

Tackar och bockar, men vad händer om en kod inte hittas i databasen? Jag skulle behöva nånting som låter personen veta ifall det händer, som t.ex. i listan som genereras så visas också koden som inte fanns men där står det "This code was not found in this database", du vet ;)

Engine^Medlem sedan dec. 20003 887 inlägg
#4

Du testar om ditt recordset är tomt

Set RS = Conn.Execute(SQL)

If RS.EOF Then
  [blue]'This code was not found[/blue]
Else
  [blue]'The code was found[/blue]
End If
His Divine ShadowMedlem sedan sep. 20004 079 inlägg
#5

Mjo, jag försökte just det, men ingenting hände så jag trodde man behövde en annan metod, får kolla igen...

His Divine ShadowMedlem sedan sep. 20004 079 inlägg
#6

Näpp, funkar inte, ingenting kommer om recordsetet är tomt.

Engine^Medlem sedan dec. 20003 887 inlägg
#7

Det är väl hela tanken?

I don't begrip vad du menar... det är väl bara att skriva ut att recordset:et var tomt?

His Divine ShadowMedlem sedan sep. 20004 079 inlägg
#8

Nej, inte riktigt, kolla här:
http://www.hisdivineshadow.com/misc/RPO

Om du skriver in Y84 EXP AAA K05 så får du till svar:
AAA = 4-WAY MANUAL SEAT ADJUSTER
K05 = HEATER ENG, BLOCK-------------------/
Y84 = MERCHANDISED PKG, GTA, TRANS AM

Vad jag också vill att det ska säga är nått som:
EXP = This code wasn't found in the database

Eller så kan det först eller sist lista koderna som inte hittades kanske såhär:
These codes weren't found: EXP etc etc.

Engine^Medlem sedan dec. 20003 887 inlägg
#9

Aha... ja då blev det ju knivigare. Då måste du ju testa varje sökord för sig och då tror jag inte man kan använda sig av en SQL-sats för att få ut något vettigt svar.

Enklaste lösningen ser väl ut såhär

varSearch = Split(Request.Form("search"), " ")

For Each strWord In varSearch
  strSQL = "SELECT [i]Item[/i] FROM [i]TableX[/i] WHERE Code = '" & Replace(strWord, "'", "''") & "'"

  RS.Open strSQL, Conn

  If RS.EOF Then
    strNotFound = strNotFound & " " & strWord
  Else
    Response.Write strWord & " : " & RS("Item")
  End If

  RS.Close
Next

If Not Len(strNotFound) = 0 Then
  Response.Write "The following codes weren't found: " & strNotFound
End If

Jag tror att jag skulle ha börjat med något i den stilen. Det är väl kanske inte det smartaste sättet att lösa det, men det är en början ;)

254 ms totalt · 3 externa anrop · v20260731065814-full.30151723
127 ms — hämta forumlista (db)
123 ms — hämta statistik (db)
128 ms — hämta tråd, inlägg och bilagor (db)