Har jeg forsøgt at finder ud af hvordan man kan sammen ligne to tabellers data, er der en der vil forklare det lidt bedre, eller komme med et eksempel.
Der er sikkert mange der kan og vil hjælpe dig, men du har ikke forklaret hvad du er ude efter, på en fornuftig måde.
Hvis du vil have hjælp, så skal du gøre dig lidt mere umage med at beskrive hvad du har, og hvad du gerne vil have.
Du har indtil flere gange forsøgt at få et svar på det samme spørgsmål, men du har ikke prøvet at uddybe hvad du er ude efter, selv om det er tydeligt, at dem der forsøger at hjælpe, ikke har fanget hvad du mener.
Forsøg en gang til: Beskriv dine tabeller. Beskriv de data du har. Beskriv hvad du vil ende op med. Gerne med eksempler.
Mine tabeller: vinder, dinespil, bruger Data i vinder : spilID og vinder Data i dinespil (dem jeg skal bruge): spilID, vinder og gevindst Data i bruger: bruger points
Jeg vil så gerne ende op med at når jeg køre denne: http://www.1q.frip.dk/odds/vinder.asp Den ligger spillet ID i vinder (spilID) og selve vinderen i samme tabel i kolonnen vinder Så skal der bare kontrolleres hvorvidt SpilID og vinder fra vinder tabellen er lig med spilID og vinder fra dinespil tabellen, hvis de er det skal den tage værdien fra gevindst i tabellen dinespil og lægge dem til de nuværende points i tabellen bruger Så skal den nulstille gevindst i dinespil
Hvis spilID og vinder ikke passer sammen i de to tabeller skal gevindst bare nultilles.
Det kan klares med et par sql-sætninger. Tror faktisk jeg skrev den til dig første gang du spurgte. Du mangler et felt i dinespil: Hvilken bruger der har spillet. Jeg har kaldt det BrugerID
spilID=123 Vinder=456 sql="UPDATE Bruger SET Point=Point+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.brugerID=Bruger.bruger)" Conn.Execute(sql)
For at få nulstillet dinespil: sql="UPDATE dinespil SET gevindst=0 WHERE spilID=" & spilID Conn.Execute(sql)
kan måske lige sige at den nu ser sådan ud: <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source="& Server.MapPath("spildatabase.mdb") spilID= request.querystring("SpilID") Vinder= Request.Form("D1") sql2="UPDATE Brugere SET point=point+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=brugere.bruger)" response.write sql2 Conn.Execute(sql2) %>
vinder.vinder=Nummer 1 Hvis det er en tekst skal der ' omkring. sql2="UPDATE Brugere SET point=point+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder='" & Vinder & "' AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=brugere.bruger)"
Det betyder at et eller flere felter er stavet forkert.
Du bliver nødt til at lære lige at kigge igennem om det andre skriver til dig er rigtigt ;-)
sql2="UPDATE Bruger SET point2=point2+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=bruger.bruger)"
sql2="UPDATE Bruger SET points=points+(SELECT sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder=" & Vinder & " AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder AND dinespil.bruger=bruger.bruger)"
Er du der endnu.. på en anden side laver jeg denne. indsatspoints = "update brugere set points=points-'" & Request.Form("indskud") & "' where bruger='Mark'"
Det er mig der har lavet en tanketorsk. Man kan jo ikke lave updates med subqueries i access. Duh. Jeg arbejder næsten kun med rigtige databaser til daglig, så jeg er en anelse undskyldt. Men alligevel.
Nå. Man bliver nødt til at lave det i et par trin.
Opret en tabel til gevindster. Gevindster: bruger - tekst gevindst - tal
Og så skal du i stedet for den ene sql-statement bruge tre styk.
sql="insert into gevindster (bruger,gevindst) SELECT bruger, sum(gevindst) FROM vinder, dinespil WHERE vinder.spilID=" & spilID & " AND vinder.vinder='" & vinder & "' AND vinder.spilID=dinespil.spilID AND vinder.vinder=dinespil.vinder group by bruger;" Conn.Execute(sql)
sql="UPDATE Brugere inner join gevindster on brugere.bruger=gevindster.bruger SET points=points+gevindster.gevindst" Conn.Execute(sql)
Okay har lavet det lidt om af praktisk årsager men håber du kan hjælpe alligvel. det er nu dinespil.SpilID og spil.SpilID samt dinespil.vinder og spilvinder der skal være ens for at man kan vinde hvordan skal den så se ud, kunne forstille mig at det gjorde det lidt nemmere.
Og gevindst er stadig i dinespil.gevindst og de skal så ligges i brugere.points hvis de overstående stemmer overens og derefter nulstilles ellers bare nulstilles.
sql="UPDATE Brugere inner join dinespil on brugere.bruger=dinespil.bruger inner join spil on dinespil.spilID=spil.spilID AND dinespil.vinder=spil.vinder SET Brugere.points=Brugere.points+dinespil.gevindst where spil.spilid=" & spilID & " AND spil.vinder='" & Vinder & "'" Conn.Execute(sql) sql="UPDATE dinespil SET gevindst=0 WHERE SpilID=" & SpilID Conn.Execute(sql)
dem den giver det her ud: UPDATE brugere inner join dinespil on brugere.bruger=dinespil.bruger inner join spil on dinespil.spilID=spil.spilID AND dinespil.vinder=spil.vinder SET brugere.points=brugere.points+dinespil.gevindst where spil.spilID=3 AND spil.vinder='Vinder 3'
Men det virker ikke.. pointsne bliver ikke updateret.
det hele ser nu sådan ud, hvad skal laves om: Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source="& Server.MapPath("spildatabase.mdb")
SQL = "select * from spil where SpilID = "& SpilID &" and vinder is null" Set rs = Conn.Execute(SQL) if rs.eof then Response.write ("Spillet er afsluttet og vinderen er fundet!") & "<br>" else sql = "UPDATE spil SET vinder='" & Request.Form("D1") & "' WHERE SpilID = " & SpilID & "" Conn.Execute(sql) end if sql2 = "UPDATE brugere inner join dinespil on brugere.bruger=dinespil.bruger SET brugere.points=brugere.points+dinespil.gevindst where dinespil.spilID='" & spilID & "' AND dinespil.vinder='" & Request.Form("D1") & "'" Set rs = Conn.Execute(sql2) 'if rs.eof then 'sql2="UPDATE dinespil SET gevindst=Vundet WHERE SpilID= " & SpilID & "" 'else 'sql2="UPDATE dinespil SET gevindst=Tabt WHERE SpilID= " & SpilID & "" end if %>
Det her laver en fejl når den opdatere, for hvis jeg vinder 100 og i forvejen har 300 så er tallet i databasen blevet til 300100
Desuden ved jeg ikke hvad der er galt med de linjer med ' foran
300100: Du skal bare lave dine felter om fra tekst til tal felter.
Vundet/Tabt: Du får ikke et recordset tilbage når du kører en update, så de sidste linier giver ingen mening. Desuden ved din database ikke hvad vundet eller tabt betyder. Og eftersom du SKAL lave dit gevindst felt om til tal, kan du ikke bare ændre Vundet til 'Vundet'. Jeg ville tilføje et ekstra felt, som blev sat til 1 hvis de vandt. og ændre updaten til sql2 = "UPDATE brugere inner join dinespil on brugere.bruger=dinespil.bruger SET brugere.points=brugere.points+dinespil.gevindst, dinespil.vundet=1 where dinespil.spilID='" & spilID & "' AND dinespil.vinder='" & Request.Form("D1") & "'" Set rs = Conn.Execute(sql2)
Der er jo egentligt ikke nogen grund til at sætte den til noget specielt hvis de har tabt. Hvis du gerne vil have nulstillet gevindst, så kan du bruge sql2 = "UPDATE dinespil SET gevindst=0 WHERE dinespil.spilID='" & spilID & "'" Set rs = Conn.Execute(sql2) efter ovenstående. Men den har jeg jo vist dig tidligere.
Hvis du fortæller databasen at den skal lægge "300" til "100", så vil det altid blive "100300". Når du trækker noget fra en tekst, så kan den godt regne ud at du har lagt tal ind i et tekstfelt, og vil så prøve at trække fra inden den melder fejl. Det vil formentligt kunne lade sig gøre med brugere.points=brugere.points-0+dinespil.gevindst eller brugere.points=(brugere.points-0)+(dinespil.gevindst-0) men det er altså ikke en særligt fornuftigt fremgangsmåde.
"Jeg vil gerne have den til at skrive vundet eller tabt udfra hvad der er sket i et felt der hedder udfald ?" Selvfølgelig kan man det.
Hvis Request.Form("D1") stadig indeholdet vinderen, så bliver det vist: sql2 = "UPDATE dinespil SET udfald=iif(dinespil.vinder='" & Request.Form("D1") & "','Vundet " & Request.Form("D1") & "','Tabt " & Request.Form("D1") & "') WHERE dinespil.spilID='" & spilID & "'" Set rs = Conn.Execute(sql2)
Synes godt om
Ny brugerNybegynder
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.