Avatar billede bentbent Nybegynder
09. september 2003 - 22:36 Der er 18 kommentarer og
2 løsninger

Gemme i flere records ad gangen!

Hejsa eksperter!

Jeg har en side hvor jeg looper nogle data ud i en tabel:

I disse data er der et felt der hedder "Tstatus" denne er som standard sat til en værdi på "nej" det jeg genre vil have den til er at alle dataerne bliver loopet således man kan se dem alle i en tabel, det skal så være muligt at klikke på én af felterne via en radion botton hvorefter det ene felt får værdien "ja" - man skal derefter kunne gemme!

Næste gang man så går ind på siden vil det felt med værdien "ja" så være markeret - hvilket så selvfølgelig skulle kunne ændres valgfrit!

Jeg har fået den til at loope forneden, men kan ikke få den til at gemme

-----------------------------------------------------
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../Connections/gratis.asp" -->
<%
set slettesM = Server.CreateObject("ADODB.Recordset")
slettesM.ActiveConnection = MM_gratis_STRING
slettesM.Source = "SELECT * FROM slettes ORDER BY TID DESC"
slettesM.CursorType = 0
slettesM.CursorLocation = 2
slettesM.LockType = 3
slettesM.Open()
slettesM_numRows = 0
%>
<%
Dim Repeat1__numRows
Repeat1__numRows = -1
Dim Repeat1__index
Repeat1__index = 0
slettesM_numRows = slettesM_numRows + Repeat1__numRows
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1">
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><b>test</b></td>
      <td>&nbsp;</td>
    </tr>
    <%
While ((Repeat1__numRows <> 0) AND (NOT slettesM.EOF))
%>
    <tr>
      <td><%=(slettesM.Fields.Item("Tbeskrivelse").Value)%><b> - <%=(slettesM.Fields.Item("Tstatus").Value)%></b></td>
      <td>
        <div align="right"><b>
          <% if slettesM.Fields.Item("Tstatus") = "ja" then      %>
          <input type="radio" name="Tstatus" value="ja" checked>
          <% else %>
          <input type="radio" name="Tstatus">
          <% end if %>
          <br>
          </b></div>
      </td>
    </tr>
    <%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  slettesM.MoveNext()
Wend
%>
  </table>
  <p>
    <input type="submit" name="Submit" value="Submit">
  </p>
</form>
<p>&nbsp;</p>
</body>
</html>
<%
slettesM.Close()
%>
Avatar billede eagleeye Praktikant
09. september 2003 - 22:50 #1
Du udskriver kun en radio knap pr. record:

          <% if slettesM.Fields.Item("Tstatus") = "ja" then      %>
          <input type="radio" name="Tstatus" value="ja" checked>
          <% else %>
          <input type="radio" name="Tstatus">
          <% end if %>


Så hvis der mange records får en en stor radio gruppe, hvis du ikke giver radio kanppen et navn så den høre til en bestemt record ved man så ikke hvilken den høre til..
Avatar billede bentbent Nybegynder
09. september 2003 - 22:54 #2
Ok den er jeg med på!  men jeg er desværre helt blank hvordan jeg får den til at gemme flere records ad gangen!  har du nogle forslag!

Det skal jo være sådan, at hvis en record har status "ja" og man klikker på en anden record skal den både gemme nej i den første record og ja i den sidst valgte!!  det er her jeg er helt lost!!
Avatar billede eagleeye Praktikant
09. september 2003 - 23:16 #3
Skal det være sådan man kan vælge Ja -> Nej og Nej -> Ja ??

Hvad hedder din autonummer kolonne så man kan indentificere en record??

Umiddeltbart skal du lave det om så begge radio knapper udskrives så du kan vælge imellem dem, og lave values om til  "ja|ID-kol" og "nej|ID-kol"

          <input type="radio" name="Tstatus" value="ja|<%=slettesM("ID")%>"
          <% if slettesM.Fields.Item("Tstatus") = "ja" then response.write " checked" %>
          >
          <input type="radio" name="Tstatus" value="nej|<%=slettesM("ID")%>"
          <% if slettesM.Fields.Item("Tstatus") = "nej" then response.write " checked" %> 
          >
       

Når du så på siden som opdater så kan du gøre sådan her:

