webForumDet fria alternativet

Update problem

15 svar · 329 visningar · startad av Asa

AsaMedlem sedan dec. 20011 934 inlägg
#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!

crisse6Medlem sedan dec. 20002 441 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?

AsaMedlem sedan dec. 20011 934 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"))
CatZMedlem sedan jan. 20022 341 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"

AsaMedlem sedan dec. 20011 934 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!

crisse6Medlem sedan dec. 20002 441 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?

CatZMedlem sedan jan. 20022 341 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
AsaMedlem sedan dec. 20011 934 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å!

AsaMedlem sedan dec. 20011 934 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
AsaMedlem sedan dec. 20011 934 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>
crisse6Medlem sedan dec. 20002 441 inlägg
#11

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

AsaMedlem sedan dec. 20011 934 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?!?

CatZMedlem sedan jan. 20022 341 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 ;)

AsaMedlem sedan dec. 20011 934 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
CatZMedlem sedan jan. 20022 341 inlägg
#15

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

CatZMedlem sedan jan. 20022 341 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?

Genererad på 395 ms · cache AV · v20260730165559-full.f96bc7eb