|
| Replace funktionen. Fra : Kasper Lund |
Dato : 07-07-08 10:08 |
|
Hej med jer.
Vi har et vbscript der henter data fra en SQL database og sætter det ind
i en mysql database.
En af de ting der hentes er et windows username som skrives
DOMAIN\username. Problemet er denne backslash, som ikke kommer med i
mysql databasen da den skal escapes.
Det kan man gøre med replace.
Jeg har prøvet med replace("DOAMIN\username","\","\\") hvilket virker fint.
Men, i scriptet står der ikke DOMAIN\username men UserName(i) som er en
variabel i en for løkke.
replace(UserName(i),"\","\\") resulterer i "Invalid use of NULL: 'replace'"
replace("UserName(i)","\","\\") resulterer i at der står UserName(i) i
alle felterne.
Så hvordan bruger jeg replace på en variabel?
På forhånd tak for hjælpen.
/Kasper
| |
Gert Krabsen (07-07-2008)
| Kommentar Fra : Gert Krabsen |
Dato : 07-07-08 10:23 |
|
Kasper Lund skrev:
> Hej med jer.
>
> Vi har et vbscript der henter data fra en SQL database og sætter det ind
> i en mysql database.
>
> En af de ting der hentes er et windows username som skrives
> DOMAIN\username. Problemet er denne backslash, som ikke kommer med i
> mysql databasen da den skal escapes.
>
> Det kan man gøre med replace.
>
> Jeg har prøvet med replace("DOAMIN\username","\","\\") hvilket virker fint.
>
> Men, i scriptet står der ikke DOMAIN\username men UserName(i) som er en
> variabel i en for løkke.
>
> replace(UserName(i),"\","\\") resulterer i "Invalid use of NULL: 'replace'"
>
> replace("UserName(i)","\","\\") resulterer i at der står UserName(i) i
> alle felterne.
>
> Så hvordan bruger jeg replace på en variabel?
Uden at have prøvet lige netop replace har jeg andre steder løst
lignende problemer ved at tage det i to skridt:
$userNavn = UserName(i);
replace($userNavn,"\","\\")
| |
Kasper Lund (07-07-2008)
| Kommentar Fra : Kasper Lund |
Dato : 07-07-08 10:30 |
|
Gert Krabsen skrev:
> Kasper Lund skrev:
>> Hej med jer.
>>
>> Vi har et vbscript der henter data fra en SQL database og sætter det
>> ind i en mysql database.
>>
>> En af de ting der hentes er et windows username som skrives
>> DOMAIN\username. Problemet er denne backslash, som ikke kommer med i
>> mysql databasen da den skal escapes.
>>
>> Det kan man gøre med replace.
>>
>> Jeg har prøvet med replace("DOAMIN\username","\","\\") hvilket virker
>> fint.
>>
>> Men, i scriptet står der ikke DOMAIN\username men UserName(i) som er
>> en variabel i en for løkke.
>>
>> replace(UserName(i),"\","\\") resulterer i "Invalid use of NULL:
>> 'replace'"
>>
>> replace("UserName(i)","\","\\") resulterer i at der står UserName(i) i
>> alle felterne.
>>
>> Så hvordan bruger jeg replace på en variabel?
>
>
> Uden at have prøvet lige netop replace har jeg andre steder løst
> lignende problemer ved at tage det i to skridt:
>
> $userNavn = UserName(i);
> replace($userNavn,"\","\\")
Det minder mig meget om PHP syntax, kan man lave variabler med $ i vbs?
Den brokker sig over dollartegnet?
| |
Kasper Lund (07-07-2008)
| Kommentar Fra : Kasper Lund |
Dato : 07-07-08 10:34 |
|
Kasper Lund skrev:
>>
>> $userNavn = UserName(i);
>> replace($userNavn,"\","\\")
>
> Det minder mig meget om PHP syntax, kan man lave variabler med $ i vbs?
>
> Den brokker sig over dollartegnet?
Jeg har prøvet med:
Dim UName
UName = UserName(i)
og
replace(UName,"\","\\")
Det giver mig:
"Invalid use of NULL: 'replace'"
| |
Gert Krabsen (07-07-2008)
| Kommentar Fra : Gert Krabsen |
Dato : 07-07-08 10:45 |
|
Kasper Lund skrev:
> Kasper Lund skrev:
>
>>>
>>> $userNavn = UserName(i);
>>> replace($userNavn,"\","\\")
>>
>> Det minder mig meget om PHP syntax, kan man lave variabler med $ i vbs?
>>
>> Den brokker sig over dollartegnet?
>
Det var ganske rigtigt php syntax, men du har jo heldigvis opdaget det.
> Jeg har prøvet med:
>
> Dim UName
> UName = UserName(i)
>
> og
>
> replace(UName,"\","\\")
>
> Det giver mig:
>
> "Invalid use of NULL: 'replace'"
Er du _helt_ sikker på, at UserName(i) har en værdi?
if not isnull(UName) then
replace(UName,"\","\\")
else
msgbox "tomt felt"
endif
| |
Kasper Lund (07-07-2008)
| Kommentar Fra : Kasper Lund |
Dato : 07-07-08 10:58 |
|
Gert Krabsen skrev:
> Kasper Lund skrev:
>> Kasper Lund skrev:
>>
>>>>
>>>> $userNavn = UserName(i);
>>>> replace($userNavn,"\","\\")
>>>
>>> Det minder mig meget om PHP syntax, kan man lave variabler med $ i vbs?
>>>
>>> Den brokker sig over dollartegnet?
>>
> Det var ganske rigtigt php syntax, men du har jo heldigvis opdaget det.
>
>
>
>> Jeg har prøvet med:
>>
>> Dim UName
>> UName = UserName(i)
>>
>> og
>>
>> replace(UName,"\","\\")
>>
>> Det giver mig:
>>
>> "Invalid use of NULL: 'replace'"
>
> Er du _helt_ sikker på, at UserName(i) har en værdi?
>
> if not isnull(UName) then
> replace(UName,"\","\\")
> else
> msgbox "tomt felt"
> endif
His jeg kører scriptet uden replace funktionen kommer de rigtige værdier
ind (undtagen backslash). Så jeg er ret sikker på at den har en værdi.
| |
Gert Krabsen (07-07-2008)
| Kommentar Fra : Gert Krabsen |
Dato : 07-07-08 11:46 |
|
Kasper Lund skrev:
> Gert Krabsen skrev:
>> Kasper Lund skrev:
>>> Kasper Lund skrev:
>>>
>>>>>
>>>>> $userNavn = UserName(i);
>>>>> replace($userNavn,"\","\\")
>>>>
>>>> Det minder mig meget om PHP syntax, kan man lave variabler med $ i vbs?
>>>>
>>>> Den brokker sig over dollartegnet?
>>>
>> Det var ganske rigtigt php syntax, men du har jo heldigvis opdaget det.
>>
>>
>>
>>> Jeg har prøvet med:
>>>
>>> Dim UName
>>> UName = UserName(i)
>>>
>>> og
>>>
>>> replace(UName,"\","\\")
>>>
>>> Det giver mig:
>>>
>>> "Invalid use of NULL: 'replace'"
>>
>> Er du _helt_ sikker på, at UserName(i) har en værdi?
>>
>> if not isnull(UName) then
>> replace(UName,"\","\\")
>> else
>> msgbox "tomt felt"
>> endif
>
> His jeg kører scriptet uden replace funktionen kommer de rigtige værdier
> ind (undtagen backslash). Så jeg er ret sikker på at den har en værdi.
Og du er naturligvis også sikker på, at UName får tildelt en værdi,
selvom det ikke lyder sådan.
Så må det vel blive den tunge vej:
Dim UName as string
Dim deletal as integer
deletal=InStr(1,Username(i),"\", vbTextCompare)
UName = left(Username(i),deletal-1) & "\\" & right(Username(i),
len(Username(i))-deletal)
med forbehold for, at der skal justeres lidt i strenglængder
ved brug af +1 hhv. -1
| |
Kasper Lund (07-07-2008)
| Kommentar Fra : Kasper Lund |
Dato : 07-07-08 12:44 |
|
Hej igen.
Det virkede fint med dit forslag om at teste om den var Tom.
Problemet var at Endif skulle hedde End IF (Det er første gang jeg
arbejder med vbs, så den havde jeg ikke lige gennemskuet).
Alt virker fint nu - mange tak for hjælpen.
| |
|
|