allRadio = Request.Form("Tstatus")
tstatusArr = Split(allRadio, ",")
for i = lbound(tstatusArr) to ubound(tstatusArr)
  str = tstatusArr(i)
  arr = Split(str, "|")
  id = arr(1)
  settil = arr(0)

  SQL = "UPDATE tabel SET Tstatus = '" & settil & "' WHERE ID = " & id
  Conn.Execute(SQL)
next
Avatar billede bentbent Nybegynder
09. september 2003 - 23:22 #4
autonummer kolonnen hedder "TID" og der skal kun kunne vælges ét felt ad gangen til at have værdien ja!!!
Avatar billede eagleeye Praktikant
09. september 2003 - 23:26 #5
arh der må kun være en som er sat til Ja..
Avatar billede eagleeye Praktikant
09. september 2003 - 23:27 #6
Så glem mit sidste forsøg
Avatar billede eagleeye Praktikant
09. september 2003 - 23:36 #7
Så skal du lave det som en blanding af de løninger, som du har lavet radio knapperne:

Dog skal der så ID med i value så du ved hvilken der skal sættes til ja


          <% if slettesM.Fields.Item("Tstatus") = "ja" then      %>
          <input type="radio" name="Tstatus" value="<%=slettesM("tid")%>" checked>
          <% else %>
          <input type="radio" name="Tstatus" value="<%=slettesM("tid")%>">
          <% end if %>


---------------

På siden som gemmer gør du sådan her for ført at fjener Ja'et og sætte Ja i den nye record, Conn skal være en conenction til din database:


<%
id = Request.Form("Tstatus")
if id <> "" then
  'Set ja -> nej
  SQL = "UPDATE tabel SET Tstatus = 'nej' WHERE Tstatus = 'ja'"
  Conn.Execute(SQL)
  'Set den nye kolonne til ja
  SQL = "UPDATE tabel SET Tstatus = 'ja' WHERE TID = " & id
  Conn.Execute(SQL)
end if
%>
Avatar billede bentbent Nybegynder
09. september 2003 - 23:54 #8
Jeg bruger desværre macromedia som skriver lidt underlige koder! men når jeg sætter dine koder ind som forneden giver den en fejlmeddelelse!

ADODB.Field error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/test.asp, line 166

i følgende kode:..................................

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../Connections/gratis.asp" -->
<%
' *** Edit Operations: declare variables

MM_editAction = CStr(Request("URL"))
If (Request.QueryString <> "") Then
  MM_editAction = MM_editAction & "?" & Request.QueryString
End If

' boolean to abort record edit
MM_abortEdit = false

' query string to execute
MM_editQuery = ""
%>
<%
' *** Update Record: set variables

If (CStr(Request("MM_update")) <> "" And CStr(Request("MM_recordId")) <> "") Then

  MM_editConnection = MM_gratis_STRING
  MM_editTable = "slettes"
  MM_editColumn = "TID"
  MM_recordId = "" + Request.Form("MM_recordId") + ""
  MM_editRedirectUrl = ""
  MM_fieldsStr  = "Tstatus|value"
  MM_columnsStr = "Tstatus|',none,''"

  ' create the MM_fields and MM_columns arrays
  MM_fields = Split(MM_fieldsStr, "|")
  MM_columns = Split(MM_columnsStr, "|")
 
  ' set the form values
  For i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_fields(i+1) = CStr(Request.Form(MM_fields(i)))
  Next

  ' append the query string to the redirect URL
  If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
    If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
      MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
    Else
      MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
    End If
  End If

End If
%>
<%
' *** Update Record: construct a sql update statement and execute it

If (CStr(Request("MM_update")) <> "" And CStr(Request("MM_recordId")) <> "") Then

  ' create the sql update statement
  MM_editQuery = "update " & MM_editTable & " set "
  For i = LBound(MM_fields) To UBound(MM_fields) Step 2
    FormVal = MM_fields(i+1)
    MM_typeArray = Split(MM_columns(i+1),",")
    Delim = MM_typeArray(0)
    If (Delim = "none") Then Delim = ""
    AltVal = MM_typeArray(1)
    If (AltVal = "none") Then AltVal = ""
    EmptyVal = MM_typeArray(2)
    If (EmptyVal = "none") Then EmptyVal = ""
    If (FormVal = "") Then
      FormVal = EmptyVal
    Else
      If (AltVal <> "") Then
        FormVal = AltVal
      ElseIf (Delim = "'") Then  ' escape quotes
        FormVal = "'" & Replace(FormVal,"'","''") & "'"
      Else
        FormVal = Delim + FormVal + Delim
      End If
    End If
    If (i <> LBound(MM_fields)) Then
      MM_editQuery = MM_editQuery & ","
    End If
    MM_editQuery = MM_editQuery & MM_columns(i) & " = " & FormVal
  Next
  MM_editQuery = MM_editQuery & " where " & MM_editColumn & " = " & MM_recordId

  If (Not MM_abortEdit) Then
    ' execute the update
    Set MM_editCmd = Server.CreateObject("ADODB.Command")
    MM_editCmd.ActiveConnection = MM_editConnection
    MM_editCmd.CommandText = MM_editQuery
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close

    If (MM_editRedirectUrl <> "") Then
      Response.Redirect(MM_editRedirectUrl)
    End If
  End If

End If
%>
<%
set slettesM = Server.CreateObject("ADODB.Recordset")
slettesM.ActiveConnection = MM_gratis_STRING
slettesM.Source = "SELECT * FROM slettes ORDER BY TID DESC"
slettesM.CursorType = 0
slettesM.CursorLocation = 2
slettesM.LockType = 3
slettesM.Open()
slettesM_numRows = 0
%>
<%
Dim Repeat1__numRows
Repeat1__numRows = -1
Dim Repeat1__index
Repeat1__index = 0
slettesM_numRows = slettesM_numRows + Repeat1__numRows
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form ACTION="<%=MM_editAction%>" METHOD="POST" name="form1">
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><b>test</b></td>
      <td>&nbsp;</td>
    </tr>
    <%
While ((Repeat1__numRows <> 0) AND (NOT slettesM.EOF))
%>
    <tr>
      <td><%=(slettesM.Fields.Item("Tbeskrivelse").Value)%><b> - <%=(slettesM.Fields.Item("Tstatus").Value)%></b></td>
      <td>
        <div align="right"><b>
          <% if slettesM.Fields.Item("Tstatus") = "ja" then      %>
          <input type="radio" name="Tstatus" value="<%=slettesM("tid")%>" checked>
          <% else %>
          <input type="radio" name="Tstatus" value="<%=slettesM("tid")%>">
          <% end if %>
          <br>
          </b></div>
      </td>
    </tr>
    <%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  slettesM.MoveNext()
Wend
%>
  </table>
<%
id = Request.Form("Tstatus")
if id <> "" then
  'Set ja -> nej
  SQL = "UPDATE tabel SET Tstatus = 'nej' WHERE Tstatus = 'ja'"
  Conn.Execute(SQL)
  'Set den nye kolonne til ja
  SQL = "UPDATE tabel SET Tstatus = 'ja' WHERE TID = " & id
  Conn.Execute(SQL)
end if
%>
  <p>
    <input type="submit" name="Submit" value="Submit">
  </p>
  <input type="hidden" name="MM_update" value="true">
  <input type="hidden" name="MM_recordId" value="<%= slettesM.Fields.Item("TID").Value %>">
</form>
<p>&nbsp;</p>
</body>
</html>
<%
slettesM.Close()
%>
Avatar billede bentbent Nybegynder
09. september 2003 - 23:55 #9
er der ikke en hurtigere og kortere måde at gemme på???
Avatar billede eagleeye Praktikant
09. september 2003 - 23:57 #10
Dette kode:

<%
id = Request.Form("Tstatus")
if id <> "" then
  'Set ja -> nej
  SQL = "UPDATE tabel SET Tstatus = 'nej' WHERE Tstatus = 'ja'"
  Conn.Execute(SQL)
  'Set den nye kolonne til ja
  SQL = "UPDATE tabel SET Tstatus = 'ja' WHERE TID = " & id
  Conn.Execute(SQL)
end if
%>


Skal ind i den fil som du sender formen til.
Avatar billede eagleeye Praktikant
10. september 2003 - 00:01 #11
Formen sendes til det som står i action i form-tagen..
<form ACTION="<%=MM_editAction%>"

Så den sender formen til det som er i variablen MM_editAction
Jeg kender ikke til macromedia editoren.
Avatar billede bentbent Nybegynder
10. september 2003 - 00:27 #12
problemet er at når man sætter macromedia til at update melder den fejl da den ikke understøtter at gemme flere records ad gangen! jeg ved derfor ikke hvorleds jeg sætter den til at gemme på næste side - da dette kun kan gøres på den side loopet udføres!

nedenstående melder ikke fejl, men den gemmer heller ikke

<%
id = Request.Form("Tstatus")
if id <> "" then
  'Set ja -> nej
  SQL = "UPDATE tabel SET Tstatus = 'nej' WHERE Tstatus = 'ja'"
  Conn.Execute(SQL)
  'Set den nye kolonne til ja
  SQL = "UPDATE tabel SET Tstatus = 'ja' WHERE TID = " & id
  Conn.Execute(SQL)
end if
%>
Avatar billede bentbent Nybegynder
30. oktober 2003 - 16:23 #13
Hejsa eagleeye! jeg fik det desværre ikke til at virke men hvis du vil have halvdelen af pointsene da du har brugt tid på spørgsmålet må du lige lægge et svar ind!
Avatar billede eagleeye Praktikant
30. oktober 2003 - 17:22 #14
OK ;)
så kan du del dem som du syntes.
Avatar billede bentbent Nybegynder
30. oktober 2003 - 17:28 #15
det ville faktisk være fedt hvis du kunne svarer på nedenstående hvilket også har noget med gem at gøre! så får du selvfølgelig alle points!

Jeg har et asp hotel som kører med en mysql database - alt virker fint pånær når jeg prøver at gemme med nedenstående side!

---fejl------------------------------------
Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'Execute'

/tester/pagecount.asp, line 29

den nye kode er som følger....................

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/counter.asp" -->
<%
Dim Con
Dim Con_numRows

Set Con = Server.CreateObject("ADODB.Recordset")
Con.ActiveConnection = MM_counter_STRING
Con.Source = "SELECT * FROM sider"
Con.CursorType = 0
Con.CursorLocation = 2
Con.LockType = 1
Con.Open()

Con_numRows = 0
%>
<%
Function fixQuotes( theString )
    fixQuotes = Replace( theString, "'", "''" )
End Function

IP = Request.ServerVariables("REMOTE_ADDR")
URL = Request.ServerVariables("URL")

If Session("Reload") <> "" & IP & "," & URL & "" Then
    Session("Reload") = "" & IP & "," & URL & ""

    Sql = "SELECT * FROM sider WHERE URL = '" & URL & "'"
    Set RS = Con.Execute(Sql)    '    **********her sker fejlen*******

        If (RS.BOF Or RS.EOF) Then
            Count = 1
            SqlNy = "INSERT INTO sider (URL, Count) VALUES('" & fixQuotes(URL) & "','" & fixQuotes(Count) & "')"
            Con.Execute(SqlNy)
        End If
       
        If Not (RS.BOF Or RS.EOF) Then
        Site = RS("URL")
        End If
       
        If Site = URL Then
            Count = RS("Count") + 1
            SqlCount = "UPDATE sider SET Count='" & Count & "' WHERE URL = '" & URL & "'"
            Con.Execute(SqlCount)
        End If       
End If

%>
<%
Con.Close()
Set Con = Nothing
%>
Avatar billede eagleeye Praktikant
30. oktober 2003 - 17:38 #16
For du kan udføre Execute skal Con være defineret som en connection og den er lige nu defineret som et recordset:
Set Con = Server.CreateObject("ADODB.Recordset")

Så enten skal det laves om sådan Con bliver en connection elle laves som så man bruger con.Open istedet for con.Execute så skal man bare huske at lukke det bagefter. Men som koden er bør du lave Recordet om til Connection:

Prøv at rette:

Set Con = Server.CreateObject("ADODB.Recordset")
Con.ActiveConnection = MM_counter_STRING
Con.Source = "SELECT * FROM sider"
Con.CursorType = 0
Con.CursorLocation = 2
Con.LockType = 1
Con.Open()


Til dette:

Set Con = Server.CreateObject("ADODB.Connection")
Con.Open = MM_counter_STRING
Avatar billede bentbent Nybegynder
30. oktober 2003 - 17:54 #17
Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'Open'

/tester/pagecount.asp, line 8
Avatar billede eagleeye Praktikant
30. oktober 2003 - 19:39 #18
Hov den linje med Open skal være uden =
Con.Open = MM_counter_STRING

Sådan her:

Con.Open MM_counter_STRING
Avatar billede bentbent Nybegynder
31. oktober 2003 - 11:54 #19
tak skal du have!!!
Avatar billede bentbent Nybegynder
31. oktober 2003 - 11:55 #20
UPS! jeg skylder dig 75 points! hvordan lægger jeg dem over til dig nu??
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