Avatar billede karsten_larsen Praktikant
07. januar 2003 - 04:25 Der er 27 kommentarer og
2 løsninger

Antal gange en bestemt værdi optræder

Jeg har brug for at finde antallet af gange en bestemt værdi i en søgning og er gået lidt i stå med mht. til ideer. Databasen består kun af en række og 5 kolonner. Så hvor mange gange optræder værdien i de 5 kolonner er mit problem.

Jeg får resultatet i IF løkken:

Item cannot be found in the collection corresponding to the requested name or ordinal.

:-) karsten_larsen

koden er som følger:

  Set objRecResultat = Server.CreateObject ("ADODB.Recordset")
  objRecResultat.Open "databasen", objConn, 0, 1, 2
   
    ' her udskrives værdien for hvert udsagn
      Do While Not objRecResultat.EOF
    Response.Write "Resultat af udsagn 1  "  & objRecResultat("u1")& "<br>"
    Response.Write "Resultat af udsagn 2  "  & objRecResultat("u2")& "<br>"
    Response.Write "Resultat af udsagn 3  "  & objRecResultat("u3")& "<br>"
    Response.Write "Resultat af udsagn 4  "  & objRecResultat("u4")& "<br>"
    Response.Write "Resultat af udsagn 5  "  & objRecResultat("u5")& "<br>"
    objRecResultat.MoveNext
    Loop

    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        IF objRecResultat("u(a)") = 3 THEN
        n=n+1
        else
        end if
    NEXT
    Response.Write "Antal nr = 3 "  & "n" & "<br>"
   
objRecResultat.close
set objRecResultat = nothing
objConn.close
set objConn = nothing
Avatar billede dr-data Nybegynder
07. januar 2003 - 07:05 #1
din kode skal vist se sådan her ud:
<!--START-->
    ' her udskrives værdien for hvert udsagn
      Do While Not objRecResultat.EOF
    Response.Write "Resultat af udsagn 1  "  & objRecResultat("u1")& "<br>"
    Response.Write "Resultat af udsagn 2  "  & objRecResultat("u2")& "<br>"
    Response.Write "Resultat af udsagn 3  "  & objRecResultat("u3")& "<br>"
    Response.Write "Resultat af udsagn 4  "  & objRecResultat("u4")& "<br>"
    Response.Write "Resultat af udsagn 5  "  & objRecResultat("u5")& "<br>"

    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        IF objRecResultat("u(a)") = 3 THEN
        n=n+1
        else
        end if
    NEXT

    objRecResultat.MoveNext
    Loop
<!--SLUT-->

idet at du med objRecResultat("u(a)") prøver at hente fra en post der endnu ikke er oprettet, jeg mener du bruger MoveNext, indtil du har nået bunden, derefter prøver du at hive flere data ud, efter at passeret den sidste post ;-)
Avatar billede niceday Nybegynder
07. januar 2003 - 07:13 #2
Det er fordi du med objRecResultat.MoveNext skifter til næste post, hvorefter den springer ud af løkken, fordi der jo kun er 1. Herefter ønsker du at få værdien af objRecResultat("u(a)"), som jo ikke længere er gyldig, da du er gået en linie ned.

Det hedder heller ikke: objRecResultat("u(a)")
Det hedder: objRecResultat (noget andet hvor u og tallet lægges sammen, som streng)
Avatar billede niceday Nybegynder
07. januar 2003 - 07:15 #3
Prøv dette også:

obj = "u" & str(a)
objRecResultat(obj)
Avatar billede dr-data Nybegynder
07. januar 2003 - 07:22 #4
eller smartere : objRecResultat("u" & a)
Avatar billede dr-data Nybegynder
07. januar 2003 - 07:28 #5
den finder selv ud af at konvertere a til en streng ved en sammenlægning med "u" - ellers hedder det jo CStr(a) (Convert To String) og ikke str(a)

ku ik la vær' :-P
Avatar billede niceday Nybegynder
07. januar 2003 - 07:34 #6
det er sgu helt ok - vi er her for at løse vores egne eller andres problemer.
Avatar billede dr-data Nybegynder
07. januar 2003 - 10:51 #7
hehe JA! :-)
Avatar billede karsten_larsen Praktikant
07. januar 2003 - 12:04 #8
-> dr-data & niceday

Wauw - sikken meget hjælp.

Det er ikke lykkes for mig endnu. Jeg er kommet dertil, at det er forskellige kombinationer på må og få der prøves af!

