Avatar billede bruhnsweb Nybegynder
10. juli 2005 - 22:50 Der er 34 kommentarer og
1 løsning

Vis poster fra-til ud fra felt i database

Hej Eksperter

Jeg skal vise nogle nyheder på mit website.

Det er lavet så man selv kan bestemme hvilke poster man vil se.

Eks. vis poster:
Fra: 1
Til: 10
... Eller vis alle...


Min kode:
-------------------------------------------------------------------
If rs_news_config("all_news") = True Then
do while not rs_news.EOF
'lister nyhederne
response.write rs_news("Title") & "<br>"
'recordset lukkes
rs_news.MoveNext
Loop
Else
i = 1
do while not i < Cint(rs_news_config("News_From")) AND not i > Cint(rs_news_config("News_To")) OR not rs_news.EOF
'lister nyhederne
response.write rs_news("Title") & "<br>"
'recordset lukkes
i = i + 1
rs_news.MoveNext
Loop
End If
rs_news.close
-------------------------------------------------------------------

Jeg er ikke sikker på om det er bygget rigtig op, da jeg får en fejl efter at den har listet ee fire poster som der er i databasen..

Scriptet skal altså vise eks. 1-10 med mindre der er mindre end det, så skal den vise det antal der er..

Håber I forstår :o)

// BRuhn
Avatar billede keysersoze Ekspert
10. juli 2005 - 23:46 #1
Avatar billede busschou Praktikant
11. juli 2005 - 07:19 #2
1)
Det er vist mere normalt at skrive følgende, da du ellers i hver løkke laver to ekstra overflødige beregninger
do while i > Cint(rs_news_config("News_From")) AND i < Cint(rs_news_config("News_To")) OR not rs_news.EOF

2)
Du siger at du har valgt intervallet 1-10 men at der kun er 4 poster, så er det klart at  det fejler, for den fanger din logiske sætning ikke
5 > 1 AND 5 < 10 OR not rs_news.EOF, Den giver true
Du skal med andre ord rette dit logiske udtryk til
do while i > Cint(rs_news_config("News_From")) AND i < Cint(rs_news_config("News_To")) AND not rs_news.EOF
Avatar billede busschou Praktikant
11. juli 2005 - 07:20 #3
Altså der skal gælde at i er større end fra _OG_ i er mindre end til _OG_ rs ikke er "løbet tør" :o)
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 08:48 #4
Nu har jeg skrevet at den skal vise posterne fra: 2 til: 4 - Der kommer intet ud :o(
Avatar billede busschou Praktikant
11. juli 2005 - 08:53 #5
og hvordan ser din kode ud nu?
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 08:56 #6
<%
'Åbner konfigurationstabellen [News_Config]
Set rs_news_config = Server.CreateObject("ADODB.RecordSet")
rs_news_config.open "Select * From [News_Config] where Paragraph_Id = " & Session("Paragraph_Id") , Conn
'Nyheder
Set rs_news = Server.CreateObject("ADODB.RecordSet")
rs_news.open "Select * From [news] where Active = " & rs_news_config("Show_Active") & " AND Site_Id = " & Site_Id & " ORDER BY Id " & rs_news_config("News_Order") , Conn
If rs_news_config("all_news") = True Then
do while not rs_news.EOF
'lister nyhederne
response.write rs_news("Title") & "<br>"
'recordset lukkes
rs_news.MoveNext
Loop
Else
i = 1
do while i > Cint(rs_news_config("News_From")) AND i < Cint(rs_news_config("News_To")) AND not rs_news.EOF
'lister nyhederne
response.write rs_news("Title") & "<br>"
'recordset lukkes
i = i + 1
rs_news.MoveNext
Loop
End If
rs_news.close
rs_news_config.Close
%>
Avatar billede busschou Praktikant
11. juli 2005 - 09:01 #7
kan du ikke skrive det ud så kan vi se om den tæller som forventet
--
altså oven over denne her linje
do while i > Cint(rs_news_config("News_From")) AND i < Cint(rs_news_config("News_To")) AND not rs_news.EOF
lave en linje med
response.write "do while i > "&Cint(rs_news_config("News_From"))&" AND i < "& Cint(rs_news_config("News_To"))&" AND not rs_news.EOF"
Avatar billede busschou Praktikant
11. juli 2005 - 09:01 #8
om ikke andet så bare for at se om den kommer så langt som dertil :o)
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:04 #9
do while i > 1 AND i < 4 AND not rs_news.EOF
Avatar billede busschou Praktikant
11. juli 2005 - 09:07 #10
hmm så burde den også skrive rs_news("Title") ud
med mindre den er tom
hvis du gør sådan her kommer der så bare tomt ud?
--
do while i > Cint(rs_news_config("News_From")) AND i < Cint(rs_news_config("News_To")) AND not rs_news.EOF
'lister nyhederne
response.write "TITEL:"&rs_news("Title") & "<br>"
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:08 #11
jep - tomt
Avatar billede keysersoze Ekspert
11. juli 2005 - 09:10 #12
jeg forstår ikke helt hvorfor du vil opbygge noget custom paging når der langt hen ad vejen findes functioner i asp/recordset'et der gør det langt lettere?
Avatar billede busschou Praktikant
11. juli 2005 - 09:11 #13
ok
Hvis den før skrev "do while i > 1 AND i < 4 AND not rs_news.EOF" ud men den ikke går ind i din do while så evaluerer det jo falsk af en og anden grund
Avatar billede busschou Praktikant
11. juli 2005 - 09:12 #14
og det gør den selvfølgelig fordi det skal være
"do while (i > 1 Or i < 4) AND not rs_news.EOF"
Doh
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:13 #15
Keysersoze: Det er da ikke paging det her? er det??

