Avatar billede jnissen Nybegynder
23. juli 2002 - 13:14 Der 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 :-)
Avatar billede tmceu Praktikant
23. juli 2002 - 13:21 #1
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å :-)
Avatar billede coolcoder Nybegynder
23. juli 2002 - 13:22 #2
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
Avatar billede -sofus- Nybegynder
23. juli 2002 - 13:22 #3
hvis du skriver f.eks. update program set gruppe = 'piger' where dag = '26' så skifter den alle felterne som passer til din where sætning
Avatar billede -sofus- Nybegynder
23. juli 2002 - 13:23 #4
Nåh, der var jeg vidst lidt for langsom (;
Avatar billede jnissen Nybegynder
23. juli 2002 - 13:31 #5
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.

tmceu-> Vil du fortælle om den løsning du kender?
Avatar billede tmceu Praktikant
23. juli 2002 - 13:48 #6
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.

Do Until objRS.EOF

Response.Write("<TR>" & vbCrLf)

Response.Write("<FORM method=""post"" action=""minfil.asp"">" & vbCrLf)

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

Response.Write("<TD nowrap align=left><INPUT TYPE=Submit NAME=Opdater VALUE=Ret></TD>" & vbcrlf)

Response.Write("</FORM>" & vbCrLf)

response.write("</TR>" & vbCrLf)

objRS.MoveNext
Loop
Avatar billede jnissen Nybegynder
23. juli 2002 - 14:04 #7
Jeg beklager meget, men jeg fatter sku ikke ret meget af det :-)

Mangler der ikke noget?

Hvis du nu får de felter som er i min db, og jeg ligger 100 point mere på, er du så mand for at lave det, så jeg forstår det? :-D
Avatar billede tmceu Praktikant
23. juli 2002 - 14:12 #8
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.
Avatar billede jnissen Nybegynder
23. juli 2002 - 14:16 #9
Det gør jeg også. Jeg vil meget gerne have det så jeg opdatere mange poster på én gang.

Men jeg kunne også godt tænke mig den del som opdatere posterne.

Er det tænkelig du vil af med dem :-) ?
Avatar billede coolcoder Nybegynder
23. juli 2002 - 14:24 #10
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 :)
Avatar billede tmceu Praktikant
23. juli 2002 - 14:25 #11
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.
Avatar billede jnissen Nybegynder
23. juli 2002 - 14:31 #12
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.
Avatar billede tmceu Praktikant
23. juli 2002 - 14:33 #13
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 :-)
Avatar billede coolcoder Nybegynder
23. juli 2002 - 14:39 #14
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
%>
Avatar billede jnissen Nybegynder
23. juli 2002 - 14:54 #15
Når jeg bruger denne:
<%
do while not rs.eof
response.write "<input type=text name=[felt]_" & rs("id") & ">"
rs.movenext
loop
%>

Kommer der bare mange tomme felter. Der står ikke noget i dem. Hvad gør jeg galt?
Avatar billede coolcoder Nybegynder
23. juli 2002 - 15:06 #16
du skal selvfølgelig lige huske at putte data fra basen i formfelternes value:

<%
do while not rs.eof
response.write "<input type=text name=[felt]_" & rs("id") & " value=""" & rs("[datafelt]") & """>"
rs.movenext
loop
%>
Avatar billede jnissen Nybegynder
23. juli 2002 - 15:56 #17
Når jeg prøver at gemme det, kommer denne fejl: Too few parameters. Expected 1.

Er det mig der igen mangler noget?
Avatar billede coolcoder Nybegynder
23. juli 2002 - 16:07 #18
du skal jo ændre i koden, så [felt] og [datafelt] er databasefeltnavnet.

Prøv evt. at sende koden du bruger
Avatar billede jnissen Nybegynder
23. juli 2002 - 17:00 #19
Hvad er det for nogle navne som skal ændres?

Det jeg har ser sådan ud:

<% response.write "<input type=text name=resul " & rs("id") & " value=""" & rs("resultat") & """>" %>

og

<%
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
%>
Avatar billede coolcoder Nybegynder
23. juli 2002 - 17:08 #20
du skal i hvert fald ha' ændret til følgende:

<% response.write "<input type=text name="""resultat_" & rs("id") & """ value=""" & rs("resultat") & """>" %>


<%
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
%>
Avatar billede jnissen Nybegynder
23. juli 2002 - 17:22 #21
Nu kommer denne fejl:
Microsoft VBScript compilation error '800a0401'

Expected end of statement

/ret.asp, line 32

response.write "<input type=text name="""resultat_" & rs("id") & """ value=""" & rs("resultat") & """>"
-----------------------------------------^
Avatar billede jnissen Nybegynder
25. juli 2002 - 00:02 #22
Kan du ikke hjælpe mig?
Avatar billede jnissen Nybegynder
29. august 2002 - 10:18 #23
Undskyld jeg først lukker nu :-(

tmceu -> kan du ikke lige ligge et svar, så du også kan få point?
Avatar billede tmceu Praktikant
29. august 2002 - 12:15 #24
Sure :-)
Avatar billede jnissen Nybegynder
29. august 2002 - 12:18 #25
tmceu-> Tak :-)

Tak for hjælpen til jer begge. Jeg fik det dog desværre ikke til at virke.
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