Avatar billede mskjoldp Novice
21. oktober 2005 - 20:23 Der er 21 kommentarer og
1 løsning

array probs

Hey E

JEg vil have fat i de data der ikke er samligenlige med dem er er i henholdsvis en db og et array.

Koden:
    varOMR_A = Array("OMR_A SH 31","OMR_A SH 36","OMR_A SH 37","OMR_A SH 41","OMR_A SH 42","OMR_A SH 46")


    set rs = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT * FROM fly_status WHERE S_lokation LIKE '%OMR_A SH%' ORDER BY S_lokation DESC"
    rs.Open strSQL, conn,3,3

    Dim ArrayLOK()
    i = 1
    while not rs.EOF
        Redim Preserve ArrayLOK(i)
        ArrayLOK(i) = rs("S_lokation")
        i = i + 1
    rs.movenext
    wend %>

<%    for j = 0 to ubound(varOMR_A)
        if ArrayLOK(i) <> varOMR_A(j) then
            Response.Write varOMR_A(j) & "<br>"
        End if
    next %>

men jeg får en fejl:

Der opstod en Microsoft VBScript-kørselsfejl fejl '800a0009'

Indekset er uden for området: '4'

/fsnskp/RT-SRS/sh.asp, linje 40


vhor linje 40 er:
if ArrayLOK(i) <> varOMR_A(j) then
Avatar billede erikjacobsen Ekspert
21. oktober 2005 - 22:15 #1
Dit i er een for stor i forhold til størrelsen af dit array efter whileløkken. Derfor får du fejl. Men kan du forklare hvad du skal finde i tabellen?
Avatar billede mskjoldp Novice
23. oktober 2005 - 00:26 #2
Yep

I tabellen "fly_status" skal jeg, ud af 62 rækker, finde de data der indeholder bogstaverne "SH", i kolonnen "S_lokation".

Der er de mulige kobinationer at hente fra kolonnen, som er defineret i variablen: "varOMR_A".

Formålet med øvelsen er så, at liste de variabler i "varOMR_A", som ikke optæder i cellerne - i kolonnel "S_lokation". Dvs. at de udgør en oversigt over disponible områder.

Jeg har rodet med dette i et par dage nu, og det er ikke noget problem for mig at liste de data, der både findes i kolonnen "S_Lokation" og i "varOMR_A". Men som sagt, så er det de variabler der er i "varOMR_A" som IKKE optræder i kolonnen "S_Lokation" jeg vil have listet.

Hvis jeg kan finde en løsning, har jeg 3 andre variabler: "varOMR_B", C, og D der yderligere skal liste de "SH" der ikke er i kolonnen "S_Lokation". Den ultimative løsning jeg prøver at kreere, er at lave en funktion der lister disse ikke optaget "SH".

Totalt set er der ca. 100 muligheder, som "S_Lokation" kan indeholde. Mulighederne er givet i variablerne "varOMR_A", B, C og D.

/skjold
Avatar billede mskjoldp Novice
23. oktober 2005 - 00:42 #3
Hvordan for jeg lov til at løbe et Array gennem hvor indekset er uden for området?

Eller hvordan løber jeg et Array gennem at andet Array, selvom Array'ene er forskellige i størrelse?
Avatar billede erikjacobsen Ekspert
23. oktober 2005 - 09:25 #4
Det er som udgangspunkt ikke noget problem, men jeg skal bare forstå det rigtigt.

Hvis du i varOMR_A har stående 1,3,5,7,9 og i databasen har stående 1,2,3,4,5. hvad skal du så have skrevet ud?
Avatar billede mskjoldp Novice
23. oktober 2005 - 18:01 #5
hvis jeg i varOMR_A har stående 1, 2, 3, 4, 5, 6, 7
og i db'en har stående 1, 3, 4, 6, 7

skal jeg have 2 og 5 listet

