Jag vet inte hur avancerat du vill ha det. men jag skulle nog vilja ge dig denna länk: http://www.webeye.nu/default2.asp?que=asp/default.asp&exec=asp/artiklar/asp_11.asp
Där går Vide igenom Regular Exp. på ett mycket smidigt sätt, och om inte du vill/kan lära dig ¨nått av den artikeln så kommer det säkert upp några förslag hur du får bort dina bokstäver ur din string.
Om det bara är korta stängar så är det nog lättare att bara göra en loop som går igenom hela strängen och flyttar över alla siffror från strängen till en temporär sträng och när loopen är klar så sätts strängen lika med den temporära strängen.
Har inte VB installerat så jag kan inte prova koden men något sånthär borde fungera
dim str as string
dim tmp as string
dim i as integer
str = "w2e3m"
tmp=""
for i=0 to str.length
if IsNumeric(mid(str,i,1)) then
tmp=tmp+mid(str,i,1)
end if
next i
str=tmp
Jag är lite osäker på hur man kollar längden på en sträng så str.length kanske inte fungerar.
<%
a = "w2e3m"
iA = Len(a)
For i = 1 To iA
If IsNumeric(Left(a,1)) Then
intNumeric = intNumeric & Left(a,1)
a = right(a, iA-i)
Else
strText = strText & Left(a,1)
a = right(a, iA-i)
End If
Next
Response.Write ""&_
"Bokstäver: "& strText &"<br>"&_
"Siffror: "& intNumeric
%>
Hej allihop..
Jag har ett liknande problem. Min sida är så här:
Användaren väljer en "kompetens" klickar på nästa.
Sökning ska ske i databasen efter alla personer som har den kompetensen
Resultatet ska visas på skärmen i form av en matris
Problem
Varje person kan ha flera kompetenser har för tillfället avgränsat dom så att en ";" står mellan varje kompetens i databsen
När användaren klickar på "skicka" så skickas ett tal, ingen text som "alla" ger exempel på. (Vet inte om det spelar nån roll)
Problem so far:
Jag kollade den sidan som icaaq skrev, skitbra sida, jag använder den koden men... :q
Hur gör jag för att få sökningen att inkludera alla personer i databasen och inte den första? antalet personer i databasen är X
Hur gör jag med avgränsaren, om Nisse har kompetens 1;2;6
så ska han vara med i matrisen, om användaren söker på kompetens 2.
Riktig amatör fråga eller hur, om man förstår vad jag menar alltså. :r
Koden jag använder för tillfället
KompString = request("komp")
myString = ObjPersoner("Kompetenser")
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = false
objRegExp.Pattern = KompString
Set myMatches = objRegExp.Execute(myString)
Response.Write "Hittade "&myMatches.Count&"st träff(ar)<br><br>"
For each item in myMatches
Response.Write "Hittade en träff vid position "&item.FirstIndex&", som är "&item.Length&" tecken lång. Värdet är <b>"&item.Value&"</b><br>"
Next
lagra varje kombination av userid/CompetenceId som en post i denna tabell. Dvs, om userid 4711 har kompetenserna 1,2 och 6
så blir det tre poster i tabellen.
För att hitta alla användare med en viss kompetens.
q = "select * from users where userid in (select userid from userCompetence where competenceId = " & request.form("competence") & ")"
Det är mycket effektivare. Om man bara har ett värde i varje kolumn så kan man använda index för sökningen,dvs man kan direkt hitta de poster som är relevanta. Med den design du har så måste databashanteraren läsa alla poster.
Tack för hjälpen LarsG, det funkar super nu!!
Men nu behöver jag mer hjälp, riktig nybörjar hjälp :D
Finn fem fel
<%
DIM KompString, ObjHeader
KompString = Request("UnderGrupp")
IF KompString = "" THEN
response.redirect "index2.asp?Error"
ELSE
HeaderString = "Select * FROM Header WHERE KompetensID =" & KompString
SET ObjHeader = Server.CreateObject("ADODB.RecordSet")
ObjHeader.Open HeaderString, objConn
'JAG VET ATT DETTA ÄR FEL.
ForetagsString = "Select * FROM Companys WHERE ForetagsID =" & ObjHeader("ForetagsID")
SET ObjForetag = Server.CreateObject("ADODB.RecordSet")
ObjForetag.Open ForetagsString, ObjConn%>
<TABLE BORDER=1 CELLSPACING=3 cellpadding="3">
<TR><TD>FöretagsNamn</TD><TD>Adress</TD><TD>Representant</TD><TD>Epost</TD><TD>Telefon</TD><TD>Fax</TD><TD>Hemsida</TD></TR>
<TR >
<%
DO WHILE NOT objHeader.EOF
IF NOT objHeader.EOF THEN%>
<TD><FONT SIZE=-1><%response.write ObjForetag("ForetagsNamn")%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Adress1") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Adress1") END IF%><BR>
<%IF ObjForetag("Adress2") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Adress2") END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Representant") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Representant")END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Epost") = "" THEN response.write "Uppgifter saknas" ELSE response.write "<A HREF=mailto:" & ObjForetag("Epost") &">" & ObjForetag("Epost") &" </A>"END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Telefon") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Telefon") END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Fax") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Fax") END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Hemsida") = " " THEN response.write "Uppgifter saknas" ELSE response.write "<A HREF =" & ObjForetag("Hemsida") &">"& ObjForetag("ForetagsNamn") & "</A></TD>" END IF
response.write "</TR>"
objHeader.MOVENEXT
END IF
LOOP
END IF%>
</TABLE>
:r Den fyller i listan en gång sen hoppar den ur loopen, när det fortfarande inte är EOF vad gör jag fel. Samt andra småfel kan också föras fram till ljuset
2½ frågor kvar
Varför funkar inte IF satsen i loopen? När hemsida saknas så skriver den företagsnamnet, men hänvisar till samma sida, den ska ju skriva "uppgifter saknas"
<%IF ObjForetag("Hemsida") = " " THEN response.write "Uppgifter saknas" ELSE response.write "<A HREF =" & ObjForetag("Hemsida") &">"& ObjForetag("ForetagsNamn") & "</A></TD>" END IF
Och finns det inget man kan skriva som typ (Svensk översättning) "Om någon av cellerna är tomma, skriv 'uppgift saknas'"
istället för att jag skriver en massa if satser
Detta är mer en HTML fråga
Finns det inget annat sätt att ändra på fontstorleken förutom det sätt som jag har gjort? Kan nada CSS btw (kodexempel skulle vara väldigt bra)
Och försök hålla svaren så nära svenskan som möjligt, eftersom jag är fortfarande en "n00b" :birp
Den fyller i listan en gång sen hoppar den ur loopen...
Är den inte slut? Vilket rs syftar du på egentligen? Det är väl bara den första posten från ObjHeader("ForetagsID") du får fram. Du måste flytta in den sql-frågan i loopen för att få fram flera poster.
Men egentligen är det väl fel att göra så där, ska till en join och plocka ut allt i en sql-fråga skulle jag tro. (Som de lärda lär visa dig.)
Solbulle:
IF satsen funkar inte. Det spelar ingen roll om jag skriver "", " " eller <> "", den skriver ändå inte uppgift saknas. Temporärt så har jag satt
IF objforetag("Hemsida") = "." Then response.write "Uppgift saknas" else ... END IF
Jag har alltså skrivit in en punkt för varje ställe i databsen där det fattas uppgifter.
Vad jag menade med den hoppar ur loopen är att om det finns två personer (A och B) som har kompetens ABC så visas bara person A
Alltså istället för att skriva:
Person:Kompetens:X:Y:Z
A:ABC:X:Y:Z
B:ABC:X:Y:Z
så skriver den
A:ABC:X:Y:Z
A:ABC:X:Y:Z
förstår du vad jag menar nu med att den "hoppar ut ur loopen"
Den visar bara första personen i listan med rätt kompetens, om det finns 20 personer med samma kompetens visas den första personen 20 gånger
HeaderString = "Select * FROM Header WHERE KompetensID =" & KompString
Får du kanske 20 träffar, sen kör du denna:
ForetagsString = "Select * FROM Companys WHERE ForetagsID =" & ObjHeader("ForetagsID")
Men problemet, som jag ser det, är att du kör den med den första träffen av ObjHeader("ForetagsID").
Senare loopar du 20 gånger men du ändrar ju aldrig ObjHeader("ForetagsID"). Mao måste du ha in den sql-frågan i loopen. Tror jag...
Typ:
<%
DIM KompString, ObjHeader
KompString = Request("UnderGrupp")
IF KompString = "" THEN
response.redirect "index2.asp?Error"
ELSE
HeaderString = "Select * FROM Header WHERE KompetensID =" & KompString
SET ObjHeader = Server.CreateObject("ADODB.RecordSet")
ObjHeader.Open HeaderString, objConn
DO WHILE NOT objHeader.EOF
IF NOT objHeader.EOF THEN
'JAG VET ATT DETTA ÄR FEL.
ForetagsString = "Select * FROM Companys WHERE ForetagsID =" & ObjHeader("ForetagsID")
SET ObjForetag = Server.CreateObject("ADODB.RecordSet")
ObjForetag.Open ForetagsString, ObjConn%>
<TABLE BORDER=1 CELLSPACING=3 cellpadding="3">
<TR><TD>FöretagsNamn</TD><TD>Adress</TD><TD>Representant</TD><TD>Epost</TD><TD>Telefon</TD><TD>Fax</TD><TD>Hemsida</TD></TR>
<TR >
<TD><FONT SIZE=-1><%response.write ObjForetag("ForetagsNamn")%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Adress1") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Adress1") END IF%><BR>
<%IF ObjForetag("Adress2") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Adress2") END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Representant") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Representant")END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Epost") = "" THEN response.write "Uppgifter saknas" ELSE response.write "<A HREF=mailto:" & ObjForetag("Epost") &">" & ObjForetag("Epost") &" </A>"END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Telefon") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Telefon") END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Fax") = "" THEN response.write "Uppgifter saknas" ELSE response.write ObjForetag("Fax") END IF%></TD>
<TD><FONT SIZE=-1><%IF ObjForetag("Hemsida") = " " THEN response.write "Uppgifter saknas" ELSE response.write "<A HREF =" & ObjForetag("Hemsida") &">"& ObjForetag("ForetagsNamn") & "</A></TD>" END IF
response.write "</TR>"
objHeader.MOVENEXT
END IF
LOOP
END IF%>
</TABLE>
Men egentligen är det väl fel att göra så där, ska till en join och plocka ut allt i en sql-fråga skulle jag tro. (Som de lärda lär visa dig.)
Jo precis, det är det som sker och det är verkligen inte bra, du skulle behöva en join istället men det är över min förmåga, men det var i alla fall det som var fel ;)
Får se om LarsG eller någon av de tyngre elefanterna behagar dansa in och fixa till det hela åt dig.