webForumDet fria alternativet

Variabel får fel värde

.NET

6 svar · 606 visningar · startad av devotion

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

Hej! :)

Jag har följande kod:

'*********************************
' main()
'*********************************

sub main()
	dim sSQL
	dim AppUI
	dim sUsers, sUser
	dim sNewUser, sSignature
	dim lNextUserId, lGroupId, lRoleId
	
	Set AppUI = GetObject(,"UppdragNU.ApplicationUI")
		sUsers=GetUNValues("SELECT [Name] FROM [tblUsers]")
		sUser=AppUI.SelectString("Byt användare", "Välj användare du vill arkivera", sUsers, False)
		Set AppUI=Nothing
	
	'Kontrollera så att sUser inte är tom
	if sUser="" then 
		call MsgBox("Kan inte ändra Användare!", 0, "Fel")
		exit sub
	end if
	
	'Kontrollera så att inte sNewUser inte är tom
	sNewUser=InputNewUser()
	if sNewUser="" then 
		call MsgBox("Kan inte ändra Användare!", 0, "Fel")
		exit sub
	end if
	
	'Flytta användaren till behörighetsgruppen Arkiverad (tillfällig lösning i v3.20)
	sSQL="UPDATE [tblUsers] SET [RoleId] = 10000, [Custom1] = '**Arkiverad**' WHERE [Name] = '" & sUser & "'"
	ExecuteSQL(sSQL)
	msgbox sNewUser
	
	'Sätta variabler
	lNextUserId=GetNextId("tblUsers")
	sSignature=CreateSignature(sNewUser)
	lGroupId=GetUNValue("SELECT [GroupId] FROM [tblUsers] WHERE [Name] = '" & sUser & "'")
	lRoleId=GetUNValue("SELECT [RoleId] FROM [tblUsers] WHERE [Name] = '" & sUser & "'")
	
	msgbox sNewUser
	'Skapa en ny användare
	sSQL= "INSERT INTO [tblUsers] ( [Id], [Modified], [Name], [Sign] , [GroupId], [RoleId])" _
		& " VALUES( " & lNextUserId & ", GETDATE(), '" & sNewUser & "', '" & sSignature & "', " & lGroupId & ", " & lRoleId & " )"
	ExecuteSQL(sSQL)
	
	'sSQL="UPDATE [tblTask] SET [User] 
	
	msgBox "Bytt användare"
	
end sub

function InputNewUser()
	dim s, sCheckUser
	do
		s=InputBox("Skriv in namnet på den nya användaren", "Ny användare")
		if s="" then 
			InputNewUser="" 
			exit function
		end if
		sCheckUser=GETUNValue("SELECT [Name] FROM [tblUsers] WHERE [Name] = '" & s & "'")
		if sCheckUser <> "" then MsgBox("Du har matat in ett användarnamn som redan finns!" & CrLf & "Prova att lägga till en bokstav mellan för och efternamn!")
	loop while sCheckUser <> ""
	InputNewUser = s
end function

function CreateSignature(sName)
	dim re, matches
 
	set re = new regexp
	re.pattern = "\d"
	if not re.test(sName) then
		re.global = true
		re.pattern = "[^ ]+"
		set matches = re.execute(sName)
		if matches.count = 2 then
			sName = ucase(left(matches(0) , 2)) & ucase(left(matches(1), 2))
		end if
	end if
	CreateSignature = sName
end function

Av någon anledning så får variabeln sNewUser samma värde som sSignature dvs namn och signatur blir samma värde, när det skrivs till databasen (INSERT..)

Vad har jag gjort för fel? :)

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#2

Var finns sNewName?

Om det är sNewUser kan det bero på två saker:

  • sNewUser innehåller siffror
  • sNewUser innehåller fler eller färre än två namn
Medlem sedan jan. 20013 582 inlägg
#3

Peter S skrev:

Var finns sNewName?

Om det är sNewUser kan det bero på två saker:

  • sNewUser innehåller siffror
  • sNewUser innehåller fler eller färre än två namn

Hmmm... sNewName fanns bara i mitt huvud... sorry.. ändrat det...

Jag har testat att sätta Henrik Lindell, men det blir HELI...

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#4

Ja, de två första tecknena från för- och efternamn. Det är väl inte lika med "Henrik Lindell"? ;)

Medlem sedan jan. 20013 582 inlägg
#5

Nä, men eftersom jag behöver både signaturen och namnet, så får ju inte namnet förvandlas till signaturen.. :)

sSignature=CreateSignature(sNewUser)

Jag vill ju att sSignatur blir HELI
och
sNewUser behåller Henrik Lindell (som det är ursprungligen...)

Men, man kanske inte kan göra så? :)

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#6

Aha!

function CreateSignature(sName)
	dim re, matches, myName
 
	myName = sName
	set re = new regexp
	re.pattern = "\d"
	if not re.test(myName) then
		re.global = true
		re.pattern = "[^ ]+"
		set matches = re.execute(myName)
		if matches.count = 2 then
			myName= ucase(left(matches(0) , 2)) & ucase(left(matches(1), 2))
		end if
	end if
	CreateSignature = myName
end function
Medlem sedan jan. 20013 582 inlägg
#7

Peter S skrev:

Aha!

function CreateSignature(sName)
	dim re, matches, myName
 
	myName = sName
	set re = new regexp
	re.pattern = "\d"
	if not re.test(myName) then
		re.global = true
		re.pattern = "[^ ]+"
		set matches = re.execute(myName)
		if matches.count = 2 then
			myName= ucase(left(matches(0) , 2)) & ucase(left(matches(1), 2))
		end if
	end if
	CreateSignature = myName
end function

Aha!! :)

Det funkade bättre... :)

Mvh
Henrik

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