---
title: "Script för att uppdatera databas"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/154223-script-för-att-uppdatera-databas"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "devotion"
published: "2006-11-26T13:49:35.000Z"
updated: "2006-11-27T13:57:57.000Z"
replies: 38
views: 887
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/154223-script-för-att-uppdatera-databas"
---

# Script för att uppdatera databas

_Sida 1 av 2._

## #1 — devotion, 2006-11-26T13:49Z

Hej!

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.

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/154223

## #2 — @nders, 2006-11-26T13:56Z

Till att börja med så borde du nog lägga med WHERE i din UPDATE. =)

Permalänk: https://www.webforum.nu/p/1902057

## #3 — devotion, 2006-11-26T14:04Z

det kan ju vara bra...

Så här?

```
<%
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
	
%>
```

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1902060

## #4 — devotion, 2006-11-26T20:50Z

Ingen?

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1902145

## #5 — Peter S, 2006-11-26T21:00Z

Jag skulle vilja göra någonting sådant här:

```
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = Application("sConn")
objConn.Open

today = date()
sSQL = "update tblMaterial"                &_
       "   set modified = "& today &""     &_
       "     , artNr = substring(artName,patindex('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',artName),7)" &_
       " where artName like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'"

objConn.execute sSQL,,128

'get and log rows not having modified = @today
sSQL = "select <fields of interest>"     &_
       "  from tblMaterial"              &_
       " where modified <> " & today

Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open sSQL, objConn, 3, 1

Do until ObjRS.EOF
	' do logging
	objRS.Movenext 
Loop
		
objRS.Close
Set objRS = Nothing	

objConn.Close
Set objConn = Nothing
```

Permalänk: https://www.webforum.nu/p/1902148

## #6 — devotion, 2006-11-26T21:07Z

Jaha.... Jag som trodde jag för en gång skull kommit på något bra.. ;)  Och så kommer du med en helt annan lösning.. :D  

Okej!

Kan du förklara lite närmare.. :) 

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1902153

## #7 — Peter S, 2006-11-26T21:16Z

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?

Permalänk: https://www.webforum.nu/p/1902159

## #8 — devotion, 2006-11-26T21:21Z

> **Peter S skrev:**
>
> 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?

Det verkar absolut vettigt!

Till en textfil kanske?

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1902161

## #9 — Peter S, 2006-11-26T21:24Z

Jag tänkte mer en [CREATE FUNCTION](http://msdn2.microsoft.com/en-us/library/ms186755.aspx).

Permalänk: https://www.webforum.nu/p/1902163

## #10 — devotion, 2006-11-26T21:29Z

Aha.. Ok :)  

Men, vågar jag köra din kod... ;)

Permalänk: https://www.webforum.nu/p/1902166

## #11 — Peter S, 2006-11-26T21:31Z

Ja, på en kopia av originaltabellen  ;)

Permalänk: https://www.webforum.nu/p/1902167

## #12 — devotion, 2006-11-26T21:32Z

Hehe.. ;) 

Jag ska säkerhetskopiera allt....

Hur skapar jag en logtextfil då?

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1902168

## #13 — Peter S, 2006-11-26T21:38Z

Jag är litet osäker på patindex(); vad får du för resultat av

```
select patindex('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%','1234567') from tblMaterial
```

?

Loggfilen är ju en vanlig textfil, så [OpenTextFile()](http://www.devguru.com/technologies/vbscript/quickref/filesystemobject_opentextfile.html) kan vara värd att inleda med.

Permalänk: https://www.webforum.nu/p/1902170

## #14 — devotion, 2006-11-26T21:44Z

7859 rows, där alla är 0 (noll)

tblMaterial innehåller 7859 rows

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1902172

## #15 — Peter S, 2006-11-26T21:54Z

Det var ingen höjdare. Jag antar då att du får 7859 '1'-rader om du skriver '1234567a' istället?

Permalänk: https://www.webforum.nu/p/1902174

## #16 — devotion, 2006-11-26T21:56Z

\*\*Testar\*\*

Permalänk: https://www.webforum.nu/p/1902176

## #17 — devotion, 2006-11-26T21:58Z

Precis så blev det....

Permalänk: https://www.webforum.nu/p/1902177

## #18 — Peter S, 2006-11-26T22:07Z

Det kan fungera ändå: ligger de sju siffrorna i slutet av fältet eller finns det **alltid** något tecken efter dem?

Permalänk: https://www.webforum.nu/p/1902179

## #19 — devotion, 2006-11-26T22:10Z

Några exempel:

> E 7290552 Armatur 2x18w
> 0283230 Oilflex N 5G0,75    6m
> E7290557 3st

Mvh
Henrik

Permalänk: https://www.webforum.nu/p/1902182

## #20 — Peter S, 2006-11-26T22:14Z

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]'
```

Permalänk: https://www.webforum.nu/p/1902184

---

Tråden på webben: https://www.webforum.nu/amne/asp/154223-script-för-att-uppdatera-databas  
Nästa sida: https://www.webforum.nu/amne/asp/154223-script-för-att-uppdatera-databas/page2.md
