21. oktober 2005 - 20:23Der 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
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.
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 %>
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.
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"
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 %>
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 %>
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 %>
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...
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"
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.