webForumDet fria alternativet

Optimering

5 svar · 390 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#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

voigtann1Medlem 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".

Peter SMedlem sedan dec. 20025 483 inlägg
#3

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

devotionMedlem 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

Peter SMedlem sedan dec. 20025 483 inlägg
#5

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

devotionMedlem sedan jan. 20013 582 inlägg
#6

Peter S skrev:

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

Ok! :)

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)