webForumDet fria alternativet

Paging...vad är det som fattas?

ASP

20 svar · 423 visningar · startad av annesophie

Medlem sedan juni 20012 236 inlägg
Frågan#1

Hej,

Jag har ett ganska basic paging script som jag använder då och då. Oftast enbart med en input type text som söker genom tabeller. Detta brukar funka utan problem. Men så ville jag bygga ut sökningen så att man anger kriterier för sökningen med hjälp av select boxar.

Jag har då sex st select boxar, question 1 - 6, som då söker på olika kolumner i tabeller.

Jag skriver nu ut värdet av dessa frågor för att se så att frågorna "hänger med", och alla värden kommer med:

5 Aerospace 11K - 12K Single AC/AC Linear

Om jag skriver ut SQL satsen så ser den också rätt ut (så vitt jag kan se iallfall):

SELECT * FROM products WHERE productGroup LIKE '%5%' AND applicationArea LIKE '%Aerospace %' AND powerclass LIKE '%11K - 12K %' AND outputs LIKE '%Single %' AND technology LIKE '%AC/AC%' AND type LIKE '%Linear%' ORDER BY product;

Nu är det så att jag vet att det finns en produkt i databasen som möter de kriterier som är satta enligt ovan fråga men likväl så får jag i-n-g-e-n träff. Inga felmeddelanden, bara ingen träff.

Vad är det jag missar???? Nåt vitalt förstås...men jag behöver hjälp!

Alla fält i databasen, utom productGroup, är text. productGroup är numeriskt.

Pleaseeeee....

/A

Medlem sedan juni 20003 076 inlägg
#2

ändra denna:
WHERE productGroup LIKE '%5%'
använd = istället för like och utan apostroftecken och procenttecken

Medlem sedan juni 200032 967 inlägg
#3

Dessutom, skall det vara ett mellanslag efter 12k i powerclass?
Om du väljer allt med selectboxar så måste du ju kunna göra exakta jämförelser. Använd därför hellre = än like.

Mvh,

Medlem sedan mars 20015 287 inlägg
#4

REd. svammlar väl bara som vanligt...

Medlem sedan juni 20012 236 inlägg
#5

Hej igen,

Så nu är första delen löst... :)

Men...nu har jag ännu ett omöjligt problem som någon kanske kan hjälpa mig med.

Advanced_search.asp Innehåller ett formulär med de 6 select boxarna (Question 1- 6). Man ska helst kunna välja vilka man fyller i. Alltså alla eller kanske bara en eller ett par.

Just nu så måste man fylla i alla för att en databasträff ska kunna göras. Naturligtvis så måste jag göra det lite snällare.

Till problemet.

Jag skickar iväg formuläret till advanced_search_results.asp där formulärvärden hämtas upp:

question1 = request.form("question1")

question2 = request.form("question2")

question3 = request.form("question3")

question4 = request.form("question4")

question5 = request.form("question5")

question6 = request.form("question6")

Sedan har jag ju en SELECT fråga som just nu ser ut som följande:

sql = "SELECT * FROM products WHERE productGroup = "&question1&" AND applicationArea = '"&question2&"' AND powerclass = '"&question3&"' AND outputs = '"&question4&"' AND technology = '"&question6&"' AND type = '"&question5&"';"
set rs =conn.execute(sql)

Om man nu inte har fyllt i alla fält blir det ju ingen träff, för den söker ju liksom på hela raden ändå....(hoppas att ni förstår).

Exempel: Jag söker efter en produkt som jag vet finns i databasen. Knappar in 5 av 6 sök kriterier och får då ingen träff. Response.write blir SELECT * FROM products WHERE productGroup = 6 AND applicationArea = 'Consumer' AND powerclass = '1000 - 2999' AND outputs = 'Single' AND technology = 'Switch Mode' AND type = '';
Hade jag fyllt i att Type skulle vara "AC/DC" så hade den fått träff.

Jag behöver på något sätt skapa en SELECT fråga där bara de "questionX = request.form("questionX")" som inte är "" finns med. kan man göra det??

Förstår ni?? *hoppas*

/A

Medlem sedan juni 200032 967 inlägg
#6

Typ så här:

strWhere = ""
if question1<>"" then strWhere = strWhere & " AND productGroup = " & question1
if question2<>"" then strWhere = strWhere & " AND applicationArea = " & question2
if question3<>"" then strWhere = strWhere & " AND powerclass = " & question3
if question4<>"" then strWhere = strWhere & " AND outputs = " & question4
if question5<>"" then strWhere = strWhere & " AND type = " & question5
if question6<>"" then strWhere = strWhere & " AND technology = " & question6
strWhere = Right (strWhere, Len(strWhere)-4)
sql = "SELECT * FROM products WHERE " & strWHERE

