webForumDet fria alternativet

Dela upp ett fält till två, eller nått...

ASP

19 svar · 454 visningar · startad av His Divine Shadow

Medlem sedan sep. 20004 079 inlägg
Frågan#1

Har ett fält med förnamn och efternamn men jag behöver dela upp det till två fält, ett för förnamnet och ett för efternamnet, hur gör jag det?

Tycker det måste vara möjligt att göra nån kod som tar alla ord efter det första och flyttar det till ett annat fält.

Medlem sedan dec. 20025 871 inlägg
#2

Tyvärr känner jag inte till om det finns något inom SQL som gör att man kan göra det du beskriver. Det finns nog troligtvis inte.

Du får hämta post för post och ändra det. Huruvida du delar upp namnen beror på hur du vill göra det. Du kan använda Split() eller någon kombination med InStr() med Left() eller Right().

Medlem sedan nov. 20017 144 inlägg
#3

Lägg till en kolumn "fornamn" och en "efternamn" och som princip:

sql="Select namn,id from tabell"
'öppna databas och loopa ut
Do while not RS.EOF
str = RS("namn")
id = RS("id")
mySplit = split(str," ")
Response.Write "Uppdaterar: "& str &"<br>"
Conn.execute("UPDATE tabell set fornamn='"& mySplit(0) &"',efternamn='"& mySplit(1) &"') where id = " & id),,128
RS.movenext
loop
'Stäng databas
RS.Close

Du kan kanske lägga till on error resume next om det är så att något namn skulle saknas i tabellen.

Medlem sedan dec. 20003 887 inlägg
#4

Om du använder Access kan du förmodligen göra på följande sätt

UPDATE tabell SET fornamn = Left(namn, InStr(namn, ' '), efternamn = Mid(namn, InStr(namn, ' ') + 1)
Medlem sedan sep. 20004 079 inlägg
#5

Här är koden jag använder, den kör igenom praktiskt taget alla poster men inga namn ändras alls:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=E:\inetpub\wwwroot\Spas\main\avance.mdb;"
SQL = "SELECT * FROM Avance"
Set RS = Conn.Execute(SQL)
'öppna databas och loopa ut
Do while not RS.EOF
str = RS("namn")
id = RS("nr")
mySplit = split(str," ")
Response.Write "Uppdaterar: "& str &"<br>"
on error resume next
Conn.execute "UPDATE tabell SET fornamn = Left(namn, InStr(namn, ' '), efternamn = Mid(namn, InStr(namn, ' ') + 1)"
RS.movenext
loop
'Stäng databas
RS.Close
%>
Medlem sedan dec. 20025 871 inlägg
#6

Nu blandar du ihop två koder. :) Ersätt:

Conn.execute "UPDATE tabell SET fornamn = Left(namn, InStr(namn, ' '), efternamn = Mid(namn, InStr(namn, ' ') + 1)"

Med:

Conn.execute("UPDATE tabell set fornamn='"& mySplit(0) &"',efternamn='"& mySplit(1) &"') where id = " & id),,128
Medlem sedan sep. 20004 079 inlägg
#7

Jo jag har prövat båda faktiskt, och jag bytte ut "tabell" mot det riktiga namnet, samma sak, sidan körs igenom och det ser ok ut, öppnar tabellen i access och inget har ändrats, mysko mysko...

Medlem sedan dec. 20003 887 inlägg
#8

Det jag tänkte med min SQL-sats var att den kan du köra direkt i Access, men det går givetvis att göra med en funktion också.

strSql = "UPDATE Avance SET fornamn = Left(namn, InStr(namn, ' '), efternamn = Mid(namn, InStr(namn, ' ') + 1)"

Conn.Execute strSql, lngUpdates

Response.Write lngUpdates & " st. poster uppdaterades."
Medlem sedan sep. 20004 079 inlägg
#9

Hej vänta, det finns tre ( tecken men fyra ) tecken, ett för mycket eller?

Jo, det är det, och tar man bort error resume next så får jag:
Extra ) in query expression ''EFTERNAMN)'.

Medlem sedan sep. 20004 079 inlägg
#10

Engine^ skrev:

Det jag tänkte med min SQL-sats var att den kan du köra direkt i Access

Jo som en fråga, men det låter mig inte spar koden, klistrade bara in den såhär:
UPDATE Avance SET fornamn = Left(namn, InStr(namn, ' '), efternamn = Mid(namn, InStr(namn, ' ') + 1)

Men det säger "missing ),], or Item in query expression" osv.

edit:
Detta säger det när jag gjorde det som en funktion:
"Missing ), ], or Item in query expression 'Left(namn, InStr(namn, ' '), efternamn = Mid(namn, InStr(namn, ' ') + 1)'. "

Samma sak som i access

Medlem sedan dec. 20025 871 inlägg
#11

Såg inte det själv. ;) Ersätt:

Conn.execute("UPDATE tabell set fornamn='"& mySplit(0) &"',efternamn='"& mySplit(1) &"') where id = " & id),,128

Med:

Conn.execute("UPDATE tabell set fornamn='"& mySplit(0) &"',efternamn='"& mySplit(1) &"' where id = " & id),,128
Medlem sedan sep. 20004 079 inlägg
#12

LeonL skrev:

Såg inte det själv. ;) Ersätt:

Conn.execute("UPDATE tabell set fornamn='"& mySplit(0) &"',efternamn='"& mySplit(1) &"') where id = " & id),,128

Med:

Conn.execute("UPDATE tabell set fornamn='"& mySplit(0) &"',efternamn='"& mySplit(1) &"' where id = " & id),,128

Jo jag prövade detta också men då säger det "No value given for one or more required parameters"

Medlem sedan dec. 20025 871 inlägg
#13

Skriv tillbaka "On Error Resume Next".

Medlem sedan sep. 20004 079 inlägg
#14

Då kör det igenom alla poster på sidan men i tabellen händer ingenting.

Medlem sedan dec. 20025 871 inlägg
#15

Innehåller ID något värde? Skriv ut SQL-strängen för att kolla om allt ligger rätt till.

Medlem sedan sep. 20004 079 inlägg
#16

Jodå alla id strängar har värden, kan man använda response.write för att set hur UPDATE strängen ser ut?

Medlem sedan nov. 20017 144 inlägg
#17

visst:

Response.Write "UPDATE tabell set fornamn='"& mySplit(0) &"',efternamn='"& mySplit(1) &"' where id = " & id
Medlem sedan sep. 20004 079 inlägg
#18

Joo, det såg ju ok ut, ex:
"UPDATE avance set fornamn='XXXXX',efternamn='XXXX' where id = 4 "

Förstår inte vad som är fel...

Medlem sedan dec. 20003 887 inlägg
#19

Jag som var lite klantig med paranteserna...

strSql = "UPDATE Avance SET fornamn = Left(namn, InStr(namn, ' ')[b])[/b], efternamn = Mid(namn, InStr(namn, ' ') + 1)"
Medlem sedan sep. 20004 079 inlägg
#20

Tackar för all hjälp, funkar fint nu :)

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)