webForumDet fria alternativet

Bör min kod byggas om?

ASP

21 svar · 237 visningar · startad av Brimba

Medlem sedan dec. 19995 874 inlägg
Frågan#1

Hej!

Ta en titt på min kod.

<%If Request.Form("HDDID") <> "" Then%>
RSObj("OrderID") = orderID
RSObj("HDDID") = Request.Form("HDDID")
RSObj("HDD") = Server.HTMLEncode(Request.Form("HDD"))
RSObj("HDDAnt") = Request.Form("HDDAnt")
TAL = Request.Form("HDDExkl")
For i = 1 To Len(TAL)
If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
var = var & Mid(TAL,i,1)
End If
Next 
RSObj("HDDExkl") = var
<%Else%>
<%End If%>

I en asp fil är det ca 15 sådana satser, kan man bygga om det på något sätt som gör det mindre krävande för systemet?

Tack!

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19996 721 inlägg
#2

Baka ihop allt till en INSERT eller UPDATE. Öppna recordset tar kraft.

Medlem sedan dec. 19995 874 inlägg
#3

Ser ni något fel på denna kod?

RSObj.Source = "tabOrder"
RSObj.Open

RSObj.AddNew
RSObj("SaljarID") = 7
RSObj.Update
orderID = RSObj("OrderID")
Session("OrderID") = orderID
RSObj.Close

RSObj.Source = "tabOrderDator"
RSObj.Open

RSObj.AddNew

If Request.Form("CPUID") <> "" Then
	If RSObj("OrderID") = orderID Then
	Else
		RSObj("OrderID") = orderID
	End If
	RSObj("CPUID") = Request.Form("CPUID")
	RSObj("CPU") = Server.HTMLEncode(Request.Form("CPU"))
	RSObj("CPUAnt") = Request.Form("CPUAnt")
	TAL = Request.Form("CPUExkl")
		For i = 1 To Len(TAL)
			If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
				var = var & Mid(TAL,i,1)
			End If
		Next 
	RSObj("CPUExkl") = var
Else
End If

If Request.Form("RAMID") <> "" Then
	If RSObj("OrderID") = orderID Then
	Else
		RSObj("OrderID") = orderID
	End If
RSObj("RAMID") = Request.Form("RAMID")
RSObj("RAM") = Server.HTMLEncode(Request.Form("RAM"))
RSObj("RAMAnt") = Request.Form("RAMAnt")
TAL = Request.Form("RAMExkl")
For i = 1 To Len(TAL)
If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
var = var & Mid(TAL,i,1)
End If
Next 
RSObj("RAMExkl") = var
Else
End If

RSObj.Update
RSObj.Close

RSObj.Source = "tabOrderArt"
RSObj.Open
RSObj.AddNew

If Request.Form("ArtID") <> "" Then
RSObj("OrderID") = orderID
RSObj("ArtID") = Request.Form("ArtID")
RSObj("Artikel") = Server.HTMLEncode(Request.Form("Artikel"))
RSObj("ArtAnt") = Request.Form("ArtAnt")
TAL = Request.Form("ArtExkl")
For i = 1 To Len(TAL)
If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
var = var & Mid(TAL,i,1)
End If
Next 
RSObj("ArtExkl") = var
Else
End If

RSObj.Update
RSObj.Close
Set RSObj = Nothing
Connection.Close

Det är här jag får det där felmeddelandet som jag har tidigare, det beror nämnligen på att jag inte får in orderID från tabOrder i tabOrderDator. Men jag har en liknande som ser ut så här:

RSObj.Source = "tabOrder"
RSObj.Open

RSObj.AddNew
RSObj("SaljarID") = 7
RSObj.Update
orderID = RSObj("OrderID")
Session("OrderID") = orderID
RSObj.Close

RSObj.Source = "tabOrderArt"
RSObj.Open

RSObj.AddNew
RSObj("OrderID") = orderID
RSObj("ArtID") = Request.Form("prodID")
RSObj("Artikel") = Server.HTMLEncode(Request.Form("ArtNamn"))
RSObj("ArtAnt") = Request.Form("Antal")

TAL = Request.Form("ArtExkl")
For i = 1 To Len(TAL)
If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
var = var & Mid(TAL,i,1)
End If
Next 
RSObj("ArtExkl") = var

RSObj.Update
RSObj.Close
Set RSObj = Nothing
Connection.Close

Och där fungerar allting perfekt.

Jag är förbryllad!

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

[Redigerat av Brimba den 15 jun 2000]

Medlem sedan dec. 19998 577 inlägg
#4

Vad för du för felmeddelande?

