Avatar billede michaelfp Nybegynder
26. august 2004 - 17:42 Der er 25 kommentarer og
1 løsning

Efter opdatering af f.eks record nr. 10, vises en anden record !

Hej eksperter,

Min side anvender paging og har følgende kode i starten:

<body>

<form action="pagetestny.asp?cmd=update" method="post">

  Opendatabase
  Set rs = Server.CreateObject("ADODB.Recordset")

  rs.PageSize = 1 '5
  rs.CacheSize = 5
  rs.CursorLocation = adUseClient

  rs.Open "skandidater", conn, 3, 3

  If Len(Request("pagenum")) = 0  Then
    rs.AbsolutePage = 1
  Else
    If CInt(Request("pagenum")) <= rs.PageCount Then
      rs.AbsolutePage = Request("pagenum")
    Else
      rs.AbsolutePage = 1
    End If
  End If


  abspage = rs.AbsolutePage
  pagecnt = rs.PageCount

længere nede vises felter og de kan rettes m.v.

Herefter inden tag </form>



<%
' Now showing first, next, back, last buttons.

  Response.Write "<div align=""center"">" '& vbcrlf
%>
<input type="submit" name="save" value=" Gem ">&nbsp;
<input type="submit" name="cancel" value=" Fortryd ">&nbsp;
<input type="submit" Name="new" value=" Ny ">&nbsp;&nbsp;&nbsp;

