Har snickrat ihop ett script som skall ha följande funktion:
1. Söka igenom fältet ArtName och se om där finns ett sjusiffrigt nummer
2. Finns det ska detta nummer skrivas in i ArtNr mha en Update
3. Hela tabellen ska loopas igenom
Här kommer koden:
<%
function searchArticle(art)
dim re
set re = new regexp
re.pattern = "(\d{7})(\d*)?"
set m = re.execute(art)
if m.count then
if len(m(0).submatches(1)) < 1 then
searchArticle = m(0).submatches(0)
exit function
end if
end if
searchArticle = ""
end function
' Öppna databasen
' ***************
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = Application("sConn")
objConn.Open
sSQL = "SELECT [Id], [ArtName] FROM tblMaterial"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open sSQL, objConn, 3, 1
Do until ObjRS.EOF
sArticleName = objRS("ArtName")
iId = objRS("Id")
dim s
s = searchArticle(sArticleName)
if len(s) > 0 then
sEnumber = s
sSQL = "UPDATE tblmaterial SET Modified = getdate(), ArtNr = '" & sEnumber & "' Where [Id] = " & iId & ""
objConn.Execute sSQL,, 128
else
' Det finns inget giltigt nummer i fältet! Vad ska man göra här?!?
end if
objRS.Movenext
Loop
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
Innan jag kör detta skulle jag vilja att någon vänlig själ tittar igenom det, så det inte blir total pannkaka av alltihop...
Jag har inte riktigt lyckats klura ut vad som ska hända om man inte får en träff på ett sjusiffrigt nummer på någon rad. Jag skulle vilja logga det på något sätt. Scriptet ska INTE avbrytas utan bara hoppa till nästa rad och där försöka hitta ett sjusiffrigt nummer.
<%
function searchArticle(art)
dim re
set re = new regexp
re.pattern = "(\d{7})(\d*)?"
set m = re.execute(art)
if m.count then
if len(m(0).submatches(1)) < 1 then
searchArticle = m(0).submatches(0)
exit function
end if
end if
searchArticle = ""
end function
' Öppna databasen
' ***************
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = Application("sConn")
objConn.Open
sSQL = "SELECT [Id], [ArtName] FROM tblMaterial"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open sSQL, objConn, 3, 1
Do until ObjRS.EOF
sArticleName = objRS("ArtName")
iId = objRS("Id")
dim s
s = searchArticle(sArticleName)
if len(s) > 0 then
sEnumber = s
sSQL = "UPDATE tblmaterial SET Modified = getdate(), ArtNr = '" & sEnumber & "' Where [Id] = " & iId & ""
objConn.Execute sSQL,, 128
else
' Det finns inget giltigt nummer i fältet! Vad ska man göra här?!?
end if
objRS.Movenext
Loop
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
Tanken är att först uppdatera de rader i tabellen som uppfyller villkoret att ha exakt sju på varandra följande siffror. Pattern matching-stödet i T-SQL verkar inte vara det mest välutvecklade (verifiering önskas), men med patindex() bör denna uppgift gå att lösa. Alternativet tror jag är att skriva en egendefinierad funktion som använder RegExp-objektet (en troligtvis slöare lösning).
De uppdaterade raderna har modified = 'dagens datum', så vi hämtar de andra och loggar dem. Verkar det vettigt?
Alternativet tror jag är att skriva en egendefinierad funktion som använder RegExp-objektet (en troligtvis slöare lösning).
function searchArticle(art)
dim re
set re = new regexp
re.pattern = "(\d{7})(\d*)?"
set m = re.execute(art)
if m.count then
if len(m(0).submatches(1)) < 1 then
searchArticle = m(0).submatches(0)
exit function
end if
end if
searchArticle = ""
end function
Hade denna funktionen funkat?
De uppdaterade raderna har modified = 'dagens datum', så vi hämtar de andra och loggar dem. Verkar det vettigt?
På de fälten fungerar det. Frågan är om det existerar sådana här
...7290557
I din kod skall detta fält uppdateras med dagens datum - eller hur? Problemet är att patindex(), med ovanstående mönster, inte hittar detta, såvida vi kan vara säkra på att det alltid förekommer någonting efter dessa sju siffror.
Kör
select artName from tblMaterial where artName like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e