Avatar billede hede98 Nybegynder
14. oktober 2003 - 22:54 Der er 31 kommentarer og
1 løsning

Opdatering af et katalog nr.

Hej.

Jeg er ved at lave en asp side, hvor jeg henter en nogle data ud fra en database, jeg henter id, beskrivel og katalog nr ud. Katalog nr er null og her skal jeg indsætte et nr. og så opdatere det felt i databasen. Problemer er bare at jeg henter mange linier ud fra databasen, se nedenstående, hvor jeg så vil indtaste et katalog nr. på hver og så trykke "gem" og så gemmer den alle nummernr....

id1, beskrivelse1, katalog1
id2, beskrivelse2, katalog2
id3, beskrivelse3, katalog3 (OSV)
"GEM"

Hvordan gør jeg lige det,,, nogen der kan give mig en stump kode til det...
Avatar billede nmh Nybegynder
14. oktober 2003 - 23:15 #1
Er det alle poster i databasen, der skal opdateres med et katalognummer?
Er det noget, du er nødt til at gøre manuelt, eller kan man i princippet generere katalognumre automatisk?
Hvor mange poster drejer det sig om?
Avatar billede hede98 Nybegynder
14. oktober 2003 - 23:27 #2
Hej... Man skal gøre det manuelt og jeg skal nok selv tilrette select koden, det kan være 1 poste, 10 poster eller mange flere, det er forskelligt...
Avatar billede nmh Nybegynder
14. oktober 2003 - 23:34 #3
Er dit problem så, hvordan du får lavet en side, hvor du kan få vist en post, indtaste katalognummeret og derefter få opdateret posten med det nye nummer?
Avatar billede nmh Nybegynder
14. oktober 2003 - 23:41 #4
Her er en SQL-ordre, der opdaterer en post. Posten er identificeret med sit ID-nummer:

SQL="Update database set katalognr='" & ditnyekatnr & "' where ID=" & ID

Så hvis du laver en asp-side, hvor hele posten vises, (ID-nummeret f.eks. i et skjult felt) og med et indtastningsfelt til katalognummeret, så skal du blot sende ID-nummer og det nye katalog nummer tilbage til serveren, og så klarer sql-ordren ovenfor det fornødne.
Avatar billede hede98 Nybegynder
15. oktober 2003 - 08:25 #5
hmmm. jeg er sgu ikke helt med.
en der kan hjælpe med at lave hele siden.
Den henter noget, den viser noget, jeg retter måske mange steder, jeg gemmer.
Avatar billede nmh Nybegynder
15. oktober 2003 - 10:56 #6
OK, men så skal jeg lige være helt med på det du ønsker.
Er du tilfreds med en side, der viser en post:
ID-nummer plus beskrivelse samt et felt, hvor du kan indtaste et katalognummer.
Der submittes derefter ID-nummeret og katalognummeret tilbage til serveren. Den post der svarer til ID-nummeret får sit katalogfelt opdateret.
Avatar billede hede98 Nybegynder
15. oktober 2003 - 11:15 #7
Jeps... Jeg skal bare kunne have linier på skærmen og opdatere dem på engang..
f.eks.
id1, beskrivelse1, katalog1
id2, beskrivelse2, katalog2
og sådan med data
1, dejlig lille hus, 100
2, dejlig stor hus, 203