Jeg har prøvet jeres forslag, sidste gav følgende:
Resultat af udsagn 1 3
Resultat af udsagn 2 3
Resultat af udsagn 3 3
Resultat af udsagn 4 3
Resultat af udsagn 5 3

Microsoft VBScript runtime error '800a000d'

Type mismatch

/testen/resultat3.asp, line 20

hvor linie 20 er obj = "u" & str(a)

hele koden har jeg sat til sidst.

Selve databasen ser sådan ud ID|u1|u2|u3|u4|u5
med en række som skrives ind med værdier fra 1 til 5

:-) Karsten

også den sidste kode:

<%
  Set objRecResultat = Server.CreateObject ("ADODB.Recordset")
  objRecResultat.Open "databasen", objConn, 0, 1, 2
   
    ' her udskrives værdien for hvert udsagn
      Do While Not objRecResultat.EOF
    Response.Write "Resultat af udsagn 1  "  & objRecResultat("u1")& "<br>"
    Response.Write "Resultat af udsagn 2  "  & objRecResultat("u2")& "<br>"
    Response.Write "Resultat af udsagn 3  "  & objRecResultat("u3")& "<br>"
    Response.Write "Resultat af udsagn 4  "  & objRecResultat("u4")& "<br>"
    Response.Write "Resultat af udsagn 5  "  & objRecResultat("u5")& "<br>"
    objRecResultat.MoveNext
   
    obj = "u" & str(a)
    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        IF  objRecResultat("obj") <> 3 THEN
        n=n+1
        else
        end if
    NEXT

    objRecResultat.MoveNext
   
    Loop
    Response.Write "Antal nr = 3 "  & "n" & "<br>"
   
   
objRecResultat.close
set objRecResultat = nothing
objConn.close
set objConn = nothing
%>
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:11 #9
:-)

denne her er lige rettet lidt til:

    obj = "u" & cstr(a)
    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        IF  objRecResultat(obj) <> 3 THEN
        n=n+1
        else
        end if
    NEXT

2 rettelser...
- det hedder cstr(a)
- og objRecResultat("obj")
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:12 #10
ups - glemte at rette - objRecResultat("obj") til objRecResultat(obj)
Avatar billede karsten_larsen Praktikant
07. januar 2003 - 12:15 #11
-> dr-data

Jeg har lige prøvet og får

følgende fejl

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/testen/resultat3.asp, line 23

hvor linie 23 er IF  objRecResultat(obj) <> 3 THEN


:-) Karsten
Avatar billede karsten_larsen Praktikant
07. januar 2003 - 12:16 #12
Skal det laves på en helt anden måde???
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:21 #13
har du prøvet med
If objRecResultat("u" & a) <> 3 Then
Avatar billede thomas_yde Nybegynder
07. januar 2003 - 12:23 #14
Hvorfor laver du ikke en count ?

select count(*) from tabel where felt=værdi_der_skal_findes
Avatar billede thomas_yde Nybegynder
07. januar 2003 - 12:23 #15
hov min fejl, ignorere min besked, var lidt søvnig.
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:28 #16
idet følgende ikke kan lade sig gøre:

    obj = "u" & cstr(a)
    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        IF  objRecResultat(obj) <> 3 THEN
        n=n+1
        else
        end if
    NEXT

fordi a først bliver brugt inde i løkken....
hvis "obj", skal bruges, skal det se sådan her ud....

    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
    obj = "u" & cstr(a)
        IF  objRecResultat(obj) <> 3 THEN    ' det kan være den skal have cstr(a), men det skulle jeg ikke mene..
        n=n+1
        else
        end if
    NEXT

eller den som jeg selv foretrækker:
    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        IF  objRecResultat("u" & a) <> 3 THEN
        n=n+1
        else
        end if
    NEXT

/Vania :-)
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:30 #17
' det kan være den skal have cstr(a), men det skulle jeg ikke mene

nede ved min foretrukne...
Avatar billede karsten_larsen Praktikant
07. januar 2003 - 12:35 #18
-> dr-data

Det lykkedes med det sidste du sagde. Sætter lige koden såfremt andre har lyst til at se det rigtige resultat.

-> thomas_yde
Jeg vidste ikke man kunne det. Jeg holder mig til dette, det virker nu.

:-) Karsten

