webForumDet fria alternativet

jämföra uppdragsnummer

ASP

7 svar · 523 visningar · startad av devotion

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

:h

Hehe.. bara jag igen....

Följande kod loopar ut information från en tabell och skriver till en annan.

'Loopa ut informationen för de uppdragen som skall slås ihop
For i = 1 To Request.Form("checkTask").Count
		
'Hämta information från vart och ett av uppdragen
iTaskId = cLng(request.form("checkTask")(i))
		
'SQL-fråga för att hämta uppdraget i databasen
sSQL = "SELECT * FROM tblTask WHERE Id = " & iTaskId & " ORDER BY ID"
Set objRS = objConn.Execute(sSQL)		
		

'Tilldela värden till variablerna
sTaskNr = objRS("TaskNr")

'Göra jämförelser mm

'Skriva till databasen
sSQL = "UPDATE ..."

Next

Om uppdragsnumrena är samma dvs sTaskNr är lika så fungerar det ju fint.

Men man kan ju sammanfoga olika uppdrgasnumemr dvs sTasknr skiljer sig.

Nu till frågan.
Hur skulle man kunna jämföra sTaskNr i loopen och om de skiljer sig skriva ett nytt nummer efter loopen

For i ....

sTaskNr = to2005099
sTaskNr = to2005100

'aha olika uppdragsnummer skapa en ny variabel to2005099_ny

'Skriv in informationen i databasen
sSQL = UPDATE..."

Next

'Skriv in det nya uppragsnumret till databasen

sSQL = "UPDATE..."

Hoppas ni fattar...

Tack på förhand

Mvh
henrik

Edit för komplett kod se; http://www.webforum.nu/showthread.php?p=1137341#post1137341

Medlem sedan juni 200032 967 inlägg
#2

Hoppas ni fattar...

Jag förstår nog inte riktigt. Exakt vad är problemet? Vilka uppdragsnummer är det du vill jämföra?

Mvh

Medlem sedan jan. 20013 582 inlägg
#3

hmmmmm....

Är jag så dålig på att förklara???

Henrik

Medlem sedan dec. 19996 721 inlägg
#4
'Loopa ut informationen för de uppdragen som skall slås ihop
iCount=Request.Form("checkTask").Count
TaskIdList=""
'Egentligen kan man hämta en färdig kommaseparerad sträng från request.form("checkTask"), men då får vi ingen typkontroll. Man skulle kunna använda en regexp också.
For i = 1 To iCount
   TaskIdList=TaskIdList &  cLng(request.form("checkTask")(i))
   if i<iCount then TaskIdList=TaskIdList & ","
Next
		
'SQL-fråga för att hämta uppdrage[b]n[/b] i databasen
sSQL = "SELECT * FROM tblTask WHERE Id IN (" & TaskIdList & ")"
Set objRS = objConn.Execute(sSQL)		
		
'Behandla hela klabbet på en gång. Ännu hellre, om möjligt, genom att göra "UPDATE blablabla WHERE Id IN ..."
Medlem sedan jan. 20013 582 inlägg
#5

Aha!
Jag är nog dålig på att förklara... :r men du har givit mig lite ideér ia af och det är bra...

Jag har använt mig av delar av din kod....

	'Loopa ut informationen för de uppdragen som skall slås ihop
	iCount=Request.Form("checkTask").Count
	
	'Nollställa sTaskNrList
	sTaskNrList=""

	For i = 1 To iCount
		
		'Hämta information från vart och ett av uppdragen
		iTaskId = cLng(request.form("checkTask")(i))
				
		'SQL-fråga för att hämta uppdraget i databasen
		sSQL = "SELECT * FROM tblTask WHERE Id = " & iTaskId & " ORDER BY ID"
		Set objRS = objConn.Execute(sSQL)		
		
		'Avgöra om uppdraget har samma uppdragsnummer
		sSQL = "SELECT TaskNr FROM tblTask WHERE Id = " & iTaskId
		Set objRS2 = objConn.Execute(sSQL)
		
		sCompereTaskNr = "" & objRS2("TaskNr")
		
		objRS2.Close
		Set objRS2 = Nothing
					
		sTaskNrList = sTaskNrList & sCompereTaskNr
		if i < iCount then sTaskNrList = sTaskNrList & ","

		'Tilldela värden till variablerna

Resultatatet blir en Kommaseparerad lista på TaskNr i variabeln sTaskNrList

då känns det som jag kommit lite på vägen...

Följdfrågan blir då:

Går det att göra något med variabeln sTakNrList? Dvs kan man göra en jämförelse..

att

Om de kommaseparerade värdena är lika then variabeln blnDifferentTaskNr = False

Förstår ni vad jag är ute efter? :)

Mvh
henrik

Medlem sedan dec. 20025 483 inlägg
#6

Använd split() och sedan (typ):

dim arr, i
arr = split(replace(sTaskNrList, " ", ""), ",")

if ubound(arr) > 0 then
  dim equal
  equal = true

  for i = 1 to ubound(arr)
    if arr(0) <> arr(i) then
      equal = false
      exit for
    end if
  next

  if not equal then
    'värdena ej lika
  else
    'värdena lika
  end if
end if

:)

Medlem sedan jan. 20013 582 inlägg
#7

Hej! :)

Dåså, då kanske vi kan avsluta den här tråden...

Tack för all hjälp. tipps och ideér...

Det visade sig att lösningen inte var så svår, jo det är klart, Peter S kod hade jag inte klurat ut.... Men den kommaseparerade strängen fanns redan i koden... Men tack emission! Du fick mig att tänka till...

Lösningen ser ut så här:
I FOR NEXT delen som loopar igenom alla uppdrag ligger denna koden:

'Bygga en kommaseparerad sträng med de sammanslagna uppdragsnumrena 
sTaskJoined = sTaskJoined & sTaskNr & ", "

Denna strängen använder jag sedan eftter loopen för att kontrollera om de olika uppdragen i strängen är lika eller olika.

	'Skapa kommaseparerad sträng med uppdragsnummer, samt ta bort det sista kommat.
	if len(sTaskJoined) > 2 then sTaskJoined = left(sTaskJoined, len(sTaskJoined)-2)
	
	dim arr
	arr = split(replace(sTaskJoined, " ", ""), ",")

	blnDifferentTaskNr = False
	
	if ubound(arr) > 0 then
	  for i = 1 to ubound(arr)
		if arr(0) <> arr(i) then
		  blnDifferentTaskNr = True
		  exit for
		end if
	  next
	end if

värdet på blnDifferentTaskNr kan jag sedan använda vidare i min kod...

Det här var ett sätt att göra det på... Har någon synpunkter eller ideer lyssnar jag gärna

Mvh
henrik

Medlem sedan dec. 20025 483 inlägg
#8

Då kan vi förenkla en aning:

sTaskJoined = sTaskJoined & sTaskNr & "," 

	'Skapa kommaseparerad sträng med uppdragsnummer, samt ta bort det sista kommat.
	if len(sTaskJoined) > 2 then sTaskJoined = left(sTaskJoined, len(sTaskJoined)-2)

	dim arr
	arr = split(sTaskJoined, ",")

	[b]blnDifferentTaskNr = False[/b]
	
	if ubound(arr) > 0 then
	  for i = 1 to ubound(arr)
		if arr(0) <> arr(i) then
		  blnDifferentTaskNr = True
		  exit for
		end if
	  next
	end if

	'använd blnDifferentTaskNr

:)

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