Avatar billede thomas_b Nybegynder
17. marts 2006 - 23:21 Der er 24 kommentarer og
1 løsning

Hvor for jeg kun 1 post !

Hej Eksperter...

Jeg er ved at lave en statestik og har et problem...

Jeg har denne kode:
SQL = "SELECT * FROM nytabel2006_statastik_log_unikke"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
DO WHILE NOT rs.EOF

Kan i hurtigt, se en fejl jeg har lavet for jeg kan ikke...! Den henter kun den første post fra databasen...! Den skal jo gå alle poster igennem...!
Avatar billede eagleeye Praktikant
17. marts 2006 - 23:26 #1
Ud fra det kode du har så kunne det være fordi der kun er en post?
men der er jo nok flere end en når du spørger :)

Du bliver nød til at vise det kode som udskriver posterne, altså ned til linien hvor der står:  loop
Avatar billede thomas_b Nybegynder
17. marts 2006 - 23:28 #2
<%
SQL = "DELETE * FROM nytabel2006_statastik_buffer_brugere"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2




SQL = "SELECT * FROM nytabel2006_statastik_log_unikke"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2



  DO WHILE NOT rs.EOF







ip_nr = rs("ip")
count_nr = rs("count")
sprog_op = rs("sprog")




SQL = "SELECT count(*) as log_post_brugere FROM nytabel2006_statastik_log_unikke WHERE ip = '" & ip_nr & "' AND count = " & count_nr & ""
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
log_post_brugere = rs("log_post_brugere")





%><script>alert('<%=ip_nr%>');</script><%




SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
rs.addnew
rs("count") = log_post_brugere
rs("ip") = ip_nr
rs("sprog") = sprog_op
rs.Update

rs.MoveNext
LOOP
%>
Avatar billede eagleeye Praktikant
17. marts 2006 - 23:34 #3
ok, det er fordi du overskriver dit recordset rs når du laver count og igen når du indsætter en ny post i nytabel2006_statastik_buffer_brugere.

Du skal bruge forskellige navne til hvert recordset du bruger, eksempel kan du rette det recordset du brurger til at tælle:

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
log_post_brugere = rs("log_post_brugere")


Til rs_count:

Set rs_count = Server.CreateObject("ADODB.Recordset")
rs_count.Open SQL, Conn,1, 2
log_post_brugere = rs_count("log_post_brugere")
rs_count.Close  'ny linie
Set rs_count = nothing  'ny linie



Det samme gælder hvor der sætte ind i den anden tabel:

SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
rs.addnew
rs("count") = log_post_brugere
rs("ip") = ip_nr
rs("sprog") = sprog_op
rs.Update


Der kan du evt. kalde det for rs_buf:

SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere"
Set rs_buf = Server.CreateObject("ADODB.Recordset")
rs_buf.Open SQL, Conn,1, 2
rs_buf.addnew
rs_buf("count") = log_post_brugere
rs_buf("ip") = ip_nr
rs_buf("sprog") = sprog_op
rs_buf.Update
rs_buf.Close  'ny linie
Set rs_buf = Nothing 'nyline
Avatar billede thomas_b Nybegynder
17. marts 2006 - 23:45 #4
Dette giver en fejl der hedder...:

Operation is not allowed when the object is closed.

På den første linie med denne tekst...: rs.Close  'ny linie



<%
SQL = "DELETE * FROM nytabel2006_statastik_buffer_brugere"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2


rs.Close  'ny linie
Set rs = nothing  'ny linie



SQL = "SELECT * FROM nytabel2006_statastik_log_unikke"
Set rs_rull = Server.CreateObject("ADODB.Recordset")
rs_rull.Open SQL, Conn,1, 2



  DO WHILE NOT rs.EOF







ip_nr = rs_rull("ip")
count_nr = rs_rull("count")
sprog_op = rs_rull("sprog")

rs_rull.Close  'ny linie
Set rs_rull = nothing  'ny linie




SQL = "SELECT count(*) as log_post_brugere FROM nytabel2006_statastik_log_unikke WHERE ip = '" & ip_nr & "' AND count = " & count_nr & ""
Set rs_count = Server.CreateObject("ADODB.Recordset")
rs_count.Open SQL, Conn,1, 2
log_post_brugere = rs_count("log_post_brugere")
rs_count.Close  'ny linie
Set rs_count = nothing  'ny linie