Jeg skal kunne indtaste katalog nr. på alle linier og så trykke gem
Avatar billede nmh Nybegynder
15. oktober 2003 - 11:18 #8
Hvor mange skal du have ad gangen?
Jeg regner selv med du sørger for udvælgelsen af det, der skal vises?
Avatar billede hede98 Nybegynder
15. oktober 2003 - 11:55 #9
Det er meget forskelligt, man ja, jeg henter dem selv ud fra databasen
Avatar billede nmh Nybegynder
15. oktober 2003 - 12:01 #10
Så du vil have et record-set, som indeholder alle de poster, der skal opdateres. Vil nogle af posterne allerede have fået et katalognummer?
Taler vi om et meget stort antal poster, eller er det blot 10 til 20 poster?
Avatar billede hede98 Nybegynder
15. oktober 2003 - 12:04 #11
Ja nogle vil måske have et katalog nr. allerede.
Vi snakker vel maks 100 poster, tror jeg... men er det ikke lige meget.
Avatar billede nmh Nybegynder
15. oktober 2003 - 12:05 #12
Hvis du ikke får givet numre til alt, hvad der vises, men indsender alligevel, så kan man selvfølgelig ikke få opdateret det hele. Vil det kunne give problemer?
Men du udskriver måske blot alle de poster, som mangler et katalognummer?
Avatar billede nmh Nybegynder
15. oktober 2003 - 12:17 #13
Skal poster, der har et katalognummer overhovedet vises?'Men det er måske meningen at du vil kunne ændre nummeret?
Avatar billede nmh Nybegynder
15. oktober 2003 - 12:21 #14
Jeg ser på det i aften.
Avatar billede hede98 Nybegynder
15. oktober 2003 - 12:34 #15
jeps... man skal kunne ændre i det.
Hvis man ikke har indsat et katalog nr og trykke gem, så gemmer den vel bare det som har fået et katalog nr.
Avatar billede nmh Nybegynder
15. oktober 2003 - 22:28 #16
Her er et forslag:
Først skal du lave siden visposter.asp:
(jeg bruger altid at starte med 'Option Explicit'. Det betyder, at alle variable skal erklæres i en dim sætning enten lokalt i en procedure eller globalt. Det letter i det lange løb fejlfinding, og får programmet til at køre lidt bedre).

<%Option Explicit
dim rs, n, og en række andre variable...
...
dette laver du selv
...