koden som virker:

  Set objRecResultat = Server.CreateObject ("ADODB.Recordset")
  objRecResultat.Open "databasen", objConn, 0, 1, 2
   
    ' her udskrives værdien for hvert udsagn
      Do While Not objRecResultat.EOF
    Response.Write "Resultat af udsagn 1  "  & objRecResultat("u1")& "<br>"
    Response.Write "Resultat af udsagn 2  "  & objRecResultat("u2")& "<br>"
    Response.Write "Resultat af udsagn 3  "  & objRecResultat("u3")& "<br>"
    Response.Write "Resultat af udsagn 4  "  & objRecResultat("u4")& "<br>"
    Response.Write "Resultat af udsagn 5  "  & objRecResultat("u5")& "<br>"

   
   
    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        If objRecResultat("u" & a) = 3 Then
        n=n+1
        else
        end if
    NEXT

    objRecResultat.MoveNext
   
    Loop
    Response.Write "Antal nr = 3 " & n & "<br>"
   
   
objRecResultat.close
set objRecResultat = nothing
objConn.close
set objConn = nothing
Avatar billede thomas_yde Nybegynder
07. januar 2003 - 12:38 #19
dr-data >
IF  objRecResultat("u" & a) <> 3 THEN
skal det ikke være = 3 ?

karsten_larsen >
<%
  Set objRecResultat = Server.CreateObject ("ADODB.Recordset")
  objRecResultat.Open "databasen", objConn, 0, 1, 2
   
    ' her udskrives værdien for hvert udsagn
      Do While Not objRecResultat.EOF
    Response.Write "Resultat af udsagn 1  "  & objRecResultat("u1")& "<br>"
    Response.Write "Resultat af udsagn 2  "  & objRecResultat("u2")& "<br>"
    Response.Write "Resultat af udsagn 3  "  & objRecResultat("u3")& "<br>"
    Response.Write "Resultat af udsagn 4  "  & objRecResultat("u4")& "<br>"
    Response.Write "Resultat af udsagn 5  "  & objRecResultat("u5")& "<br>"
    objRecResultat.MoveNext  <--- flytter curseren
   
    obj = "u" & str(a)
    ' her skal findes antallet af gange af en bestemt værdi
    For a=1 to 5
        IF  objRecResultat("obj") <> 3 THEN
        n=n+1
        else
        end if
    NEXT

    objRecResultat.MoveNext  <--- flytter curseren
     
    Loop
    Response.Write "Antal nr = 3 "  & "n" & "<br>"
   
   
objRecResultat.close
set objRecResultat = nothing
objConn.close
set objConn = nothing
%>

Vil den ikke flytte curseren 2 gange?
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:43 #20
thomas_yde sov nu heller ik helt.... ;-)
findtal = 3
Sql = "select count(*) As Antal from Tabel where u1=" & findtal & " OR u2=" & findtal & " OR u3=" & findtal & " OR u4=" & findtal & " OR u5=" & findtal
antal rækker der indeholder tallet "findtal", vil så være fx. Rs("Antal")
:-P
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:45 #21
thomas_yde> øhh? - jo sikkert..., sådan går det når man er lidt for hurtig på fingrene :-)
Avatar billede thomas_yde Nybegynder
07. januar 2003 - 12:49 #22
dr-data > hehe jep og når man skriver lidt før man har læst det hele igennem *<|:)
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:49 #23
selvom det nu faktisk ikke var MIG der havde indført den smutter

den blev postet af Karsten : 07/01-2003 12:04:08 :-P
Avatar billede thomas_yde Nybegynder
07. januar 2003 - 12:54 #24
:D
Jeg noterede det bare lidt.
Men din kode burde da virke, men er du ikke enig i at den flytter curseren 2 gange i scriptet ?
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:57 #25
jo da... i den grad..... den øverste kan udlades.... - ellers tæller den kun 50%
Avatar billede dr-data Nybegynder
07. januar 2003 - 12:58 #26
kan / skal....
Avatar billede karsten_larsen Praktikant
07. januar 2003 - 13:02 #27
Jeg kan huske en tv-udsendelse som hed Nat på Nettet, vistnok på tv4. Så fejl kan jo ske på Nat på Eksperten.

I skal have mange tak for hjælpen. Fordeling af point er dr-data 55 niceday 10 og 5 til thomas yde, hvis du ligger et svar.

:-) karsten
Avatar billede thomas_yde Nybegynder
07. januar 2003 - 13:05 #28
nej det er ligemeget jeg sov jo i timen så bare giv de andre point :)
Avatar billede karsten_larsen Praktikant
07. januar 2003 - 13:05 #29
Det kan man ikke. Så jeg opretter et point spørgsmål for det de sidste point.

:-) karsten
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