23. juli 2002 - 13:14Der er
23 kommentarer og 2 løsninger
Opdater poster i en database
Hejsa
Jeg ønsker at kunne opdatere flere poste af gangen i min Access database. Så hvis jeg fx skriver: SQL = "SELECT * from program where gruppe='drenge' AND dag='26' " Så skal den hente alle de poster ind i nogle felter som jeg kan rette i, og så gemme dem alle på én gang.
Er det noget som kan lade sig gøre? Hvis I ikke forstår det, så forklarer jeg det bare igen :-)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det kan godt lade sig gøre og den bedste måde jeg kan hjælpe dig på, er ved at skrive at jeg mener det er ineffektivt, da du sikkert reelt ikke opdaterer alle poster, men med en sådan løsning vil alle blive opdateret uanset hvad. Det betyder overhead både for webserveren og databasen. Jeg foretrækker en løsning hvor man laver en form pr. post og opdaterer disse enkeltvis.
Og hver gang jeg skrive dette, plejer der at komme en anden med et færdig script til det du faktisk spurgte om, det var det jeg mente med at det var den bedste måde at hjælpe på :-)
hvis alle poster skal have ændret en værdi til det samme, kan du lave en:
SQL = "update program set [felt]=[værdi] where gruppe='drenge' AND dag='26'"
ellers opbygger du en form: <% do while not rs.eof response.write "<input type=text name=[felt]_" & rs("id") & "> rs.movenext loop %>
Når du så har submittet siden og skal gemme kan du gøre således: <% for each felt in request.form arrFelt = split(item, "_") SQL = "update program set " & arrFelt(0) & "='" & request.form(item) & "' where id=" & arrFelt(1) conn.execute(SQL) next
Jeg skal bruge det til at opdatere nogle resultater fra en fodboldturnering. Der er over 300 kampe, så det vil tage sin tid at tage hver kamp enkeltvis, derfor ville det være godt, at kunne opdatere en række af gangen. Det skal kun gøres én weekend om året, så det er ikke så meget serveren vil blive belastet.
Det er faktisk ret simpelt, for jeg udskriver blot alle mine poster i en tabel. Alle felter med undtagelse af mit ID felt smides i INPUT felter, mens mit ID felt smides i et HIDDEN felt.
Du kan lige få et skelet. Jeg har "anonymiseret" det lidt, men jeg håber ikke der har sneget sig nogle fejl ind i den proces.
For Each Item In objRS.Fields If lcase(item.name) = "id" then Response.Write("<INPUT TYPE=""HIDDEN"" NAME=ID VALUE=""" & item.value & """>" & vbcrlf) Else Response.Write("<TD nowrap align=left><INPUT TYPE=""TEXT"" NAME=""" & item.name & """ VALUE=""" & item.value & """></TD>" & vbcrlf) End If Next
Jo, der mangler den funktionalitet der tager sig af opdateringen af databasen. Mit eksempel udskriver blot (dele af) en tabel, der lister alle felter i dit recordset i en tabel, incl. form med INPUT felter og en submit knap.
Point er ikke det væsentlige, men jeg troede du stadig gik efter løsningen med masse opdateringen, baseret på dine kommentarer tidligere.
tmceu >> jeg er spændt på at se, hvordan du vil holde styr på hvilken text-felter der hører til hvilke id'er!!
jnissen >> Jeg har sendt dig en løsning i form af kode til både oprettelse af og og opdatering af posterne. Har du overhovedet kigget på den?? Det er ikke komplet med layout, men jeg tænkte du evt. selv kunne klare at indsætte det :)
Jeg har vist efterhånden postet om ikke hundreder, så i hvert tilfælde dusinvis af eksempler på update scripts, så det kunne sagtens tænkes :-)
Tænker du blot på den basale syntaks for at opdatere en database, baseret på felterne i en form eller ?
Jeg vil dog godt sige med det samme, at jeg ikke laver flere scripts til masseopdatering. Som jeg skrev tidligere mener jeg ikke dette er en særlig god løsning, så det får du mig ikke til :-(
Du kunne evt. prøve at kigge eagleeye's spørgsmål igennem, jeg mener han tidligere har postet et komplet script. Det ligger måske 3-4 uger tilbage.
coolcoder-> Ja, jeg har kigget på det, men prøver lige igen :-)
tmceu-> Okay, jeg ser om jeg kan finde det. Jeg har ikke brug for hjælp til at opdatare en database fra en form. Det kan jeg godt, så længe det kun er én post som skal opdateres.
coolcoder >> læg venligt mærke til min første kommentar og kig så koden igennem en gang til. Hver enkelt post submittes for sig, så jeg har slet ingen behov for at adskille dem.
Men kig lige din egen kode igennem, du kan vist ikke rigtig beslutte dig for om du skal bruge felt eller item og så har den vist meget svært ved at håndtere mere end ét felt pr. record :-)
tmceu >> arh - min fejl! Jeg ville bruge felt for forståelsens skyld, men er så vant til item at jeg glemte det lidt hurtigt ;) Og fair nok med mange forme - det gør det bare langsommeligt, hvis han skal opdatere en hel fodboldserie en kamp ad gangen
jnissen >>
som tcmeu siger skal der lige rettes lidt i sidste kodestump: <% for each felt in request.form arrFelt = split(felt, "_") SQL = "update program set " & arrFelt(0) & "='" & request.form(felt) & "' where id=" & arrFelt(1) conn.execute(SQL) next %>
<% for each felt in request.form arrFelt = split(felt, "_") SQL = "update program set " & arrFelt(0) & "='" & request.form(resul) & "' where id=" & arrFelt(1) conn.execute(SQL) next %>
<% for each felt in request.form arrFelt = split(felt, "_") SQL = "update program set " & arrFelt(0) & "='" & request.form(felt) & "' where id=" & arrFelt(1) conn.execute(SQL) next %>
Tak for hjælpen til jer begge. Jeg fik det dog desværre ikke til at virke.
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.