14. oktober 2003 - 22:54Der 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....
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
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?
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?
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.
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.
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.
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
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?
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?
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") %>
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") %>
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
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.
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")
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.
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.