14. juli 2010 - 17:53Der er
16 kommentarer og 1 løsning
sammenligne et array med en tekststreng
Hej Jeg har et lille problem med array.
Jeg trækker en tekst ud fra et felt i en DB og vil kontrollere om den findes i arrayet. Hvis ikke skal den tilføjes arrayet elles springes til næste tekstudtræk med en ny sammenligning.
Jeg prøver også med select distinc, men får alligevel dubletter i arrayet.
<%set gr=server.createobject("adodb.recordset") sqlgr = "SELECT DISTINCT gruppe FROM tblBruger" & ntabel & "Web WHERE status <> 'udmeldt' and gruppe <> '" & "" &"'" gr.open sqlgr, conn
Så prøver jeg at indsætte værdierne i arrayet
a = ""
do while not gr.eof
a = a + "," + gr("gruppe")
gr.MoveNext loop
grupper = split(a,",")
Senere skal arryet bruges til overskrifter til grupperne og gruppens medlemmer indsættes i en tabel med dette udtræk fr DB.
set rs=server.createobject("adodb.recordset")
sqlrs = "SELECT * FROM tblBruger" & ntabel & "Web WHERE status <> 'passiv' and status <> 'udmeldt' and status <> 'I arbejde' and GRUPPE like '%" & grupper(i) & "%' order by fornavn ASC, gruppe DESC"
hm.. altså der hvor du indsætter en ny gruppe. Det er der, du skal tjekke om den nye gruppe findes i forvejen.
Det er nok ikke i do-loop løkken, da de grupper du trækker ud, er hentet med DISTINCT.
Måske er dit problem at du sorterer på fornavn før gruppe? I så tilfælde, prøv:
sqlrs = "SELECT * FROM tblBruger" & ntabel & "Web WHERE status <> 'passiv' and status <> 'udmeldt' and status <> 'I arbejde' and GRUPPE like '%" & grupper(i) & "%' order by gruppe DESC, fornavn ASC"
hvordan får jeg checket om den foregående records felt gruppe er i arryet eller ikke,
altså noget i den her stil
hvis teksten i databasefeltet findes i arrayet skal det ikke indsættes igen i arrayet, men man skal gå videre til den næste record i databasen og så lave checket igen.
så skal det hele ende ud med at jeg har et array med de grupper der findes i databasen, men kun en gang af hver.
det jeg mener er hvis en person er med i flere grupper så er der i feltet gruppe skrevet hvormange grupper vedkommende indgår i.
meningen er at hver gruppe skal stå for sig selv i tabellen.
Hvis jeg har døbt gruppenavnet inden jeg søger i DB får jeg det rigtige resultat, men hvis jeg ikke ved på forhånd hvad grupperne hedder skal jeg løse problemmet som ønsket ovenfor.
Der vil sige læse fra DB, indsætte i array med gruppe navnet kun en gang.
så når en person deltager i flere grupper og det står i feltet gruppe, skal jeg gerne kunne dele hele denne tekststreng op i enkelte ord som så checkes om de er i arrayet eller ikke.
Når jeg så har et array med alle grupperne nævnt kun en gang er resten bare at søge i DB igen med det unikke gruppenavn og indsætte resultatet i en tabel og vupti alt er ok.
I brugertabellen er der et felt der hedder "Gruppe".
Indhold i feltet gruppe er kommasepareret, og afspejler hvilke grupper et medlem er en del af.
Nu vil du gerne trække en liste (dit array) over alle gruppenavne i record-settet.
Har jeg ret, gør du således:
alle="" do while not gr.eof if gr("gruppe")<>"" then tmp=split(gr("gruppe"),",") for t=lbound(tmp) to ubound(tmp) if instr(alle,tmp(t)&",")=0 then alle=alle&tmp(t)&"," end if next end if gr.MoveNext loop if alle<>"" then alle=left(alle,len(alle)-1) array_med_grupper=split(alle,",")
men nu kan jeg ikke forstå hvorfor jeg får et andet udtræk fra databasen når jeg bruger
set rs=server.createobject("adodb.recordset") sqlrs = "SELECT * FROM tblBruger" & ntabel & "Web WHERE status <> 'passiv' and status <> 'udmeldt' and status <> 'I arbejde' and GRUPPE like '%"&array_med_grupper(i)&"%' " order by fornavn ASC, gruppe DESC rs.open sqlrs, conn
istedet for hvis direkte har brugt f. eks.
set rs=server.createobject("adodb.recordset") sql = "SELECT * FROM tblBruger" & ntabel & "Web WHERE status <> 'passiv' and status <> 'udmeldt' and status <> 'I arbejde' and GRUPPE like '%" & "Medlemsservice" & "%' order by fornavn ASC, gruppe DESC" rs.open sql, conn
Det vil sige jeg får ikke alle med i grupperne når jeg bruger løkken fra arrayet, men hvis jeg har døbt gruppen i forvejen i sql sætningen får jeg alle med.
hm, kan det være fordi du ikke løber hele arrayet igennem i dit første eksempel?
ved tvivl, prøv at teste:
for i=lbound(array_med_grupper) to ubound(array_med_grupper)
sqlrs = "SELECT * FROM tblBruger" & ntabel & "Web WHERE status <> 'passiv' and status <> 'udmeldt' and status <> 'I arbejde' and GRUPPE like '%"&array_med_grupper(i)&"%' " order by fornavn ASC, gruppe DESC
hm, jeg kan ikke ligge et svar, men lad nu det ligge. Jeg kunne bare se i din historik (alle dem jeg lige tjekkede) at du selv tager svarene..
Der er ingen forskel på om du bruger en konstant eller en variabel i din sql sætning.
Fejlen er i koden et sted.
Men man kan sige, at den måde det er bygget på, med kommaseparerede data i et felt, måske ikke er helt den mest optimale måde at lave det der på..
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.