webForumDet fria alternativet
Logga in / Bli medlem

Update problem

ASP

15 svar · 335 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Trådstart#1

Har en databas där jag har 2 tabeller:

faktura
-- fakturaNr (tal)
-- fakturadatum (text)
-- forfallodatum (text)

beskrivning
-- id (räknare)tal
-- fakturaNr (tal)
-- beskrivning (Text)
-- antal (tal)
-- pris (text)

När jag ska ändra en faktura så skriver jag ut alla saker som finns med i den fakturan. Hämtar först fakturan och sen loopar jag ut alla beskrivningar.

Hur gör jag nu för att enkelt kunna ändra ALLT som hör till fakturan på en och samma gång?

Hoppas jag förklarar så ni förstår!

Medlem sedan dec. 20002 526 inlägg
#2

Hmm.... kan du inte gora en update och skapa ett rs och sedan en annan sql dar du uppdaterar beskrivningen baserat pa fakturanummer?

Medlem sedan dec. 20011 860 inlägg
#3

Men jag måste ju veta vilket id och till vilken faktura beskrivningen tillhör. Kan finnas hu många beskrivningar som helst!

Att uppdatera fakturanr, fakturadatum och förfallodag är ju inge svårt. Jag gör det med denna kod men hur gör jag på beskrifningarna?

FakturaNr         = Request.Form("fanr")
Fakturadatum      = Request.Form("fad")
Forfalldatum      = Request.Form("fod")
Conn.execute("Update faktura Set FakturaNr=" & FakturaNr & ",Fakturadatum='" & Fakturadatum & "',forfallodatum='" & Forfalldatum & "' Where fakturaNr= "& Request.Querystring("fakturaNr"))
Medlem sedan jan. 20022 440 inlägg
#4

Du gör på precis samma sätt med andra tabellen, fast du behöver bara ett recordset till alltihop.

Faktura nummer ska du aldrig uppdatera eller? Därför behöver du inte med det utan lägg det enbart som
(( - WHERE FakturaNr = " & FakturaNr & " - ))

Vad jag vet kan man inte uppdatera båda med en "update"

Medlem sedan dec. 20011 860 inlägg
#5

Men jag måste alltså på nåt sätt göra en For slinga när jag uppdaterar beskrivningarna? Före det räkna antal beskrivningar i den fakturan?!? Eller har jag fel?

Haru ett exempel så skulle det vara sjysst!

Medlem sedan dec. 20002 526 inlägg
#6

men du har ju fakturarnr i bada dina tabeller?! da kan det val knappast bli fel, och som Catz sa du lar val inte andra fakturanumret?

Medlem sedan jan. 20022 440 inlägg
#7

Har du fler än 1 beskrivning till varje faktura ?:

SQL = "SELECT COUNT(id) AS AntalBeskrivningar FROM Beskrivning WHERE fakturanr = " & FakturaNr & "
Set rs = objConnection.Execute(SQL)

Antal = rs("AntalBeskrivningar")
rs.Close
Set rs = Nothing

For i = 0 to Antal
  SQL = "UPDATE" osv
Medlem sedan dec. 20011 860 inlägg
#8

Japp - kan ha flera beskrivningar! Kan ju vara massa grejjer man säljer och ska fakturera till samma kund.

Vad ska jag döpa fälten till då? I formuläret? Vill kunna ha javascriptvalidering oxå!

Medlem sedan dec. 20011 860 inlägg
#9

Hur ska jag göra med Where ... = ....?