------------------
        )|(
       (o o)
-oo0-(_)-0oo-----
webeye.nu *hem*
vide@4sale.se

Medlem sedan dec. 19995 874 inlägg
#5

Microsoft OLE DB Provider for ODBC Drivers error '80040e2f'

[Microsoft][ODBC Microsoft Access 97 Driver] You can't add or change a record because a related record is required in table 'tabOrder'.

/kategori/addpaket.asp, line 548

Medlem sedan dec. 19995 874 inlägg
#6

Line 548 är:
If Request.Form("RAMID") <> "" Then
If RSObj("OrderID") = orderID Then
Else
RSObj("OrderID") = orderID
End If
RSObj("RAMID") = Request.Form("RAMID")
RSObj("RAM") = Server.HTMLEncode(Request.Form("RAM"))
RSObj("RAMAnt") = Request.Form("RAMAnt")
TAL = Request.Form("RAMExkl")
For i = 1 To Len(TAL)
If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
var = var & Mid(TAL,i,1)
End If
Next
RSObj("RAMExkl") = var
Else
End If

RSObj.Update (Detta är rad 548)
RSObj.Close

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19995 874 inlägg
#7

Hej!

Jag har löst problemet.

Tack ändå!

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19995 874 inlägg
#8

Baka ihop allt till en INSERT eller UPDATE. Öppna recordset tar kraft.

Jag kör ju bara en Update/Insert. Det är väl så ihopbakat det kan bli?

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19996 721 inlägg
#9

Nu ser jag att du kör med ett öppet recordset för att kunna plocka ut "senaste id". Men, om du prompt vill optimera sidan, så kan du i alla fall göra en vanlig SQL-INSERT/UPDATE i nästa steg. Det blir ingen jätteskillnad, men liiite...

Medlem sedan dec. 19991 749 inlägg
#10

För att optimera det ännu mer så gör en funktion utav det som du använder om och om igen så slipper du t.ex. ändra i massa kod om du vill ändra nåt.

------------------
Can you tell a 3 year old what a slow modem is?

nanne.net

Medlem sedan dec. 19995 874 inlägg
#11

Man skulle typ kunna göra så här?

Function InsertDB(id,namn,ant,exkl)
	If Request.Form(id) <> "" Then
		If RSObj("OrderID") = orderID Then
		Else
			RSObj("OrderID") = orderID
		End If
		RSObj(id) = Request.Form(id)
		RSObj(namn) = Server.HTMLEncode(Request.Form(namn))
		RSObj(ant) = Request.Form(ant)
		TAL = Request.Form(exkl)
			For i = 1 To Len(TAL)
				If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
				var = var & Mid(TAL,i,1)
				End If
			Next 
		RSObj(exkl) = var
	Else
End If
End Function

Och sedan anropa med tex

InsertDB(RAMID,RAM,RAMAnt,RAMExkl)

Är det så du menar?

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19996 721 inlägg
#12

...fast en Sub, inte en Function

Medlem sedan dec. 19995 874 inlägg
#13

Exempel på en Sub?

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19996 721 inlägg
#14

Byt bara ordet Function till Sub, så blir det en sub.

Medlem sedan dec. 19995 874 inlägg
#15

Beskriv skillnaden mellan Sub och Funktion och vad man använder de olika till, så skulle jag bli glad.

Tack!

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19998 577 inlägg
#16

En "function" skickar tillbaks information, medans en "Sub" bara utför det angivna (alltså skickas den inte någon info tillbaks)...

------------------
        )|(
       (o o)
-oo0-(_)-0oo-----
webeye.nu *hem*
vide@4sale.se

Medlem sedan dec. 19995 874 inlägg
#17

Hej!

Det bör alltså fungera att göra så här:

Sub InsertDB(id,namn,ant,exkl)
	If Request.Form(id) <> "" Then
		If RSObj("OrderID") = orderID Then
		Else
			RSObj("OrderID") = orderID
		End If
		RSObj(id) = Request.Form(id)
		RSObj(namn) = Server.HTMLEncode(Request.Form(namn))
		RSObj(ant) = Request.Form(ant)
		TAL = Request.Form(exkl)
			For i = 1 To Len(TAL)
				If Asc(Mid(TAL,i,1)) > 47 AND Asc(Mid(TAL,i,1)) < 58 then
				var = var & Mid(TAL,i,1)
				End If
			Next 
		RSObj(exkl) = var
	Else
	End If
End Sub
InsertDB(CPUID,CPU,CPUAnt,CPUExkl)
InsertDB(RAMID,RAM,RAMAnt,RAMExkl)
InsertDB(HDDID,HDD,HDDAnt,HDDExkl)

osv...

Och få samma resultat?

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

Medlem sedan dec. 19998 577 inlägg
#18

Japp! Men problemet är väl att du inte kan få ut variabeln RSObj(exkl) utanför subben... då är det nog bättre att köra en funktion... och byt ut RSObj(exkl) mot InsertDB, eller nått...

Detta såklart om du skall ha tillbaks något... annars använder du din kod ovan...

------------------
        )|(
       (o o)
-oo0-(_)-0oo-----
webeye.nu *hem*
vide@4sale.se

Medlem sedan dec. 19996 721 inlägg
#19

...men utan parenteser

InsertDB CPUID,CPU,CPUAnt,CPUExkl
InsertDB RAMID,RAM,RAMAnt,RAMExkl
InsertDB HDDID,HDD,HDDAnt,HDDExkl

Medlem sedan dec. 19995 874 inlägg
#20

Men, eftersom detta är sidan där allting läggs in i databasen så skall ju ingenting mer skrivas ut. Utan efter att kommandot är utfört så är det en redirect längst ner på sidan, så jag behöver aldrig få ut något.

Så då fungerar det perfekt säkert.

Tack!

------------------
Mvh
Patrik
aka Brimba

www.datormaklarna.se
patrik@datormaklarna.se

282 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)