varOMR_A er udgangspunkt for hvad der kan stå i db'en, men det afgøres et andet sted i koden - og det er OK.
Avatar billede cpufan Juniormester
24. oktober 2005 - 23:35 #6
jeg tror nu det er j der er problemet
da vb array's starter ved 1 vil denne give problemer:

for j = 0 to ubound(varOMR_A)
        if ArrayLOK(i) <> varOMR_A(j) then

da varOMR_A(0) jo ikke findes (  varOMR_A(j)  )
Avatar billede mskjoldp Novice
25. oktober 2005 - 07:44 #7
aha
Avatar billede mskjoldp Novice
28. oktober 2005 - 20:20 #8
jeg kan fint nok løbe array'ene gennem hinanden, men jeg mangler at få listet de rigtige data.

23/10-2005 18:01:08
jeg skal have listet 2 og 5

/skjold
Avatar billede cpufan Juniormester
29. oktober 2005 - 00:27 #9
så skal din løkke lige udvides til en dobbelt løkke,
lad mig se om jeg kan gøre det her, uden fejl ;)

<%    for j = 0 to ubound(varOMR_A)
        if ArrayLOK(i) <> varOMR_A(j) then
            Response.Write varOMR_A(j) & "<br>"
        End if
    next %>

ændres til

<%    for j = 0 to ubound(varOMR_A)
        for i = 1 to ubound(ArrayLOK)
        varitjek = 0       
          if ArrayLOK(i) = varOMR_A(j) then ' den findes
          varitjek = 1       
          break
          end if
        next
          if varitjek = 0 then
          response.write varOMR_A(j)
          end if   
    next %>
Avatar billede cpufan Juniormester
29. oktober 2005 - 00:32 #10
tror ikke at break fungerer i asp....

så den skal du evt. slette for at få det til at fungere
Avatar billede mskjoldp Novice
29. oktober 2005 - 18:49 #11
tæt på cpufan, men...
koden herunder lister alle værdierne i varOMR_A:

        <%    dim varitjek
            for j = 0 to ubound(varOMR_A)
                for i = 1 to ubound(ArrayLOK)
                varitjek = 0       
                  if ArrayLOK(i) = varOMR_A(j) then ' den findes
                  varitjek = 1       
                  break
                  end if
                next
                  if varitjek = 0 then
                  response.write varOMR_A(j) & "<br>"
                  end if   
            next %>

Outputtet er:
SH 31
SH 36
SH 37
SH 41
SH 42
SH 46

resultatet skulle være at liste dem som ikke står i db'en, hvilket vil sige at outputtet skal give:
SH 36
SH 37
SH 42
da disse tre herunder:
SH 31
SH 41
SH 46
står i db'en.

/skjold
Avatar billede cpufan Juniormester
29. oktober 2005 - 19:01 #12
kunne tyde på at dit array ikke bliver fyldt rigtigt op fra db'en

prøv at udskrive det...
Avatar billede cpufan Juniormester
29. oktober 2005 - 19:06 #13
gør evt. sådan:

    set rs = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT * FROM fly_status WHERE S_lokation LIKE '%OMR_A SH%' ORDER BY S_lokation DESC"
    set rsantal = Server.CreateObject("ADODB.RecordSet")
        strSQLantal = "SELECT count(*) FROM fly_status WHERE S_lokation LIKE '%OMR_A SH%' ORDER BY S_lokation DESC"

rsantal.Open strSQLantal, conn,3,3   
rs.Open strSQL, conn,3,3

    Dim ArrayLOK(rsantal(0))
    i = 1
    while not rs.EOF
        ArrayLOK(i) = rs("S_lokation")
        i = i + 1
    rs.movenext
    wend %>
Avatar billede cpufan Juniormester
29. oktober 2005 - 19:11 #14
og det kan vel egentlig godt køres i et sqlkald:

    set rs = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT S_lokation, Count(*) as antal FROM fly_status WHERE S_lokation LIKE '%OMR_A SH%' ORDER BY S_lokation DESC"


rs.Open strSQL, conn,3,3

