Avatar billede set Nybegynder
14. juli 2010 - 17:53 Der 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.

Håber på hjælp fra experten.
Avatar billede mortvader Nybegynder
14. juli 2010 - 17:57 #1
kom med noget kode :)
Avatar billede set Nybegynder
14. juli 2010 - 18:55 #2
først trækker jeg data ud af DB med flg. kode

<%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"

rs.open sqlrs, conn


håber dette kan hjælpe på mit spørgsmål
Avatar billede mortvader Nybegynder
14. juli 2010 - 19:21 #3
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"
Avatar billede set Nybegynder
14. juli 2010 - 19:59 #4
mit problem er ved den første udtrækning.

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.
Avatar billede mortvader Nybegynder
14. juli 2010 - 20:06 #5
ok, hvis jeg forstår dig ret:


do while not gr.eof
  if instr(a,gr("gruppe")&",")=0 then         
    a=a&gr("gruppe")&","
  end if
  gr.MoveNext
loop
if a<>"" the a=left(a,len(a)-1)
Avatar billede set Nybegynder
14. juli 2010 - 20:57 #6
her er hvad jeg får at udtræk fra DB

altså hvad der ståa i feltet gruppe.

Er der nogen måde hvorpå man kan adskille orderne hvis der er flere ord i et felt som der er vist her


Ambassadør
Bestyrelsen
Bestyrelsen, IT-området Fmd
Bestyrelsen, Medlemsservice
Bestyrelsen, Medlemsservice, IT-området
Bestyrelsen, Medlemsservice, Virksomhedsservice
Bestyrelsen, Virksomhedsservice
IT-området
Jobcentre/Andre aktører kontakt
Medlemsservice
Medlemsservice tovholder
Medlemsservice, IT-området
Medlemsservice, PR-Udvalg
PR-Udvalg
PR-Udvalg, IT-området, Bestyrelsen tovholder
Virksomhedsbesøg tovholder
Virksomhedsservice
Avatar billede mortvader Nybegynder
14. juli 2010 - 21:06 #7
Hvis det du mener, er at det er et problem at der indgår komma i gruppenavnene, bruger vi bare et andet tegn til at adskille dem med: ¤


do while not gr.eof
  if instr(a,gr("gruppe")&",")=0 then         
    a=a&gr("gruppe")&"¤"
  end if
  gr.MoveNext
loop
if a<>"" the a=left(a,len(a)-1)

...og array'en...

grupper =  split(a,"¤")
Avatar billede mortvader Nybegynder
14. juli 2010 - 21:25 #8
rettelse:


do while not gr.eof
  if instr(a,gr("gruppe")&"¤")=0 then         
    a=a&gr("gruppe")&"¤"
  end if
  gr.MoveNext
loop
if a<>"" the a=left(a,len(a)-1)

...og array'en...

grupper =  split(a,"¤")
Avatar billede set Nybegynder
14. juli 2010 - 21:34 #9
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.
Avatar billede mortvader Nybegynder
14. juli 2010 - 21:54 #10
Lad os se om jeg forstår det......

Så du har en tabel med brugere.

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,",")



...måske...
Avatar billede set Nybegynder
15. juli 2010 - 10:48 #11
mange tak det virkede med hensyn til arrayet,

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.
Avatar billede mortvader Nybegynder
15. juli 2010 - 11:02 #12
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

response.write sqlrs&"<hr>"

next
Avatar billede mortvader Nybegynder
15. juli 2010 - 11:15 #13
nice detalje der, med at snuppe pointene selv :)
Avatar billede set Nybegynder
15. juli 2010 - 11:17 #14
der skete en fejl så send en svar hvis det kan lade sig gøre

jeg undskylder meget
Avatar billede set Nybegynder
15. juli 2010 - 11:19 #15
skal jeg oprette spørgsmålet igen?
Avatar billede set Nybegynder
15. juli 2010 - 11:22 #16
det jeg mente før var at jeg godt nok får vist alle grupperne rigtigt, men søgningen skriver ikke alle medlemmer ind i tabellen.

en af grupperne mangler et enkelt medlem i at blive vist andre grupper mangler mange.

Hvad er forskellen på at bruge et direkte navn istedet for at bruge et fra et array?
Avatar billede mortvader Nybegynder
15. juli 2010 - 11:31 #17
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å..
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester