Avatar billede lumbye Nybegynder
26. januar 2001 - 15:03 Der er 8 kommentarer og
1 løsning

Checkbox, ASP og scripting! HJÆLP!!!

Jeg har et ASP-script, der baserer sig på et ikke kendt (=varierende) antal poster, hvor hele recordsets hentes fra en tabel i en DB.

Indholdet af disse poster skal kunne listes på en side, hvor bruger vælger hvilke der skal indgå i en ny post i samme tabel i samme DB.

Scriptet ser i grove træk ud som følger:

Data hentes fra de poster i DB-tabel der opfylder udvælgelses-kriteriet, hvor bl.a. datoen er en vigtig faktor:

SQL = \"SELECT * from tabel1 WHERE (Dato >= Datediff(\'d\', 0, \'\" & date & \"\')) AND Kriterie1 = (\'1\') AND Kriterie2 = (\'2\')) ORDER BY Dato ASC\"
rs.open SQL, Con, 3, 3
Con.execute(SQL)

Og så lister den ellers derudaf...

Response.write \"<td align=left><font size=1 face=Verdana>\" & rs(\"Dato\") & \"</font></td>\"
Response.write \"<td align=left><font size=1 face=Verdana>\" & rs(\"Fornavn\") & \" \" & rs(\"Efternavn\") & \"</font></td>\"
OSV.
OSV.
Afslutningsvis skal der indsættes en checkbox til hvert recordset (kan linkes til postens unikke ID).

Problemet er nu - hvordan navngives denne checkbox, og hvordan får man kombineret alle de poster der er markeret i checkbox så disse kan sættes ind i en ny post i samme tabel (i andre felter)??? F.eks. så man ud fra tabellen

ID Dato      Navn        Points  Checkbox
1  14-02-01  Poul Hansen    20        X
2  16-02-01  John Jensen    15
3  19-02-01  Stig Madsen    10        X

kan generere et recordset, hvor der i ét af felterne i DB-tabellen kommer til at stå:

ID Dato    Navn                    Points
4  14-02-01 Poul Hansen-Stig Madsen  30

fordi disse er markeret via checkboxen?

I den forbindelse er følgespørgsmålene: Hvordan får man hentet datofeltet over således at datoen for det nye recordset bliver bestemt af den førstkommende dato blandt de poster, der er med i recordsettet (I dette tilfælde 14-02-01 ud fra Poul Hansen)? Og hvordan kan man lægge point-summen for de to markeringer sammen i den nye post (her 20+10=30)?

Der er gode points at hente - jeg har desværre ikke noget kode-eksempel at føje til, da jeg ikke har den ringeste ide om hvordan det laves.

Mangler oplysninger, så sig til!!!
Avatar billede eagleeye Praktikant
26. januar 2001 - 18:09 #1
Hej,

Hver checkbox du indsætter skal havde et ID. Alle checkboxe skal havde samme ID.

Checkbox_count=0
Do while not DATABATE.EOF
  <input type=\"checkbox\" ID=\"DitNavn\">
  Checkbox_count=Checkbox_count+1

--------

Jeg har lavt et script som kan kaldes fra en knap, scriptet skriv i en messagebox hvilke checkboxe som er valgt. Det gøres med ID_navn(x)  eks.vis DitNavn(i)

<SCRIPT LANGUAGE=\"VBScript\">
  Function set_checkbox(CB_COUNT)
    for i=0 to (CB_COUNT-1)
    if (DitNavn (i).checked = true) then
      MsgBox \"Checkbox nr \"&i,vbOKOnly
    end if
    next
  End Function
</script>

Her er koden til knappen.
<p><input type=\"submit\" value=\"Test\" onclick=set_checkbox(<%=Checkbox_count %>)></p>

<%=Checkbox_count&> kunne vel engenligt også være recordset.RecordCount

Håber det kan hjælpe dig lidt på vej. Jeg vil lige kikke vidre på det med databasen…..
Avatar billede eagleeye Praktikant
26. januar 2001 - 18:38 #2
Problemmet med scripet er at man ikke kan se variable som er defineret uden for scripet.

Det betyder hvis man benytter et script skal man connecte til databasen igen.

