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 dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.