Avatar billede duno Nybegynder
31. januar 2004 - 14:54 Der er 18 kommentarer og
1 løsning

Udregn antal brugte/ubrugte

Jeg har følgende kode, jeg vil så godt have en statestik der siger hvor mange der er brugt og hvor mange der er ledige

jeg vi godt vise det samlede antal felter som er i:

FORUM_AVATAR.A_URL

det antal skal så bagefter modregnes:

FORUM_MEMBERS.M_AVATAR_URL

Og jeg vil så ha en udskrift i stil med dette:

Der er iøjeblikket 550 ikoner, hvoraf 340 er brugt.

her er koden

<%
Set database = Server.CreateObject ("ADODB.Connection")
database.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/webs/db/database.mdb")

SQL = "select distinct FORUM_AVATAR.A_URL , FORUM_MEMBERS.M_AVATAR_URL from FORUM_AVATAR left join FORUM_MEMBERS on FORUM_AVATAR.A_URL  = FORUM_MEMBERS.M_AVATAR_URL ORDER BY A_URL"
Set rs=database.Execute(SQL)

%>
<html>
<title>Min-baby.dk</title>
<head>
<style type="text/css">
<!--
.center {  font-family: "Comic Sans MS"; font-size: 12px; color: #744b96}
-->
</style>
<style type="text/css">
<!--
.back {  background-image:  url(grafik/bigback2.gif); background-attachment: fixed; background-repeat: no-repeat; background-position: left top}
-->
</style>

<STYLE type=text/css>BODY {
    SCROLLBAR-FACE-COLOR: #8D6CB8; SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-SHADOW-COLOR: #cccccc; SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-BASE-COLOR: #ffffff; scrollbar-dark-shadow-color: white; scrollbar-3d-light-color: 333333
}
</STYLE>
</head>

<body bgcolor="#F3E5FA" text="#744b96" class="back">
<%
response.write "<table border=""1"" bgcolor=""#DFCEED"" bordercolor=""#744b96"" cellpadding=""0"" cellspacing=""0"" align=""center"">"
maxPrRow=4
prRow = 0
do while not rs.EOF
  if prRow = 0 then response.write "<tr>"
    response.write "<td valign=""bottom"">"
    Response.Write "<p align=""center""><img src=""forum3/" & RS("A_URL") & """ align=""center"">"
  Response.Write " <br> <font color=""#744b96"">" & rs("A_URL")
  Response.write "<br><font color="
  if ""&rs("M_AVATAR_URL")<>"" then
    Response.write """red"">Brugt"
  else
    Response.write """blue"">Ledig"
  end if
  Response.write "</font>"
  Response.Write "</td>"

  prRow = prRow + 1
  if maxPrRow = prRow then
    prRow = 0
    Response.Write "</tr>"
  end if
  rs.Movenext
loop
if prRow > 0 then Response.Write "</tr>"
Response.Write "</table>"
%>
</body>
</html>
Avatar billede nute Nybegynder
31. januar 2004 - 19:43 #1
hmm ... en ordentlig forklaring ville nok ha' hjulpet ;-) Det er ikke nemt at forstå hvad dit problem er, ud fra det du har postet.

Men men ... Du vil åbenbart skrive ud hvor mange ikoner du har i basen, og hvor mange af disse der er i brug. Spørgsmålet er så:

- hvilken kolonne får du tallet "550" fra ?
- hvilken kolonne får du tallet "340" fra ?
- hvordan ligger data præsenteret i disse kolonner ? som "Ja/Nej" værdier eller som tal ?

/nute
Avatar billede duno Nybegynder
31. januar 2004 - 22:50 #2
Tabellen med alle de mulige ikoner hedder FORUM_AVATAR kolonnen jeg vil hente antallet fra er enten en tekst (A_URL) eller en tal kolonne (A_ID) det er nok nemmeste med A_ID da det er antallet vi skal have fat i!

Det brugte antal ikoner kan findes i tabellen  FORUM_MEMBERS og kolonnen  M_AVATAR_URL og det er så der problemet kommer.

Medlemmerne kan godt vælge det samme ikon, altså kan 500 mennesker godt deles om 350 ikoner.

Dette betyder at man på en eller anden måde kun skal hive et eksemplar af alle M_AVATAR_URL ud.. dette kan gøres med distinct kommandoen, der er så også en count funktion som jeg ike helt har fået til at du sammen med distinct.
Avatar billede nute Nybegynder
31. januar 2004 - 23:26 #3
hmm ... hvorfor gøre det svært når man kan gøre det nemt ?! Den aller nemmeste løsning vil jo være at lave 2 SQL'er:

SELECT COUNT( A_ID ) FROM FORUM_AVATAR
og
SELECT DISTINCT( M_AVATAR_URL ) FROM FORUM_MEMBERS

Antallet for den sidste query kan du så hive ud med:

recordSetObject.RecordCount

Du kan ikke kombinere count og distinct på samme kolonne

/nute
Avatar billede duno Nybegynder
31. januar 2004 - 23:52 #4
hvordan skal jeg bruge den der recordSetObject.RecordCount hvor skal den sættes???
Avatar billede nute Nybegynder
31. januar 2004 - 23:57 #5
Set rs=database.Execute(SQL)
Response.Write rs.RecordCount

Dette vil skrive ud antallet af "brugte" ikoner

/nute
Avatar billede duno Nybegynder
01. februar 2004 - 00:05 #6
hmm...

så får jeg et resultat der siger -1 det er ihvertfald forkert!!

min samlede SQL ser ud som følgende:

<%
Set database = Server.CreateObject ("ADODB.Connection")
database.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/webs/db/database.mdb")

SQL = "select distinct FORUM_AVATAR.A_URL ,FORUM_AVATAR.A_ID , FORUM_MEMBERS.M_AVATAR_URL from FORUM_AVATAR left join FORUM_MEMBERS on FORUM_AVATAR.A_URL  = FORUM_MEMBERS.M_AVATAR_URL ORDER BY A_URL"

SQL2 = "SELECT COUNT(A_ID) FROM FORUM_AVATAR"
SQL3 = "SELECT distinct FORUM_MEMBERS.M_AVATAR_URL recordSetObject.RecordCount"
Set rs=database.Execute(SQL)
Response.Write rs.RecordCount
%>



og et stykke nede



<%
Response.Write "<table>"
Response.Write "  <tr>"
Response.Write "<td>" & rs("A_ID") & rs("M_AVATAR_URL")
Response.Write "</td>"
Response.Write "</tr>"
Response.Write "</table>"
%>
Avatar billede nute Nybegynder
01. februar 2004 - 00:12 #7
Prøv:

<%
Set database = Server.CreateObject ("ADODB.Connection")
database.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/webs/db/database.mdb")

SQL = "select distinct FORUM_AVATAR.A_URL ,FORUM_AVATAR.A_ID , FORUM_MEMBERS.M_AVATAR_URL from FORUM_AVATAR left join FORUM_MEMBERS on FORUM_AVATAR.A_URL  = FORUM_MEMBERS.M_AVATAR_URL ORDER BY A_URL"

SQL2 = "SELECT COUNT(A_ID) AS ledigeIkoner FROM FORUM_AVATAR"
SQL3 = "SELECT distinct FORUM_MEMBERS.M_AVATAR_URL recordSetObject.RecordCount"
Set rs = database.Execute(SQL2)
ledigeIkoner = rs("ledigeIkoner")
Set rs = database.Execute( SQL3 )
brugteIkoner = rs.RecordCount
%>

så har du dine tal i variablerne 'ledigeIkoner' og 'brugteIkoner' som du kan skrive ud:

Der er iøjeblikket <%= ledigeIkoner %> ikoner, hvoraf <%= brugteIkoner %> er brugt

/nute
Avatar billede duno Nybegynder
01. februar 2004 - 00:26 #8
hvad betyder det her???

Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'FORUM_MEMBERS.M_AVATAR_URL recordSetObject.RecordCount'.

/test123456.asp, line 11
Avatar billede nute Nybegynder
01. februar 2004 - 00:31 #9
oki ... du har lavet noget meget mærkelig med din ene SQL. skift denne:

SQL3 = "SELECT distinct FORUM_MEMBERS.M_AVATAR_URL recordSetObject.RecordCount"

med denne:

SQL3 = "SELECT DISTINCT( M_AVATAR_URL ) FROM FORUM_MEMBERS"
Avatar billede duno Nybegynder
01. februar 2004 - 00:40 #10
nu kommer der følgende frem på siden


Der er iøjeblikket 361 ikoner, hvoraf -1 er brugt 'ADODB.Recordset error '800a0cc1'

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

/test123456.asp, line 53

linie 53 =     Response.Write "<p align=""center""><img src=""forum3/" & RS("A_URL") & """ align=""center"">"
Avatar billede nute Nybegynder
01. februar 2004 - 00:46 #11
det er jo fordi du ikke har eksekveret den SQL der indeholder kolonnen A_URL

prøv noget ála:

<%
Set database = Server.CreateObject ("ADODB.Connection")
database.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/webs/db/database.mdb")

SQL = "select distinct FORUM_AVATAR.A_URL ,FORUM_AVATAR.A_ID , FORUM_MEMBERS.M_AVATAR_URL from FORUM_AVATAR left join FORUM_MEMBERS on FORUM_AVATAR.A_URL  = FORUM_MEMBERS.M_AVATAR_URL ORDER BY A_URL"

SQL2 = "SELECT COUNT(A_ID) AS ledigeIkoner FROM FORUM_AVATAR"
SQL3 = "SELECT distinct FORUM_MEMBERS.M_AVATAR_URL recordSetObject.RecordCount"
Set rs = database.Execute(SQL2)
ledigeIkoner = rs("ledigeIkoner")
Set brugteIkonerRS = Server.CreateObject("ADODB.RecordSet")
brugteIkonerRS.Open SQL3, database, 3, 3
brugteIkoner = brugteIkonerRS.RecordCount
Set RS = database.Execute( SQL )
%>

/nute
Avatar billede duno Nybegynder
01. februar 2004 - 00:57 #12
jeg tror jeg er der hvor jeg ikke kan bunde

Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/test1234567.asp, line 12

du får lige linie 11 - 13

Set brugteIkonerRS = Server.CreateObject("ADODB.RecordSet")
brugteIkonerRS.Open SQL3, database, 3, 3
brugteIkoner = brugteIkonerRS.RecordCount
Avatar billede duno Nybegynder
01. februar 2004 - 00:58 #13
kan det være fordi at FORUM_MEMBERS.M_AVATAR_URL allerede er defineret i SQL
Avatar billede duno Nybegynder
01. februar 2004 - 01:02 #14
jeg faldt over det her tidligere idag...

http://www.devguru.com/Technologies/ado/quickref/recordset_recordcount.html

Der skriver han at -1 bruges i tilfælde hvor der ikke kan tælles øøøhh nå???

hvad betyder det.. og hvad hulen kan man så gøre??
Avatar billede nute Nybegynder
01. februar 2004 - 01:12 #15
Denne kode fungerer fint for mig. jeg har lavet 2 tabeller der hedder FORUM_AVATAR og FORUM_MEMBERS med de kolonner du har opgivet. derefter har jeg oprettet 5 URL'er i FORUM_AVATAR og oprettet 4 poster i FORUM_MEMBERS hvor 3 af dem er unikke:

Set database = Server.CreateObject ("ADODB.Connection")
database.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/inetpub/wwwroot/Private/xperten/459381/db.mdb")
SQL = "select distinct FORUM_AVATAR.A_URL ,FORUM_AVATAR.A_ID , FORUM_MEMBERS.M_AVATAR_URL from FORUM_AVATAR left join FORUM_MEMBERS on FORUM_AVATAR.A_URL  = FORUM_MEMBERS.M_AVATAR_URL ORDER BY A_URL"
SQL2 = "SELECT COUNT(A_ID) AS ledigeIkoner FROM FORUM_AVATAR"
SQL3 = "SELECT DISTINCT( M_AVATAR_URL ) FROM FORUM_MEMBERS"
Set rs = database.Execute(SQL2)
ledigeIkoner = rs("ledigeIkoner")
Set brugteIkonerRS = Server.CreateObject("ADODB.RecordSet")
brugteIkonerRS.Open SQL3, database, 3, 3
brugteIkoner = brugteIkonerRS.RecordCount
Set RS = database.Execute( SQL )

Resultatet er:

Der er iøjeblikket 5 ikoner, hvoraf 3 er brugt

du kan se selv @

http://xperimentum.com/xperten/459381/

databasen ligger på

http://xperimentum.com/xperten/459381/db.mdb

/nute
Avatar billede duno Nybegynder
01. februar 2004 - 01:31 #16
YEEEEEEEEEEESSSSSSSSS

Sådan!!

der var den sku!!! nej hvor fedt!!

Ved du hvad jeg er dig dybt taknemlig... og sender naturligvis dine points med det samme... hvis du bare lige vil give mig et svarindlæg.. så jeg har nogen at betale til!!

lige et spørgsmål af ren interesse

det der du skrev:

brugteIkonerRS.Open SQL3, database, 3, 3  -  hvorfor skrev du 3, 3

Jeg har set det før og altid undret mig.. andre gange står der jo 1, hvad gør det???
Avatar billede nute Nybegynder
01. februar 2004 - 10:08 #17
det var godt at høre.

man bruger "3, 3" for at angive henholdsvis "Cursor type" og "Lock type". Det sidste 3-tal er strængt taget ikke nødvendig, men det første skal man sætte for at få lov til fx. at tælle antal records. Der er 4 mulige værdier man kan bruge både for "Cursor Type" og "Lock Type". I dette tilfælde kunne man så skrive:

brugteIkonerRS.Open SQL3, database, 3

læs mere om hvad de 4 "muligheder" kan gøre:
http://www.devguru.com/Technologies/ado/quickref/recordset_open.html

/nute
Avatar billede duno Nybegynder
01. februar 2004 - 12:42 #18
Tak for svaret

Du bliver batalt med det samme...

Fik en tanke.. jeg har også nogen ikoner som er reserveret til sitets specielle brugere admin,moderator osv

Dette er bare et bonus spørgsmål!

Feltet hedder A_MEMBER_ID og indeholder 0 eller brugerens ID

Brugerens ID (A_MEMBER_ID) ligger i FORUM_AVATAR

Hvad gør man for at få et tredje felt ind.. når jeg indsætter feltet bliver det alligevel markeret som brugt (det er de jo også)

De 2 muligheder:

if ""&rs("M_AVATAR_URL")<>"" then
    Response.write """red"">Brugt"
  else
    Response.write """blue"">Ledig"
  end if

Her er mit forslag til den ekstra mulighed (den giver diog kun "brugt" som resultat:

if ""&rs("MEMBER_ID")="A_MEMBER_ID" then
Response.write """blue"">fastlåst"
End if
if ""&rs("M_AVATAR_URL")<>"" then
    Response.write """red"">Brugt"
else
    Response.write """blue"">Ledig"
  end if

har også den her mulighed

if ""&rs("A_MEMBER_ID")>"0" then
Response.write """blue"">fastlåst"
End if
if ""&rs("M_AVATAR_URL")<>"" then
    Response.write """red"">Brugt"
else
    Response.write """blue"">Ledig"
  end if


Jeg får kun brugt ud lige meget hvad!

Forresten.. DYB respekt for din indsats inat! stort kørt.. testdatabase og det hele!!

Forsat god dag!!
Avatar billede nute Nybegynder
01. februar 2004 - 12:59 #19
forstår desværre ikke helt hvad du er ude efter :-| Din kode vil jo hellere ikke give nogen fornuftig HTML fordi du ikke udelukker den ene eller anden if. Hvis A_MEMBER_ID er større end 0, så vil du skrive ud '"blue">fastlåst' og hvis M_AVATAR_URL er ulig "", så vil du skrive ud '"red">Brugt'. Dette vil jo give et output der ser sådan ud:

"blue">fastlåst"red">brugt

det giver jo overhovedet ingen mening.

prøv at forklar dig lidt bedre. Jeg kan godt forstå at FORUM_AVATAR.A_MEMBER_ID kan indeholde "0" eller et medlemsid, men hvad skal udskrives hvis værdien er henholsvis "0" eller et medlems id.

er du sikekr på at det ikke er en 'else' du skal bruge:

if rs("A_MEMBER_ID") <> "0" then
  Response.write """blue"">fastlåst"
else
    if rs("M_AVATAR_URL")<>"" then
        Response.write """red"">Brugt"
    else
        Response.write """blue"">Ledig"
    end if
end if

/nute
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