Busschou - nu virker det vist...

do while not i < Cint(rs_news_config("News_From")) AND not i > Cint(rs_news_config("News_To")) AND not rs_news.EOF
'lister nyhederne
response.write "TITEL:"& i & rs_news("Title") & "<br>"

Skriver så ud:
TITEL:1Nyhedstitel
TITEL:2Titel på nyhed
TITEL:3Titel2
TITEL:4TestTitel
Avatar billede busschou Praktikant
11. juli 2005 - 09:13 #16
Det er jo klart burde jeg have set :o/
Når i=1 så fejler i>1 og dermed fejler det hele, i skal være enten det ene eller det andet og så skal der være noget at vælge imellem
do while (i > Cint(rs_news_config("News_From")) Or i < Cint(rs_news_config("News_To")))AND not rs_news.EOF
Avatar billede busschou Praktikant
11. juli 2005 - 09:16 #17
hmm tja måske min fejl igen der, er ikke vant til at se brugen af not i den sammenhæng
not i < 1 må være det samme som i >= 1
not i > 4 må være det samme som i <= 4
og så virker det nok også med AND
do while i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To")) AND not rs_news.EOF
Avatar billede busschou Praktikant
11. juli 2005 - 09:18 #18
Så jeg beklager hvis forvirringen er total, også fra min side af
Jeg vil stå ved at
do while not i < Cint(rs_news_config("News_From")) AND not i > Cint(rs_news_config("News_To")) AND not rs_news.EOF
er det samme som
do while i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To")) AND not rs_news.EOF
---
Hvilken du benytter er op til dig, men rent principielt vil jeg foreslå den nederste
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:18 #19
Hmm... næh nu ik alligevel... Nu har jeg skrevet at den skal vise fra 3 til 4 - så kommer der intet ud :o(
Avatar billede busschou Praktikant
11. juli 2005 - 09:20 #20
med hvilken version...den jeg gav 09:13:56 er noget værre vås nemlig.. var lidt for hurtig der
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:23 #21
i = 1
do while i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To")) AND not rs_news.EOF   
'lister nyhederne
response.write "TITEL:"& i & rs_news("Title") & "<br>"
Avatar billede keysersoze Ekspert
11. juli 2005 - 09:25 #22
det er ikke paging på den måde at brugeren bladrer frem og tilbage i dine poster - men (vil jeg mene) på den måde at der på forhånd vælges hvorfra og hvor mange poster vedkommende vil se.

men smag og behag :)
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:27 #23
Kan du ikke komme med et eksempel? Det kan jo være at det virker bedre - for det her giver os en del problemer som du nok kan se :o)
Avatar billede busschou Praktikant
11. juli 2005 - 09:35 #24
bruhnsweb vi tænker forkert
Betingelsen skal ikke være i while løkken
Sådan her vil virke
---
do while not rs_news.EOF 
  if i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To")) then
    'lister nyhederne
    response.write "TITEL:"& i & rs_news("Title") & "<br>"
  end if
  i = i + 1
  rs_news.MoveNext