if not rs.eof then  Dim ArrayLOK(rs("antal"))
    i = 1
    while not rs.EOF
        ArrayLOK(i) = rs("S_lokation")
        i = i + 1
    rs.movenext
    wend %>
Avatar billede mskjoldp Novice
29. oktober 2005 - 20:15 #15
Der opstod en Microsoft VBScript-kompileringsfejl fejl '800a0402'

En heltalskonstant var ventet

Dim ArrayLOK(rs("antal"))
-------------^
Avatar billede cpufan Juniormester
29. oktober 2005 - 20:17 #16
set rs = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT S_lokation, Count(*) as antal FROM fly_status WHERE S_lokation LIKE '%OMR_A SH%' ORDER BY S_lokation DESC"


rs.Open strSQL, conn,3,3

if not rs.eof then 
antal = rs("antal")
Dim ArrayLOK(antal)
end if
    i = 1
    while not rs.EOF
        ArrayLOK(i) = rs("S_lokation")
        i = i + 1
    rs.movenext
    wend %>
Avatar billede mskjoldp Novice
29. oktober 2005 - 20:26 #17
En heltalskonstant var ventet

Dim ArrayLOK(antal)
-------------^
Avatar billede cpufan Juniormester
29. oktober 2005 - 20:28 #18
hmmm

prøv at udskrive rs("antal") og se hvad den siger til det
post det lige her
Avatar billede cpufan Juniormester
29. oktober 2005 - 20:30 #19
har fundet ud af det:

set rs = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT S_lokation, Count(*) as antal FROM fly_status WHERE S_lokation LIKE '%OMR_A SH%' ORDER BY S_lokation DESC"


rs.Open strSQL, conn,3,3

if not rs.eof then 
antal = rs("antal")
Dim ArrayLOK()
redim ArrayLOK(antal)
end if
    i = 1
    while not rs.EOF
        ArrayLOK(i) = rs("S_lokation")
        i = i + 1
    rs.movenext
    wend %>
Avatar billede mskjoldp Novice
29. oktober 2005 - 20:31 #20
denne kode udskriver dem der er i db'en:
    Dim array1, array2
    while not rs.EOF
        Redim Preserve ArrayLOK(i)
        ArrayLOK(i) = rs("S_lokation")
        i = i + 1
    rs.movenext
    wend

        <%    for j = 0 to ubound(varOMR_A)%>
            <%    for i = 0 to ubound(ArrayLOK)
                    Array1 = right(ArrayLOK(i),2)
                    if Instr(ArrayLOK(i),varOMR_A(j)) <> 0 Then
                        Response.Write "<tr><td bgcolor=green>" & varOMR_A(j) & "</td><td>" & ArrayLOK(i) & "</td></tr>"
                    End if
                next%>
        <%    next %>

dvs. at ArrayLOK indeholder:
OMR_A SH 31
OMR_A SH 41
OMR_A SH 46

og varOMR_A tilføjer så:
SH 31
SH 41
SH 46

samlet ser det sådan ud:
SH 31 OMR_A SH 31
SH 41 OMR_A SH 41
SH 46 OMR_A SH 46

men det er jo det er er i db'en ikke den fra varOMR_A som tilsvarende ikke er i db'en...

/skjold
Avatar billede mskjoldp Novice
29. oktober 2005 - 20:56 #21
Microsoft OLE DB Provider for ODBC Drivers fejl '80040e14'

[Microsoft][ODBC Microsoft Access-driver] Du har forsøgt at køre en forespørgsel, der ikke medtager det angivne udtryk "S_lokation" som en del af en aggregatfunktion.

/fsnskp/RT-SRS/sh.asp, linje 31


linje 31:
        strSQL = "SELECT S_lokation, Count(*) as antal FROM fly_status WHERE S_lokation LIKE '%OMR_A SH%' ORDER BY S_lokation DESC"
Avatar billede mskjoldp Novice
03. november 2005 - 20:22 #22
lukker uden løsning...
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
Kurser inden for grundlæggende programmering

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