<%
  Response.Write "<a href="""
  Response.Write Request.ServerVariables("SCRIPT_NAME")
  Response.Write "?pagenum=1""><b>Første</b></a>"
  Response.Write "    |    "

  If abspage = 1 Then
      Response.Write "<span style=""color:silver;"">Forrige</span>"
  Else
    Response.Write "<a href=""" & Request.ServerVariables("SCRIPT_NAME")
    Response.Write "?pagenum=" & abspage - 1 & """><b>Forrige</b></a>"
  End If

  Response.Write "    |    "
    If abspage < pagecnt Then
        Response.Write "<a href=""" & _
            Request.ServerVariables("SCRIPT_NAME")
        Response.Write "?pagenum=" & abspage + 1 & """>Næste</a>"
    Else
        Response.Write "<span style=""color:silver;""" & _
            "><b>Næste</b></span>"
  End If

  Response.Write "    |    "
  Response.Write "<a href=""" & Request.ServerVariables("SCRIPT_NAME")
  Response.Write "?pagenum=" & pagecnt & """><b>Sidste</b></a>"
  Response.Write "    |    "
  Response.Write "Nr. " & rs.AbsolutePage & " af " & Rs.recordcount & " poster"
  Response.Write "</div>" & vbcrlf

 
  Else
    Response.Write "** der findes ingen poster! **"
  End If

  rs.Close
  Set rs = Nothing
  closedatabase


%>

Problemet er:
Når man trykker GEM, så gemmes data fint, men der skiftes til den første record på siden!  Hvad går galt eller hvordan undgås det?

På forhånd tak.
Avatar billede eagleeye Praktikant
26. august 2004 - 18:00 #1
Så skal du gemme den  abspage  du er kommet til for recorden.
Så du efter update kan komme tilbage til den rigtige post.

Evt. gemme pagenum i et hidden felt.
<input type="hidden" name="pagenr" value="<%=abspage%>">

hvis du efter update redirecter tilbage til siden kan du gøre:
response.redirect("xxx.asp?pagenum="&request.form("pagenr"))
Avatar billede michaelfp Nybegynder
26. august 2004 - 18:09 #2
Tak for hjælpen - rigtig hurtig feedback og det er præcis løsningen
Avatar billede michaelfp Nybegynder
26. august 2004 - 18:09 #3
..og husk lige svar...
Avatar billede eagleeye Praktikant
26. august 2004 - 18:11 #4
ok, her et svar :)
Avatar billede michaelfp Nybegynder
26. august 2004 - 20:13 #5
eagleeye gider du lige igen?

som nævnt virker det perfekt ved klik på gem. MEN når der oprettes en ny redcord, ændres i felterne og derpå klikkes gem, viser siden igen den første record!
Har det noget at gøre med følgende startkode (se ovenfor)
  If Len(Request("pagenum")) = 0  Then
    rs.AbsolutePage = 1
  Else
    If CInt(Request("pagenum")) <= rs.PageCount Then
      rs.AbsolutePage = Request("pagenum")
    Else
      rs.AbsolutePage = 1
    End If
  End If

På forhånd tak. :-)
Avatar billede eagleeye Praktikant
26. august 2004 - 20:20 #6
Ja det nok noget i samme stil at du ikke før før pagenum med som querystring.
Hvis quesrystingen pagenum ikke er det vælges første post i dette:

If Len(Request("pagenum")) = 0  Then
    rs.AbsolutePage = 1
Avatar billede michaelfp Nybegynder
26. august 2004 - 20:27 #7
Kan du hjælpe lidt mere?
Response.Write "Nr. " & rs.AbsolutePage & " af " & Rs.recordcount & " poster"
viser det korrekte antal records når en ny record er oprettet. Det går først galt når man gemmer ændringer i den nye record og derpå trykker GEM.
Avatar billede eagleeye Praktikant
26. august 2004 - 20:31 #8
Hvordan kommer new tilbage til siden ?
<input type="submit" Name="new" value=" Ny ">&nbsp;&nbsp;&nbsp;

Er det også med redirect så prøv at lave det som med gem:
response.redirect("xxx.asp?pagenum="&request.form("pagenr"))
Avatar billede michaelfp Nybegynder
26. august 2004 - 20:39 #9
Hvis jeg gør som du skriver (det havde jeg for øvrigt allerede prøvet) så
opretter den godt nok en ny record (antal records tælles op på siden) og
så viser siden den første record! d.v.s man får ingen chance for at indtaste
felter i den nye record.
Avatar billede eagleeye Praktikant
26. august 2004 - 20:43 #10
ok,går det ikke.
Den gem ved update er det den samme som med en ny?
Avatar billede michaelfp Nybegynder
26. august 2004 - 20:50 #11
Ja - jeg har kodet det således:

  Sub InitialiserVariabler 'denne sub initialiserer variable udfra recorden
   
    Kid = Rs("KandidatId")
    navn = rs("navn")
    adresse = rs("adresse")
    adresse2 = Rs("adresse2")
    by = Rs("Pby")
    Telefon = rs("Telefon")
    Mobil = Rs("Mobil")
    email = Rs("email")
    cpr = Rs("cpr")
    afdeling = Rs("afdeling")
    Konsulent = rs("Konsulent")
    Inthold = Rs("internid")
    Eksthold = rs("eksternid")
    Status = Rs("status")

  End Sub


  If (Request.form("Save") = " Gem ") or (Request.form("New") =" Ny ") Then
    If Request.Form("save") = " Gem " Then

      strSQL = "Update Skandidater set "
      'strSQL = strSQL & "Navn= '" & Request.Form("Navn") & "' WHERE Kandidatid = " & Request.Form("Kid")
      strSQL = strSQL & "Navn= '" & Request.Form("Navn") & "', "
      StrSQL = StrSQL & "Adresse= '" & Request.Form("Adresse") & "', "
      StrSQL = StrSQL & "Adresse2= '" & Request.Form("adresse2") & "', "
      StrSQL = StrSQL & "Pby= '" & Request.Form("By") & "', "
      StrSQL = StrSQL & "Telefon= '" & Request.Form("Telefon") & "', "
      StrSQL = StrSQL & "Mobil= '" & REquest.Form("Mobil") & "', "
      StrSQL = StrSQL & "Email= '" & Request.Form("Email") & "', "
      StrSQL = StrSQL & "Cpr= '" & Request.Form("cpr") & "', "
      StrSQL = StrSQL & "Afdeling= '" & Request.Form("afddropdown") & "', "
      StrSQL = StrSQL & "Konsulent= '" & Request.Form("Kondropdown") & "', "
      StrSQL = StrSQL & "Internid= '" & Request.Form("Intholddropdown") & "', "
      StrSQL = StrSQL & "Eksternid= '" & Request.Form("ekstholddropdown") & "', "
      StrSQL = StrSQL & "Status= '" & Request.Form("statusdropdown") & "' WHERE Kandidatid = " & Request.Form("Kid")

      Conn.Execute(strSQL)


      response.redirect("pagetestny.asp?pagenum="&request.form("pagenr"))
      Initialiservariabler

    Else
      ' opret ny record
      Rs.AddNew
      Rs("navn") = ""
      Rs("Adresse") = ""
      Rs("adresse2") = ""
      Rs("Pby") = ""
      Rs("Telefon") = ""
      Rs("Mobil") = ""
      Rs("email") = ""
      Rs("cpr") = ""
      Rs("afdeling") = GetCurrafdeling
      rs("Konsulent") = GetCurrKOnsulent
      Rs("internid") = 1
      rs("eksternid") = 1
      Rs("status") = 1
      rs("Baggrundid") = 9
      rs("kontaktid") = 1
      Rs.Update

      ' response.redirect("pagetestny.asp?pagenum="&request.form("pagenr"))
      Initialiservariabler
    End if
  Else
    ' vis aktuel records poster
    InitialiserVariabler
  end if

  If Request.Form("delete")= " Slet " Then
    ' slet record
    StrSQL = "Delete from skandidater where kandidatId = " & Request.Form("Kid")
    Conn.Execute(strSQL)
    InitialiserVariabler

  End if

Kan det hjælpe dig ?
Avatar billede eagleeye Praktikant
26. august 2004 - 21:00 #12
Når man trykker ny skal den vise formen sådan man kan udfylde den med data?
Avatar billede michaelfp Nybegynder
26. august 2004 - 21:04 #13
Ja jeg har lavet det således, at NY sætter alle felter tomme og derpå danner en ny record med tomme felter.
Hvis man så taster navn, adresse m.v. i de tomme felter (nye record) skal man trykke GEM for at de gemmes i recorden.
Avatar billede eagleeye Praktikant
26. august 2004 - 21:07 #14
Jeg tror måske det fordi pagenr er send med POST:

Så prøv at rette det hidden felt:

<input type="hidden" name="pagenr" value="<%=abspage%>">


Til:
<% pagenr=request.form("pagenr")
  if pagenr = "" then pagenr=abspage
%>
<input type="hidden" name="pagenr" value="<%=pagenr%>">
Avatar billede michaelfp Nybegynder
26. august 2004 - 21:18 #15
det ændrer desværre ingenting. Hvis jeg aktiverer  ' response.redirect("pagetestny.asp?pagenum="&request.form("pagenr")) efter Rs.Addnew sætningerne, gør den det samme som før.  Dit forslag gør altså ingen forskel!
Avatar billede eagleeye Praktikant
26. august 2004 - 21:19 #16
hvad står der i linket når du har gemt?
Avatar billede michaelfp Nybegynder
26. august 2004 - 21:25 #17
hvad mener du med link? (pagenum=1) ??
Avatar billede eagleeye Praktikant
26. august 2004 - 21:29 #18
Ja, så den har altså fundet ud af den skal vise pagenum 1.
Prøv efter du har trykket Ny at "View Source" i browseren og se hvad value i hidden feltet er.
Er hidden feltet også på den form hvor man kan trykke Ny?
Avatar billede michaelfp Nybegynder
26. august 2004 - 21:44 #19
Der står <input type="hidden" name="pagenr" value="1">

Ja det hele (ny, gem og slet) foregår i samme form
Avatar billede eagleeye Praktikant
26. august 2004 - 21:49 #20
ok, så forstår jeg ikke helt hvorfor det i 26/08-2004 21:07:54 ikke virker. For hvis der er noget i pagenr fra formen skulle den genbruge det.
Avatar billede eagleeye Praktikant
26. august 2004 - 21:50 #21
Nu spørger jeg lige igen :)
Når man har trykke Ny og fyldt felterne ud og trykker Gem hvilken record skal den så vise?
Avatar billede michaelfp Nybegynder
26. august 2004 - 22:02 #22
kan det have noget at gøre med at der tilføjes en post?

Mon rs.pagecount når at blive optalt, inden koden eksekveres?
se følgende kommentarer til højre for koden:

  If Len(Request("pagenum")) = 0  Then              #den ved vi er 1 !
    rs.AbsolutePage = 1
  Else
    If CInt(Request("pagenum")) <= rs.PageCount Then #pagenum er 1 d.v.s
      rs.AbsolutePage = Request("pagenum")          #rs.absolutepage bliver =1 !!
    Else
      rs.AbsolutePage = 1
    End If
  End If

  abspage = rs.AbsolutePage              # nu er abspage også 1 ikke?
  pagecnt = rs.PageCount

giver det mening?
Avatar billede michaelfp Nybegynder
26. august 2004 - 22:04 #23
svar på 26-08-2004 21:50

Når man trykker NY oprettes en ny record med tomme felter og den vises.
Når man trykker GEM skal den blive på den nye record/den man har gemt. Det
gør den også, hvis det er en gammel record man retter i og trykker GEM på!
Avatar billede eagleeye Praktikant
26. august 2004 - 22:08 #24
Som koden er nu kommer man tilbage til den post man var på da man trykkede Ny...

Ok :)

Så skal dette rettes, så den finde den side en nye post er på.:

      rs("kontaktid") = 1
      Rs.Update

      ' response.redirect("pagetestny.asp?pagenum="&request.form("pagenr"))
      Initialiservariabler
    End if


Prøv sådan her:

      rs("kontaktid") = 1
      Rs.Update

      response.redirect("pagetestny.asp?pagenum="&rs.AbsolutePage)
      'Initialiservariabler
    End if


Det skal være sådan når den ridireter til siden igen skal den vise den nye post med tomme felter.
Avatar billede michaelfp Nybegynder
26. august 2004 - 22:14 #25
Sådan!  (jeg skylder nogle ekstra point næste gang du hjælper mig)

Tak for hjælpen :-)
Avatar billede eagleeye Praktikant
26. august 2004 - 22:15 #26
ok :)
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