'rs forventer jeg nu, er et recordset, som indeholder
'ID, beskrivelse og katalognr, hvis katalognr.
'findes ellers er rs("katalognr") en tom streng
%>
<html>
<body>
<form action="gem.asp" method=post>
<%
while not rs.eof
  n=n+1
  Response.write(rs("ID") & " " & rs("beskrivelse") & "<br>" & "<input type=text name=Nr" & n & " value=" & rs("katalognr") & ">")
  Response.write("<input type=hidden name="ID" & n & " value=" & rs("ID") & ">")
wend
response.write("<input type=hidden name=antal value=" & n & "><p>")
%>
<input type=submit value="Indsend">
</body>
</html>

Siden gem.asp kan f.eks. se således ud:

<%Option Explicit
dim antal,SQL,i, ID, katnr, oCon
antal=Cint(Request.Form("antal")

'jeg forventer, at oCon kan bruges til at få udført en SQL-ordre
'som virker på din database.
'......
'.....

for n=1 to antal
  ID=Clng(Request.Form("ID" & n)
  Katnr=Request.Form("Nr" & n)
  SQL="Update database set katalognr='" & Katnr & "' where ID=" & ID
  oCon.execute SQL
next
oCon.close
set oCon=nothing
'Nu er de nye katalognumre gemt i databasen.
Response.Redirect("til den side, du nu vil have startet")
%>
Avatar billede nmh Nybegynder
15. oktober 2003 - 22:35 #17
Ups. En rettelse:
jeg kom til at erklære en variabel med navnet 'i' i stedet for en med navn 'n' i gem.asp.

Linien med dim skal derfor være således:

dim antal, SQL, n, ID, katnr, oCon

Jeg har ikke haft mulighed for at afprøve noget. Jeg er nu bortrejst nogle dage, men "er på" igen lørdag aften.
Avatar billede hede98 Nybegynder
16. oktober 2003 - 22:19 #18
Jeg tror ikke helt jeg kan finde ud af det...
se mere på www.h-hedegaard.dk/auktion/test.asp og gem.asp

koden er her: (test.asp)
<%Option Explicit
dim rs, n, og en række andre variable...
%>

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/db/auktion.mdb")
Conn.Open DSN
%>
  <% set rskunder = Conn.execute("SELECT * FROM salgsliste where liste='Bilauktionskatalog'")
do until rskunder.eof %>

'rs forventer jeg nu, er et recordset, som indeholder
'ID, beskrivelse og katalognr, hvis katalognr.
'findes ellers er rs("katalognr") en tom streng
%>
<html>
<body>
<form action="gem.asp" method=post>
<%
while not rs.eof
  n=n+1
  Response.write(rs("ID") & " " & rs("beskrivelse") & "<br>" & "<input type=text name=Nr" & n & " value=" & rs("katalognr") & ">")
  Response.write("<input type=hidden name="ID" & n & " value=" & rs("ID") & ">")
wend
response.write("<input type=hidden name=antal value=" & n & "><p>")
%>
<input type=submit value="Indsend">
</body>
</html>

gem.asp
<%Option Explicit
dim antal, SQL, n, ID, katnr, oCon
antal=Cint(Request.Form("antal")

'jeg forventer, at oCon kan bruges til at få udført en SQL-ordre
'som virker på din database.
'......
'.....

for n=1 to antal
  ID=Clng(Request.Form("ID" & n)
  Katnr=Request.Form("Nr" & n)
  SQL="Update database set katalognr='" & Katnr & "' where ID=" & ID
  oCon.execute SQL
next
oCon.close
set oCon=nothing
'Nu er de nye katalognumre gemt i databasen.
Response.Redirect("til den side, du nu vil have startet")
%>
Avatar billede nmh Nybegynder
19. oktober 2003 - 21:00 #19
Ok, jeg troede, du selv kunne lave noget af det. Jeg håber, jeg i morgen kan få tid til at se lidt mere på det.

Har du brugt dette før, og på den måde fået oprettet forbindelse til din database?

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/db/auktion.mdb")
Conn.Open DSN

Og har du fået det til at virke?
Avatar billede hede98 Nybegynder
19. oktober 2003 - 21:13 #20
jeps.. det virker..
Avatar billede nmh Nybegynder
20. oktober 2003 - 16:36 #21
Her er så en asp-side, der kan vise det ønskede, og som giver mulighede for at redigere.
Du kan jo kalde den visPoster.asp.

<%Option Explicit
dim Conn, DSN, rs, n

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/db/auktion.mdb")
Conn.Open DSN

set rs = Conn.execute("SELECT * FROM salgsliste where liste='Bilauktionskatalog'")

'rs  forventer jeg nu, er et recordset, som indeholder
'ID, beskrivelse og katalognr, hvis katalognr.
'findes ellers er rs("katalognr") en tom streng
%>
<html>
<body>
<form action="gem.asp" method=post>
<%
while not rs.eof
  n=n+1
  Response.write(rs("ID") & " " & rs("beskrivelse") & "<br>" & "<input type=text name=Nr" & n & " value=" & rs("katalognr") & ">")
  Response.write("<input type=hidden name="ID" & n & " value=" & rs("ID") & ">")
wend
response.write("<input type=hidden name=antal value=" & n & "><p>")
%>
<input type=submit value="Indsend">
</body>
</html>
Avatar billede nmh Nybegynder
20. oktober 2003 - 16:37 #22
rettelse: lige før </body> i næstsidste linie skal tilføjes
</form>
Avatar billede nmh Nybegynder
20. oktober 2003 - 16:50 #23
Her er så siden gem.asp, som sørger for at dine ændringer bliver gemt i databasen.
Jeg har brugt navnet katalognr for det felt i din database, der indeholder katalognummeret.
Hvis feltet hedder noget andet skal du ændre i SQL-ordren:
  SQL="Update salgsliste set katalognr='" & Katnr & "' where ID=" & ID

Til sidst skal du i stedet for "til den side, du nu vil have startet" skrive navnet på den side,
du vil have startet.
gem.asp:

<%Option Explicit
dim Conn, DSN, n, antal, ID, Katnr, SQL

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/db/auktion.mdb")
Conn.Open DSN

for n=1 to antal
  ID=Clng(Request.Form("ID" & n)
  Katnr=Request.Form("Nr" & n)
  SQL="Update salgsliste set katalognr='" & Katnr & "' where ID=" & ID
  Conn.execute SQL
next
Conn.close
set Conn=nothing
'Nu er de nye katalognumre gemt i databasen.
Response.Redirect("til den side, du nu vil have startet")
%>

Jeg har ikke testet dette, men jeg regner da med, at det virker. Hvis der er fejl, så skrive den præcise fejlmeddelelse her.
Avatar billede hede98 Nybegynder
20. oktober 2003 - 20:47 #24
Fejl

http://www.h-hedegaard.dk/auktion/visposter.asp

Microsoft VBScript compilation error '800a03ee'

Expected ')'

/auktion/visposter.asp, line 21

Response.write("<input type=hidden name="ID" & n & " value=" & rs("ID") & ">")
Avatar billede nmh Nybegynder
20. oktober 2003 - 21:13 #25
Ja, der indsneg sig selvfølgelig en fejl.
Sådan skal denne linie være:

Response.write("<input type=hidden name=ID" & n & " value=" & rs("ID") & ">")
Avatar billede hede98 Nybegynder
20. oktober 2003 - 21:26 #26
Avatar billede nmh Nybegynder
20. oktober 2003 - 21:52 #27
Prøv lige at skrive visposter.asp ud her i sin helhed.
Avatar billede hede98 Nybegynder
20. oktober 2003 - 21:56 #28
<%Option Explicit
dim Conn, DSN, rs, n

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("/db/auktion.mdb")
Conn.Open DSN

set rs = Conn.execute("SELECT * FROM salgsliste where liste='Bilauktionskatalog'")

'rs  forventer jeg nu, er et recordset, som indeholder
'ID, beskrivelse og katalognr, hvis katalognr.
'findes ellers er rs("katalognr") en tom streng
%>
<html>
<body>
<form action="gem.asp" method=post>
<%
while not rs.eof
  n=n+1
  Response.write(rs("ID") & " " & rs("beskrivelse") & "<br>" & "<input type=text name=Nr" & n & " value=" & rs("katalognr") & ">")
Response.write("<input type=hidden name=ID" & n & " value=" & rs("ID") & ">")
wend
response.write("<input type=hidden name=antal value=" & n & "><p>")
%>
<input type=submit value="Indsend">
</form>
</body>
</html>
Avatar billede nmh Nybegynder
20. oktober 2003 - 22:02 #29
Hvad hedder felterne i din database?
Jeg har brugt navnene ID, beskrivelse og katalognr.
Er det de navne du har på felterne i din database?
Avatar billede hede98 Nybegynder
21. oktober 2003 - 08:46 #30
id
katalognr
beskrivelse
Avatar billede nmh Nybegynder
21. oktober 2003 - 17:36 #31
Nu har jeg lavet et lille test-setup, og nu er det testet og det virker.
Jeg har været nødt til at ændre på din DNS, for at få det til at virke hos mig. Ogsåer de rettet et par småfejl.
Jeg måtte også ændre på
set rs = Conn.execute("SELECT * FROM salgsliste where liste='Bilauktionskatalog'")
i VisPoster.asp, da min testdatabase ikke indeholdt et felt der hed liste. Men det kan du jo selv ændre igen. Det jeg viser her virker på min lille database med kun de 3 felter ID, Beskrivelse og Katalognr.

VisPoster.asp:

<%Option Explicit
dim Conn, DSN, rs, n

Set Conn = Server.CreateObject("ADODB.Connection")

DSN="Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & Server.MapPath("db/auktion.mdb")

Conn.Open DSN

set rs = Conn.execute("SELECT * FROM salgsliste")

'rs  forventer jeg nu, er et recordset, som indeholder
'ID, beskrivelse og katalognr, hvis katalognr.
'findes ellers er rs("katalognr") en tom streng
%>
<html>
<body>
<form action="gem.asp" method=post>
<%
while not rs.eof
  n=n+1
  Response.write(rs("ID") & " " & rs("beskrivelse") & "<br>" & "<input type=text name=Nr" & n & " value=" & rs("katalognr") & ">")
  Response.write("<input type=hidden name=ID" & n & " value=" & rs("ID") & "><p>")
  rs.movenext
wend
response.write("<input type=hidden name=antal value=" & n & "><p>")
%>
<input type=submit value="Indsend">
</form>
</body>
</html>

Gem.asp:

<%Option Explicit
dim Conn, DSN, n, antal, ID, Katnr, SQL

Set Conn = Server.CreateObject("ADODB.Connection")

DSN="Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & Server.MapPath("db/auktion.mdb")

Conn.Open DSN

antal=Clng(Request.form("antal"))
for n=1 to antal
  ID=Clng(Request.Form("ID" & n))
  Katnr=Request.Form("Nr" & n)
  SQL="Update salgsliste set katalognr='" & Katnr & "' where ID=" & ID
  Conn.execute SQL
next
Conn.close
set Conn=nothing
'Nu er de nye katalognumre gemt i databasen.
Response.Redirect("VisPoster.asp")
%>

Jeg valgte, at redirecte til VisPoster.asp, for at kontrollere, at tingene faktisk var ændret.
Avatar billede nmh Nybegynder
26. oktober 2003 - 14:47 #32
Nå, har du så fået det 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