%><script>alert('<%=ip_nr%>');</script><%




SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2
rs.addnew
rs("count") = log_post_brugere
rs("ip") = ip_nr
rs("sprog") = sprog_op
rs.Update
rs.Close  'ny linie
Set rs = nothing  'ny linie


    rs.MoveNext
  LOOP
%>
Avatar billede eagleeye Praktikant
17. marts 2006 - 23:51 #5
du kan slette disse to i toppen da der udføres en DELETE SQL:

rs.Close  'ny linie
Set rs = nothing  'ny linie




Så skal denne rettes:

DO WHILE NOT rs.EOF


Til rs_full:


DO WHILE NOT rs_full.EOF
Avatar billede eagleeye Praktikant
17. marts 2006 - 23:51 #6
Det samme gælder for denne:

rs.MoveNext

Det skal være rs_full:

rs_full.MoveNext
Avatar billede thomas_b Nybegynder
17. marts 2006 - 23:56 #7
Den siger: Object required

På: rs_rull.MoveNext
Avatar billede eagleeye Praktikant
17. marts 2006 - 23:58 #8
Prøv at fjerne disse to linier inde i loopet, de skal først være efter loop.

rs_rull.Close  'ny linie
Set rs_rull = nothing  'ny linie
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:07 #9
Okay... Den fremklader kun den sidte linie i databasen... Men de er der...
Hvad er der så galt med dette script, til at fremkalde dem...!

<%
SQL = "SELECT TOP 10 * FROM nytabel2006_statastik_buffer_brugere ORDER BY count desc"
Set rs_kald = Conn.Execute(SQL)


if less10 = "" then
less10 = "1"
else
less10 = less10+1
end if
%>


<tr>
<td class="feltnavn" style="width:0px;"><%=less10%></td>
<td class="feltnavn" style="width:0px;"><%=rs_kald("count")%></td>
<td class="feltnavn" style="width:0px;"><%=rs_kald("ip")%></td>
<td class="feltnavn" style="width:0px;"><%=rs_kald("sprog")%></td>
</tr>


<%
rs_kald.Close  'ny linie
Set rs_kald = nothing  'ny linie
%>
Avatar billede eagleeye Praktikant
18. marts 2006 - 00:10 #10
Der manger et loop prøv sådan her:


<%
SQL = "SELECT TOP 10 * FROM nytabel2006_statastik_buffer_brugere ORDER BY count desc"
Set rs_kald = Conn.Execute(SQL)


do while not rs_kald.EOF

if less10 = "" then
less10 = "1"
else
less10 = less10+1
end if
%>

<tr>
<td class="feltnavn" style="width:0px;"><%=less10%></td>
<td class="feltnavn" style="width:0px;"><%=rs_kald("count")%></td>
<td class="feltnavn" style="width:0px;"><%=rs_kald("ip")%></td>
<td class="feltnavn" style="width:0px;"><%=rs_kald("sprog")%></td>
</tr>

<%
  rs_kald.Movenext
loop
rs_kald.Close  'ny linie
Set rs_kald = nothing  'ny linie
%>
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:20 #11
Hvis jeg nu skriver scriptet således:

SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2

if ip_nr <> rs("ip") AND count_nr <> rs("count") then

rs.addnew
rs("count") = log_post_brugere
rs("ip") = ip_nr
rs("sprog") = sprog_op
rs.Update

end if


rs.Close  'ny linie
Set rs = nothing  'ny linie


    rs_rull.MoveNext
  LOOP

rs_rull.Close  'ny linie
Set rs_rull = nothing  'ny linie

Så jeg sikre mig at jeg ikke for 2 end poster ind i min database - kommer den med en fejl der hedder...!: Exception occurred.

På denne linie: if ip_nr <> rs("ip") AND count_nr <> rs("count") then
Avatar billede eagleeye Praktikant
18. marts 2006 - 00:25 #12
Så skal du prøve at lave dette kode:

SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2

if ip_nr <> rs("ip") AND count_nr <> rs("count") then

rs.addnew
rs("count") = log_post_brugere
rs("ip") = ip_nr
rs("sprog") = sprog_op
rs.Update

end if



Om til dette så det er i SQL sætningen den tjekker om IP'en og count findes. Findes den ikke tilføjes en ny. Fejlen opstår hvis rs er tomt. Så prøv sådan her, jeg har antaget at count kolonnen er en tal kolonne:


SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere where ip = '" & ip_nr & "' and [count] = " &  count_nr
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2

if rs.EOF then

rs.addnew
rs("count") = log_post_brugere
rs("ip") = ip_nr
rs("sprog") = sprog_op
rs.Update

end if
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:30 #13
Så kommer den med denne fejl...: Data type mismatch in criteria expression.

På denne linie: rs.Open SQL, Conn,1, 2 - på den du lige skrev....
Avatar billede eagleeye Praktikant
18. marts 2006 - 00:32 #14
Så prøv at rette denne linie:
SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere where ip = '" & ip_nr & "' and [count] = " &  count_nr

Til denne:

SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere where ip = '" & ip_nr & "' and [count] = '" &  count_nr & "'"
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:43 #15
Den laver stadig dubletter....!
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:44 #16
Og der kommer 12 poster ud...
Avatar billede eagleeye Praktikant
18. marts 2006 - 00:46 #17
Er det så de rigtgie parametre den tjekker på?

Så vidt jeg kan se ligger du variblen:  log_post_brugere ind i count men tjekker på om count er lig varialben count_nr  hvilken en af de to skal det være??

Hvis det skal være log_post_brugere, så prøv at rette denne linie:

SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere where ip = '" & ip_nr & "' and [count] = '" &  count_nr & "'"

Til dette:

SQL = "SELECT * FROM nytabel2006_statastik_buffer_brugere where ip = '" & ip_nr & "' and [count] = '" &  log_post_brugere & "'"
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:51 #18
Nu kommer de pågældene poster ud men den sotere slet ikke...!
Selvom jeg har skrevet:  ORDER BY count desc
Avatar billede eagleeye Praktikant
18. marts 2006 - 00:54 #19
Jo den sortere nok efter det første tal, ud fra SQL sætningen så er kolonnen count af typen tekst. Tekst sortere karakter for karakter :)

Prøv at konverter count til int i SQL sætningen sådan her:

ORDER BY int(count) desc
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:57 #20
Det var godt nok _____ !!
Det virker SkU... - 1000 tak...

Har lige nogle spørgsmål...
Avatar billede thomas_b Nybegynder
18. marts 2006 - 00:59 #21
er:

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2

det samme som:

Set rs_kald = Conn.Execute(SQL)

og hvad gør at du lige satte: int(count) rundt om count og hvorfor har du sat count i [] tidligere ex. [count]
Avatar billede eagleeye Praktikant
18. marts 2006 - 01:09 #22
er:

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL, Conn,1, 2

det samme som:

Set rs_kald = Conn.Execute(SQL)


Både ja og nej. Man får det samme ud af det. Et recordset med data fra database.  Den første metode er det recordsetet som connecter til database og får data i sig. Den anden metode er det connection som executer en SQL og ligger data ind i et recordset. Typsik er der ingen forskel på de to og man man frist vælge hvilken metode man ønker at bruge. Der er en undtagelse hvor den første metode skal bruges og det er hvis man vil lave paging og det er fordi man bruger bookmarks og speical properties på recordset som kun bliver sat i ved første metode.


og hvad gør at du lige satte: int(count) rundt om count og hvorfor har du sat count i [] tidligere ex. [count]

Int(count), int() er en funktion som konverter en teskt til et tal. Teksten skal indeholde et tal, men fordi typen er teskt vil sorteren ikke give det man forventer. Klammerne omkring [count] betyder at det som er inden for klammerne er et kolonnenavn eller tabelnavn i SQL sætningen. Man bruger det hvis et navne indeholder uheldige tegn som - og +. Samt når man bruger reserverede ord som kolonnenavne, count bruger til at tælle med så for at undgå fejl sætte jeg [] omkring. Men den brokker sig åbenbart ikke over count i ORDER BY delen..
Avatar billede thomas_b Nybegynder
18. marts 2006 - 01:28 #23
Igen.. 1000 tak for hjælpen...

Det var en stor hjælp... - Så har jeg jo også lært noget idag... :)
Avatar billede thomas_b Nybegynder
18. marts 2006 - 19:24 #24
kunne du hjælpe mig med et lig. problem...?
Avatar billede thomas_b Nybegynder
22. marts 2006 - 21:22 #25
Kunne virkelig godt bruge noget hjælp på: http://www.eksperten.dk/spm/696477 hvis du havde tid...?
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