For i = 0 to Antal
     strPris             = Request.Form("pris" & i)  
     strAntal            = Request.Form("antal" & i)  
     strBeskrivning      = Request.Form("bes" & i)

     Conn.execute("Update beskrivning Set beskrivning=" & strBeskrivning & ",pris='" & strPris & "',antal=" & strAntal & " Where ...=....????
Next
Medlem sedan dec. 20011 860 inlägg
#10

Som jag har nu så skriver jag ut alla värden i den inputtaggarna så här:

<%Set Bes=Conn.Execute("Select beskrivning From beskrivning Where Fakturanr=" & RS("fakturanr") & " Order By pris desc")
x=1
Do Until Bes.EOF%>
  &nbsp; <input type="text" name="bes<%=x%>" size="45" value="<%=Bes("beskrivning")%>"> <br>
<%x=x+1
Bes.MoveNext
Loop%>

På detta sätt kan jag enkelt fixa forslingan i javascriptvalideringen!

Set Antal=Conn.Execute("Select Count(*) As Antal From beskrivning Where fakturaNr=" & RS("fakturaNr"))%>

<script language="javaScript">
function Check() {
<%For i = 1 To Antal("antal")%>
        if (document.faktura.bes<%=i%>.value==""){
		alert("Du glömde beskrivning nr <%=i%>!");
		return false;
<%Next%>
        } 
}
</script>
Medlem sedan dec. 20002 526 inlägg
#11

where fakutarnr = querystring (fran fakturarnr tabellen's fakturanr??)

Medlem sedan dec. 20011 860 inlägg
#12

Det går ju inte! Men vet ju då inte vilken som är vilken! Vilket ex svar som har vilket id. Med endast ett fält är det enkelt för då kan man ju göra en

For Each

Men i detta fall är det ju 3 fält och så ska man uppdatera förfallodatum och fakturadatum med!

Så hur gör jag?!?

Medlem sedan jan. 20022 440 inlägg
#13

Men i så fall uppdaterar du väl inte mer än 1 faktura åt gången ? isåfall ska det väl inte vara några problem.

Du kan väl inte låt oss säga uppdatera 4 fakturor på en gång? Det skulle ju innebära i så fall 12 st ställen på 4 fakturor i 3 olika tabeller att uppdatera?

*suck* För trött nu..... kanske kan hjälpa till imorgon ;)

Medlem sedan dec. 20011 860 inlägg
#14

Nej Nej! Det som strular är ifall faktura 1 har ex 2 varor. Hoppas jag tänker rätt så ni förstår! Jag vill kunna ändra allt!

FAKTURA
fakturaNr---fakturadatum-------forfallodatum
2-----------2002-11-15---------2002-11-25

BESKRIVNING
id----------fakturaNr--beskrivning-------antal---------pris
28----------2----------Sko---------------1------------2000
29----------2----------Tvål---------------1------------1125
Medlem sedan jan. 20022 440 inlägg
#15

se inlägget nedan istället....

Medlem sedan jan. 20022 440 inlägg
#16
<% SQL = " SELECT faktura.*, beskrivning.* " _
& " FROM faktura " _
& " INNER JOIN beskrivning " _
& " ON faktura.fakturanr = beskrivning-fakturanr" _
& " WHERE fakturanr = " & Request.Querystring("fanr")
& " ORDER BY beskrivning.id ASC"

Set objRS = objConn.Execute(SQL)
If not rs.EOF then

fanr         = objRS("fakturaNr")
fakdat     = objRS("fakturadatum")
forfalldat = objRS("forfallodatum")
%>

<form method="post" action="update.asp?fanr=<%= fan %>">
<input name="form_fakdat" type="text" value="<%= faktdat %>"><br>
<input name="form_forfalldat" type="text" value="<%= forfalldat %>"><br>
<%
i = 0
do while not rs.eof

id = objRS("id")
beskriv = objRS("beskrivning")
antal = objRS("antal")
pris = objRS("pris")

%>
<input type="hidden" name="form_id" value="<%= id %>">
<input name="form_beskriv" type="text" value="<%= beskriv %>"><br>
<input name="form_antal" type="text" value="<%= antal %>"><br>
<input name="form_pris" type="text" value="<%= pris %>"><br>
<%
objRS.movenext
i= i + 1
loop
%>
<input type="submit">
</form>

Sådär någonting skulle första delen som plockar fram all information kunna se ut, lägg märke till att det enda som skiljer från dig är att jag hämtar information från två tabeller med en enkel JOIN.

Så över till nästa sak då på sidan update.asp som skulle kunna se ut ungefär som nedan:

<%
		SQL = "UPDATE faktura SET" _
		& " fakturadatum = #" & Request.Form("form_fakdat") & "#, " _
		& " forfallodatum = #" & Request.Form("KrNamn") & "# " _
		& " WHERE fakturaNr = " & Request.Querystring("faknr")				
		objConn.Execute SQL,,128
		
		For j = 0 to i
			SQL = "UPDATE beskrivning SET " _
			& " beskriving = '" & request.form("form_beskrivning") & "' " _
			& " antal = " & request.form("form_antal") & " " _
			& " pris = " & request.form("form_pris") & " " _
			& " WHERE fakturaNr = " & Request.Querystring("faknr") & " " _
			& " AND id = " & Request.Form("form_id") & " "
			objConn.Execute SQL,,128
		Next
%>

Allt detta är helt otestat, har säkert missat en massa och jag är inte världens bästa felsökare, men kanske förstår du principen bakom?

390 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
127 ms — deklarationer (db)
126 ms — hämta statistik (db)
135 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)