ID Dato    Navn                    Points
4  14-02-01 Poul Hansen-Stig Madsen  30
Skal resultat ligges i den originale database?
dor der har du jo et (\"Fornavn\") og (\"Efternavn\") felt i tabellen. Hvordan skal navne så ligges sammen?
Avatar billede lumbye Nybegynder
26. januar 2001 - 20:08 #3
Mht. resultatet så skal dette i samme database - den ryger blot ind i et andet felt med et andet navn (\"Par\").

Mht. connection igen - hvornår skal der disconnectes fra databasen? Når de ønskede data er \"samlet\" ind\"? Dvs. inden de sættes ind i en ny post?
Avatar billede eagleeye Praktikant
26. januar 2001 - 20:29 #4
Vil det kun være to checkboks som bliver brugt?

I et SCRIPT kan man ikke få adgang til databasen jeg har lige prøvet.
Avatar billede eagleeye Praktikant
26. januar 2001 - 21:14 #5
OK jeg har fundet en anden løsning...Må den åbne et ny vinde når der skal ligges ind i databasen. Skal selve adderingen blive i samme vindue.?
Avatar billede eagleeye Praktikant
26. januar 2001 - 23:55 #6
Jeg er kommet frem til denne løsning: FØRSTE DEL

---> DIT KODE
<%
SQL = \"SELECT * from tabel1 WHERE (Dato >= Datediff(\'d\', 0, \'\" & date & \"\')) AND Kriterie1 = (\'1\') AND Kriterie2 = (\'2\')) ORDER BY Dato ASC\"
rs.open SQL, Con, 3, 3
Con.execute(SQL)
<--- DIT KODE

%>
<form method=\"post\" action=\"result.asp\" id=”idform” name=”fornnavn”>           
<%       
Do While Not rs.EOF         

  Response.write \"<td align=left><font size=1 face=Verdana>\" & rs(\"Dato\") & \"</font></td>\"
  Response.write \"<td align=left><font size=1 face=Verdana>\" & rs(\"Fornavn\") & \" \" & rs(\"Efternavn\") & \"</font></td>\"
  ovs,ovs,ovs
  %>
  <input type=\"checkbox\" name=KAK value=<%=rs(\"ID\")%>>
  <%       
  rs.MoveNext
Loop
Response.Write \"</table>\"
%>   
<p><input type=\"submit\" value=\"Indsæt\" name=\"Action\"></p>
</form>
<%
mere kode bla bla
%>


Jeg har lagt en form omkring tabellen. Der bliver indsat en checkbox ved  hver linie og den hedder KAK, du kan kalde den hvad du vil. Ligeledes får den værdi som svare til autonummeret i databasen, ID.
Formens navn og id har ikke noget at sige. Formen action er sat til result.asp som er filen som bliver åbnet når man trykke på knappen som er indsat under tabellen.
Avatar billede eagleeye Praktikant
26. januar 2001 - 23:55 #7
ANDEN OG SIDSTE DEL:
Filen result.asp: Du kan jo bare omdøbe den.

<% Response.Buffer = True %>
<html>
<head>
<title>Sammen lægning af poster</title>
</head>
<body>

<%
\'nItem Antal checkboxe som er valgt med [x].
nItems = Request.Form(\"KAK\").Count
’ Der skal være valgt mindst 2 checkboxe
if (nItems > 1) then
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(database navn)
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

firstFound =  false
For i = 1 To nItems
rs.open \"SELECT * FROM tabel1 WHERE ID=\"&Request.Form(\"KAK\")(i), myConn,3,3
if (firstFound = false) then
    firstFound = true
    newName = rs(\"Fornavn\") & \" \" & rs(\"Efternavn \")
    newDate = rs(\"DatoFelt\")
    newPoints = rs(\"Points\")
  else
    newName = newName & \" - \" & rs(\"Fornavn\") & \" \" & rs(\"Efternavn\")
    newPoints = newPoints + rs(\"Points\")
  end if
  rs.close
Next

  rs = myConn.Execute (\"INSERT INTO tabel1 (Par, Dato, Point) VALUES (\'\"&newName & \"\', \'\"&newDate & \"\', \'\"&newPoint &\"\')\")

  \'Rydder op
  myConn.Close
  Set myConn = Nothing

  Response.Write \"Tabllen er opdateret med nye data.\"
else
  Response.Write \"Der skal minimum vælges to personer.\"
end if
%>

</body>
</html>
Avatar billede eagleeye Praktikant
30. januar 2001 - 21:46 #8
Er det sådan noget du vil havde?
Avatar billede lumbye Nybegynder
31. januar 2001 - 13:19 #9
Det er fabelagtigt! Så enkelt det var, og så svært det så ud...

Du er en haj - og har så ærligt fortjent dine points, eagleeye! Tak for hjælpen

Case is closed!
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