Mvh,

Medlem sedan juni 20012 236 inlägg
#7

Hmm ok...nu är det väl på gång tror jag... :) Tack @nders!

Fast, jag känner mig som ett riktigt pucko... :(

Nu sitter jag här och, jag har väl kanske missat något vitalt, men hur fanken faår jag ut data från ev träffar som denna sökning (@nders modell ger)???

Alltså, skratta inte nu men...

Jag bruka ju skriva typ så här:

sql = "select * from TABELL_XXX where xxx_id = 2;"
set rs =conn.execute(sql)

Ja ni fattar..och sedan hämta upp datan då så här:
<%=rs("tabell_xxx_produkt")%> och då lägga det i nån tabell eller så...

Hur kan jag göra det med @nders version???? Jag är verkligen lost! Känner att jag måste lära mig mer om ASP men...ja...kan nån förklara?!!?

Jag vill ju "ha ut" <%=rs("product")%> och <%=rs("category")%> men det går ju inte...

Medlem sedan juni 20012 236 inlägg
#8

*snyft*

:(

Medlem sedan juni 200032 967 inlägg
#9

Det borde inte vara någon skillnad. Det enda som ändrats är ju sättet att bygga upp SQL-frågan.

På vilket sätt fungerar det inte? Felmeddelande?

Mvh,

Medlem sedan maj 20018 027 inlägg
#10

Jag skulle hantera recordsetet precis likadant med @nders version, som med din. Det enda som skiljer är hur @nders har byggt upp sin sql-sträng. Sedan använder du sql-strängen likadant som du brukar använda sql-strängar.

Medlem sedan juni 20012 236 inlägg
#11

Hmmm nej jag trodde val inte det heller...men nat skumt ar det. Eller, jag kanske ska saga, nat skumt gor jag! :)

Felmeddelandet lyder:

Microsoft VBScript runtime error '800a000d'

Type mismatch

/powerbox_version2/documents/advanced_search_RESULTS.asp, line 145

Den pekar pa: <%=rs("product")%> som jag har lagt inne i en tabell i bodyn.

Jag lade in koden som du gjorde:

[1] 
strWhere = ""
if question1<>"" then strWhere = strWhere & " AND productGroup = " &
question1
if question2<>"" then strWhere = strWhere & " AND applicationArea = " &
question2
if question3<>"" then strWhere = strWhere & " AND powerclass = " &
question3
if question4<>"" then strWhere = strWhere & " AND outputs = " & question4
if question5<>"" then strWhere = strWhere & " AND type = " & question5
if question6<>"" then strWhere = strWhere & " AND technology = " &
question6
strWhere = Right (strWhere, Len(strWhere)-4)

SQL = "SELECT * FROM products WHERE " & strWHERE

response.write strWHERE
[/1]

Den "tar", helt korrekt, "med sig" bara den data som man har valt att soka pa. Response.write visar tex just nu:

productGroup = 2 AND applicationArea = Datacom AND powerclass = 5000 - 10K AND outputs = Single AND type = AC/DC AND technology = Switch Mode

Men felmedelandet bestar oavsett vad jag gor.

Du @nders...hmm kan du forklara for mig varfor man inte anvander en set rs =conn.execute(sql) efter din kodsnutt ??

Nagra forslag??

Medlem sedan maj 20018 027 inlägg
#12

Du @nders...hmm kan du forklara for mig varfor man inte anvander en set rs =conn.execute(sql) efter din kodsnutt ??

Då var det det som fattades. Klart du ska köra även den satsen.

Medlem sedan juni 200032 967 inlägg
#13

Såklart!

Jag utelämnade den biten. Sen blev det lite mycket cut & paste också i min kod, så du får lägga tillbaka apostrofer där det behövs, runt värden av texttyp.

Mvh,

Medlem sedan juni 200032 967 inlägg
#14

Så här med apostrofer:

strWhere = ""
if question1<>"" then strWhere = strWhere & " AND productGroup = " & question1
if question2<>"" then strWhere = strWhere & " AND applicationArea = '" & question2 & "'"
if question3<>"" then strWhere = strWhere & " AND powerclass = '" & question3 & "'"
if question4<>"" then strWhere = strWhere & " AND outputs = '" & question4 & "'"
if question5<>"" then strWhere = strWhere & " AND type = '" & question5 & "'"
if question6<>"" then strWhere = strWhere & " AND technology = '" & question6 & "'"
strWhere = Right (strWhere, Len(strWhere)-4)
sql = "SELECT * FROM products WHERE " & strWhere

Mvh,

Medlem sedan juni 20012 236 inlägg
#15

@nders du ar min hjalte! Det funkade med en gang! Det var fnuttarna som fattades ju! TACK! :bire

Har bara en sista fraga...sen ar det semester!

I tex tabellfaltet powerclass ligger det inte alltid bara en "inlagd data". Alltsa, i drommarnas varld skulle det val se ut sa har:

Powerclass:

ProductY: 0- 9 men i sjalva verket sa har dom flesta produkter i databasen fler an en powerclass angiven:

ProductX: 0 - 9, 10 - 19, 20 - 29

Nar jag nu, med hjalp av min selectbox "Powerclass" och @nders geniala kodsnutt ovan, soker efter tex 0 - 9 sa hittar den bara produkter som enbart har 0 - 9 som angiven powerclass, inte de produkter som har tex 0 - 9, 10 - 19.

Men om jag soker med min basic search, vilket ar ett fritext omrade, sa hittar den alla produkter.

Varfor skillnaden, och vad kan jag gora at det?? :q

/A :)