Loop
Avatar billede busschou Praktikant
11. juli 2005 - 09:38 #25
om keysersoze´s forslag med brug af de specielle funktionaliteter som asp/access har, ved jeg ikke noget om, for det har jeg aldrig selv brugt
Men det er klart at du på denne måde er nød til at løbe alle records igennem hver gang
Du kan evt gøre den en smule hurtigere ved at tilføje endnu en betingelse
---
do while not rs_news.EOF
  if i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To")) then
    'lister nyhederne
    response.write "TITEL:"& i & rs_news("Title") & "<br>"
  end if
  i = i + 1
  if i > Cint(rs_news_config("News_To")) then
    exit do
  end if
  rs_news.MoveNext
Loop
---
Så den hopper ud når du ved at der ikke skal skrives mere ud
Desværre kan man i access ikke benytte sql funktionen Limit som ellers kune have hevet dem specifikt ud
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:39 #26
Jeg bruger IKKE Access, men MSSQL
Avatar billede busschou Praktikant
11. juli 2005 - 09:46 #27
okey jeg kender kun til access og mysql. Måske du i mssql kan benytte Limit ?
For det vil altså uanset hvad lette det hele
Så kan du selecte dem direkte i din sql statement ved blot at tilføje Limit 'fra' 'antal'
Altså hvis du vil have fra 3 til 4 så Limit 2 2 , (da der tælles fra 0) eller hvis du ønsker fra 1 til 10 så Limit 0 10 osv

Men jeg aner ikke om man kan det i mssql
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:49 #28
ok - nu virker dette vist også, så skal vi ikke holde os til det :o)

Mangler lige at finde ud af hvordan jeg indsætter all_news før jeg slipper dig ;o)
Avatar billede busschou Praktikant
11. juli 2005 - 09:53 #29
ok virker den ikke?
igen vil jeg mene at
If rs_news_config("all_news") = True Then
er dobbelt konfekt og at
If rs_news_config("all_news") Then
burde gør det

Men hvordan ser din kode ud nu så, og hvad sker der med all_news siger du ? :o)
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 09:57 #30
Hvordan ville du bygge; et tjek om all_news var tjekket af (for derefter at vise ALLE nyheder)??

i = 1
do while not rs_news.EOF
  if i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To")) then
    'lister nyhederne
    response.write "TITEL:"& i & rs_news("Title") & "<br>"
  end if
  i = i + 1
  if i > Cint(rs_news_config("News_To")) then
    exit do
  end if
  rs_news.MoveNext
Loop
Avatar billede busschou Praktikant
11. juli 2005 - 10:00 #31
Tja enten udenfor eller indeni din do while
udenfor gør at man ikke laver uoverflødig mange tjek
indenfor gør at man ikke skal skrive så meget :o)
---
nem løsning
---
i = 1
do while not rs_news.EOF
  if (i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To"))) OR ("all_news = tjekket") then
    'lister nyhederne
    response.write "TITEL:"& i & rs_news("Title") & "<br>"
  end if
  i = i + 1
  if i > Cint(rs_news_config("News_To")) then
    exit do
  end if
  rs_news.MoveNext
Loop
Avatar billede busschou Praktikant
11. juli 2005 - 10:01 #32
hmm og dog den risikerer at blive fanget i den nederste if
Må hellere gøre som du oprindelig også gjorde
to sek
Avatar billede busschou Praktikant
11. juli 2005 - 10:02 #33
If rs_news_config("all_news") Then
  do while not rs_news.EOF
    response.write rs_news("Title") & "<br>"
    rs_news.MoveNext
  Loop
Else
  i = 1
  do while not rs_news.EOF
    if i >= Cint(rs_news_config("News_From")) AND i <= Cint(rs_news_config("News_To")) then
      response.write "TITEL:"& i & rs_news("Title") & "<br>"
    end if
    i = i + 1
    if i > Cint(rs_news_config("News_To")) then
      exit do
    end if
    rs_news.MoveNext
  Loop
end if
Avatar billede bruhnsweb Nybegynder
11. juli 2005 - 10:08 #34
ok - tak for hjælpen
Avatar billede busschou Praktikant
11. juli 2005 - 10:09 #35
det var så lidt :o)... det tog jo sin tid desværre må vist hellere snart vågne ;o)
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