webForumDet fria alternativet
Logga in / Bli medlem

Optimering

ASP

5 svar · 390 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

ej!

Jag har följande kod

	while not Rs.EOF
			
			'Hämta värdena från databasen
			lTimeId=Rs("Id")
			sTimeSign=Rs("Sign")
			sTimeTypeArt=Rs("TimeTypeArt")
			sTimeTypeTyp=Rs("TimeTypeTyp")
			sTimeTypeName=Rs("TimeTypeName")
			sTimeSpec=Rs("Spec")
			dTimeDate=FormatDateTime(Rs("StartDate"),2)
			nTimeTime=ConvertValue(Rs("Time"))
			cPrice=Rs("Price")
			fPercentValue=ConvertValue(Rs("DiscountPCT"))
			fTimeReportTime=GetTimeDiff(Rs("StartDate"), Rs("StopDate"), Rs("Time"))
			sTaskNr=Rs("TaskNr")
			
			'Skapa sLine
			sLine="TR;" & lTimeId & ";" & sTimeSign & ";" & sTimeTypeArt & ";" & sTimeTypeTyp & ";" & sTimeTypeName & ";" & sTimeSpec & ";" & dTimeDate & ";" & nTimeTime & ";" & cPrice & ";" & fTimeReportTime & ";" & sTaskNr & ";" & fPercentValue & ";"
			
			sFile.writeLine sline
			
			if Rs("Sign1By")="" then
				nTimeCount=nTimeCount+1
				bWriteToTextFile=1	
			end if
			
			'Sätta "Attest 1" på rapporterade tider
			sSQL="UPDATE [tblTime] SET [Sign1By]= 'System', [Sign1Date] = GetDate() WHERE [Id] = " & lTimeId
			executeSQL(sSQL)

		Rs.MoveNext	
	wend

Hur kan man optimera?

Nu handlar det inte om hur mycket data som helst, men jag tycker inte om att ha en sql-fråga i en loop.. :)

Mvh
Henrik

Medlem sedan juni 20019 519 inlägg
#2

Optimera vet jag inte men du behöver egentligen inte dim:ar upp variabler för alla dina värde ifrån ditt Recordset. Beroende på vilken Databas du använder dig av. Om det är Access så är det egentligen bara "PM" fältet du behöver dimar och spara då den visas endast en gång.

Du skulle kunna gruppera alla dina ID som träffas och endast köra 1 Update i din "Sätta "Attest 1" på rapporterade tider".

Medlem sedan dec. 20025 483 inlägg
#3

Hur ser SQL-frågan ut som resulterar i RS?

Medlem sedan jan. 20013 582 inlägg
#4
'SQL-sats för att hämta ut data ur tblTime, tblTimetype, tblUsers, tblTask
	sSQL=	"SELECT [tblTime].[Id], [tblTime].[Spec], [tbltime].[Modified], [tbltime].[startDate] AS StartDate, [tblTime].[StopDate] AS StopDate, [tblTime].[Time], [tblTime].[Price], [tblTime].[DiscountPCT], [tblTime].[Sign1By], " &_
			"[tblTimeType].[Custom1] AS TimeTypeArt, [tblTimeType].[Custom2] AS TimeTypeTyp, [tblTimeType].[Name] AS TimeTypeName, " &_
			"[tblTask].[TaskNr] AS TaskNr, " &_
			"[tblUsers].[Sign], [tblUsers].[Name] " &_
			"FROM [tblTime] " &_
			"INNER JOIN [tblTimeType] " &_
			"ON [tblTime].[TimeTypeId] = [tblTimeType].[Id] " &_
			"INNER JOIN [tblTask] " &_
			"ON tblTime.[TaskId] = [tblTask].[Id] " &_
			"INNER JOIN [tblUsers] " &_
			"ON tbltime.[User] = [tblUsers].[Name] " &_
			"WHERE startDate > '" & dStartDate & "' AND stopDate < '" & dStopDate & "' AND [tblUsers].[Name] = '" & sUser & "'"

Hmm, det kanske var en bra idé att göra en sträng av alla id för att sedan göra en Update på slutet! :)

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#5

Precis: ...WHERE id IN (...)

Medlem sedan jan. 20013 582 inlägg
#6

Peter S skrev:

Precis: ...WHERE id IN (...)

Ok! :)

250 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)