Medlem sedan juni 20012 236 inlägg
#16

...nähä... :(

Medlem sedan juni 200032 967 inlägg
#17

Där var du ja. ;)

Du ska inte lagra flera värden i ett fält på det sättet. Det är som gjort för att skapa problem och svårigheter.

Men, det borde gå om du tar tillbaka LIKE-operatorn för just det fältet.

strWhere = ""
if question1<>"" then strWhere = strWhere & " AND productGroup = " & question1
if question2<>"" then strWhere = strWhere & " AND applicationArea = '" & question2 & "'"
if question3<>"" then strWhere = strWhere & " AND powerclass LIKE '%" & question3 & "%'"
if question4<>"" then strWhere = strWhere & " AND outputs = '" & question4 & "'"
if question5<>"" then strWhere = strWhere & " AND type = '" & question5 & "'"
if question6<>"" then strWhere = strWhere & " AND technology = '" & question6 & "'"
strWhere = Right (strWhere, Len(strWhere)-4)
sql = "SELECT * FROM products WHERE " & strWhere

Om jag nu inte missförstått dig.

Mvh,

Medlem sedan mars 20015 287 inlägg
#18
strWhere = ""
if question1<>"" then strWhere = strWhere & " AND productGroup = " & question1
if question2<>"" then strWhere = strWhere & " AND applicationArea = '" & question2 & "'"
if question3<>"" then strWhere = strWhere & " AND powerclass LIKE '%" & question3 & "%'"
if question4<>"" then strWhere = strWhere & " AND outputs = '" & question4 & "'"
if question5<>"" then strWhere = strWhere & " AND type = '" & question5 & "'"
if question6<>"" then strWhere = strWhere & " AND technology = '" & question6 & "'"
strWhere = Right (strWhere, Len(strWhere)-4)
sql = "SELECT * FROM products WHERE " & strWhere

Red. Ja, folk har ju två ögon så varför inte ha två lika lösningar? ;)
(Var lite sen där med andra ord.)

Medlem sedan juni 20012 236 inlägg
#19

Ah vad ni ar DUKTIGA! :)

@nders>

Jo jag vet...men vem har sagt att det ar moí som har skapat databasen en gang??? Det ar nan kille som jobbade har for 2 ar sedan och...ja...eftersom databasen ar lite for maffig for att byggas om *just nu[/i sa far man fixa sa gott det gar.

Hmm jo badas forslag funkar ju...forutom att...om jag nu soker pa 0 - 9 sa hittas det mycket riktigt alla som har 0 - 9...men aven de som har 10 - 19. Den regarerar val pa "9" antar jag. Kan man pa nat satt saga ta bara dom som har ett exakt utryck som det jag angivit i sokkriterierna??

/A*

Medlem sedan juni 200032 967 inlägg
#20

annesophie skrev:

Hmm jo badas forslag funkar ju...forutom att...om jag nu soker pa 0 - 19 sa hittas det mycket riktigt alla som har 0 - 19...men aven de som har en 10 - 19. Den regarerar val pa "9" antar jag. Kan man pa nat satt saga ta bara dom som har ett exakt utryck som det jag angivit i sokkriterierna??

/A

Jo, det blir så, det är så textjämförelserna funkar. Det du skulle kunna göra är att se till så det alltid finns ett mellanslag före varje 'värde' i fältet, och ha med ett mellanslag före när du gör din LIKE-sökning. Om du vill så kan du enkelt uppdatera alla poster med ett inledande mellanslag med en SQL-fråga.

Jo jag vet...men vem har sagt att det ar moí som har skapat databasen en gang??? Det ar nan kille som jobbade har for 2 ar sedan och...ja...eftersom databasen ar lite for maffig for att byggas om just nu. Inte sa kul. Man far gora sa gott det gar.

Det har ingen sagt. Inte jag heller. Jag bara upplyser. :)

Mvh,

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)