webForumDet fria alternativet

Script för att uppdatera databas

ASP

38 svar · 882 visningar · startad av devotion · sida 2 av 2

Frågan, av devotion

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.coun

Läs frågan i sin helhet →
Medlem sedan jan. 20013 582 inlägg
#21

det finns faktiskt sådana här också:

8554926

Sedan förstår jag inte riktigt vad du menar:

I din kod skall detta fält uppdateras med dagens datum - eller hur?

Det jag vill göra är att söka av fält <artName> om där finns ett sjusiffrigt nummer, finns det det vill jag kopiera det till fältet <artNr>. Jag vill göra det på alla rader i tabellen!

Mvh
Henrik

Medlem sedan jan. 20013 582 inlägg
#22

Då hittas 126 rader som alla innehåller ett sjusiffrigt nummer

Edit/

Fast den hittar även:

Mat. ordnr. 26111340
Mat ordnr 26144985
MOD VINKL 2x8 KAT5E UTP TREND 510329300
MODULARJACK 1X8 KAT5E UTP 306510005

:(

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#23

devotion skrev:

Sedan förstår jag inte riktigt vad du menar

Du sätter modified = "dagens datum", bl.a. (jag var litet otydlig).

devotion skrev:

Det jag vill göra är att söka av fält <artName> om där finns ett sjusiffrigt nummer, finns det det vill jag kopiera det till fältet <artNr>. Jag vill göra det på alla rader i tabellen!

Just det!

sSQL = "update tblMaterial"                &_
       "   set modified = "& today &""     &_
       "     , artNr = case when artName like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "                                 then substring(artName,patindex('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',artName),7)" &_
       "                    when artName like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'" &_
       "                                 then substring(artName,patindex('%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]%',artName),7)" &_
       "               end" &_
       " where artName like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "    or artName like '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'"
Medlem sedan dec. 20025 483 inlägg
#24

devotion skrev:

Då hittas 126 rader som alla innehåller ett sjusiffrigt nummer

Edit/

Fast den hittar även:

Mat. ordnr. 26111340
Mat ordnr 26144985
MOD VINKL 2x8 KAT5E UTP TREND 510329300
MODULARJACK 1X8 KAT5E UTP 306510005

:(

Mvh
Henrik

Ja, det är ju meningen ;)

Medlem sedan jan. 20013 582 inlägg
#25

nää... Det får endast finnas 7 siffror... inte 8 inte 9 inte 10 bara 7!

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#26

Sorry, jag läste litet för snabbt :r

Vi måste givetvis ta samtliga fall i beaktning:

sSQL = "update tblMaterial"                &_
       "   set modified = "& today &""     &_
       "     , artNr = case when artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "                                 then substring(artName,patindex('%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',artName),7)" &_
       "                    when artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'" &_
       "                                 then substring(artName,patindex('%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%',artName),7)" &_
       "               end" &_
       " where artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "    or artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'" &_
       [red]"    or artName like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "    or artName like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'"[/red]

Lägg sedan till motsvarande fall i case-satsen.

Medlem sedan jan. 20013 582 inlägg
#27

Peter S skrev:

Lägg sedan till motsvarande fall i case-satsen.

:r
Vad menar du?

Medlem sedan dec. 20025 483 inlägg
#28

Se hur jag gjort i case-satsen med två av fallen i where-satsen. Lägg till de sista två (rödmarkerat).

Medlem sedan jan. 20013 582 inlägg
#29

Så här:

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

today = date()
sSQL = "update tblMaterial"                &_
       "   set modified = "& today &""     &_
       "     , artNr = case when artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "                                 then substring(artName,patindex('%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',artName),7)" &_
       "                    when artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'" &_
       "                                 then substring(artName,patindex('%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%',artName),7)" &_
	   "					when artName like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "                                 then substring(artName,patindex('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%',artName),7)" &_
	   "					when artName like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'" &_
       "                                 then substring(artName,patindex('[0-9][0-9][0-9][0-9][0-9][0-9][0-9]',artName),7)" &_
       "               end" &_
       " where artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "    or artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'" &_
       "    or artName like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "    or artName like '[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
%>
Medlem sedan dec. 20025 483 inlägg
#30

Japp! (y)

Medlem sedan jan. 20013 582 inlägg
#31

ok.. vågar jag köra den innann jag går och lägger mig.... ;)

Medlem sedan dec. 20025 483 inlägg
#32

Sannolikt inte. Mardrömsrisken finns ju. Jag röstar för Mr. Blund.

Medlem sedan jan. 20013 582 inlägg
#33

Hmmm

E3233084 Kontaktor 65A
LC1D65P7

blev:

E323308

Skulle bli:

3233084

Sen blev datumen

1905-05-23 00:00:00

Kan man inte använda

getDate()

//Henrik

Medlem sedan dec. 20025 483 inlägg
#34

Förresten, du kan nog skippa case-satsen:

sSQL = "update tblMaterial"                &_
       "   set modified = "& today &""     &_
       "     , artNr = substring(artName,patindex('%[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][^0-9]%'" &_
       "    or artName like '%[^0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'" &_
       "    or artName like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9]%'" &_
       "    or artName like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'"
Medlem sedan dec. 20025 483 inlägg
#35

Kör på mitt senaste förslag, jag ser nu att det tidigare innehåller några fel i patindex() (dags för mig att lägga ned nu...).

Medlem sedan jan. 20013 582 inlägg
#36

okidoki

Medlem sedan jan. 20013 582 inlägg
#37

Det blir ändå inte rätt...

Det blir fel datum och ibland bara 6 siffror ibland står det ett E med..

Medlem sedan dec. 20025 483 inlägg
#38

Ang. datum: 1) sätt apostrofer kring dem, 2) använder du getdate() direkt i SQL-satsen (som i ditt tidiga inlägg) finns möjligheten att olika datum används i de två frågorna. Detta kan undvikas genom att först spara undan det aktuella datumet i en variabel.

Använder du mitt senaste förslag? Kan du visa ett exempel där det blir fel?

Medlem sedan jan. 20013 582 inlägg
#39

Hej! :)

Löste det faktiskt med detta:

<%
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 = cInt(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
		sSQL = "INSERT INTO tblUpdateMaterial ([Id], ArtName) VALUES (" & iId & ", '" & sArticleName & "')"		
		objConn.Execute sSQL,,128
	end if
	objRS.Movenext 
Loop
		
objRS.Close
Set objRS = Nothing	

objConn.Close
Set objConn = Nothing

Response.write "Klart!"
%>

Fungerade finfint!

Tack för hjälpen Peter S :)

Mvh
Henrik

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