webForumDet fria alternativet

Läsa in data från en textfil till en db mha asp

ASP

4 svar · 405 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej!
Denna fråga vänder sig mest till @nders eftersom det är han som hjälpt mig från början....

Har följande kod som läser in data från en textfil och lägger den i en accessdatabas.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>

<%
Response.write("<div id=""myMess"">Vänta, skriver till databasen...</div>")
Response.Flush()

dim objConn, objRS, strLine, iEnumber, strCategory, strUnit, curPrice, strSQL, strCheckEnumber

set objFSO = Server.CreateObject("Scripting.Filesystemobject")
set objFile = objFSO.OpenTextFile (Server.MapPath("\prislistor\storelpris.txt"))

Set objConn = Server.CreateObject("ADODB.Connection")
ObjConn.Open "DSN=Prislista"

while not objFile.atendofstream

    strLine = objFile.ReadLine
    strCheckEnumber = Replace(Trim(Mid(strLine, 1, 1)), "'", "''")

   if strCheckEnumber = "0" then
   
    iEnumber = Replace(Trim(Mid(strLine, 2, 7)), "'", "''")
   Else  
    iEnumber = Replace(Trim(Mid(strLine, 1, 8)), "'", "''")
   End if

    strArticlename = Replace(Trim(Mid(strLine, 9, 30)), "'", "''")
    strCategoryStorel = Replace(Trim(Mid(strLine, 42, 4)), "'", "''")
    strUnit = Trim(Mid(strLine, 39, 3))
    curPriceStorel = Trim(Mid(strLine, 46, 7))

    ' Först kör vi en update om artikeln redan finns.
    strSQL = "UPDATE tblPriceList SET articleCategoryStorel = '" & strCategoryStorel & "', articlePriceStorel =  " & curPriceStorel & " WHERE eNumber = '" & iEnumber  & "'"

    objConn.Execute strSQL, lngRA, 128

    if lngRA = 0 then

         ' Ny artikel, gör insert.
         strSQL = "INSERT INTO tblPriceList (eNumber, articleName, articleCategoryStorel, articleUnit, articlePriceStorel) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strCategoryStorel & "', '" & strUnit & "', " & curPriceStorel & ")"
         objConn.Execute strSQL, , 128
    end if

wend

objFile.close
set objFile = nothing
set objFSO = nothing
objConn.Close
Set objConn = Nothing

Response.write("<script>document.getElementById(""myMess"").innerHTML=""Prislistan har lagrats i databasen! "";</script>")
%>
</head>

<body>

</body>
</html>

Det är många artiklar så det tar ca 2 timmar att läsa in allt! Innan inläsningen finns det ca 60 000 artiklar i databasen. Efter ca 100 000. Då har befintliga artiklar uppdaterats och nya lagts till.

Har ändrat timeouten på webservern så det är inga problem. Har också lagt in en funktion som ska visa meddelandet "vänta, skriver till databasen..."

Problemet är att efter en stund kommer följande meddelande:

Det går inte att hitta server eller ett DNS-fel har uppstått
Internet Explorer

Alltså samma felmeddelande som när man skriver fel webadress!

Inläsningen pågår dock fortfarande och avslutas när alla artiklar är inlästa!!!

Varför blir det så här??

Mvh

Medlem sedan juni 200032 967 inlägg
#2

Konstigt. Jag undrar om det kan vara webbläsaren som når någon sorts timeout. Du kan ju prova att flusha ut något till webbläsaren varje 100 poster du har behandlat, för att se om du kan hålla den vid liv.

Mvh

Medlem sedan jan. 20013 582 inlägg
#3

Hej!
Som vanligt låter ju allt självklart när du säger det "flusha ut" Hmmm...

Ok, det vore ju smidigt att se ett räkneverk som visar antalet skrivna poster till databasen så man vet att det händer något. Hur gör man det?

Sen, vore det bra att kunna avsluta operationen med en knapp "avbryt" eller liknande...
Hur gör man det?

Mvh

Medlem sedan juni 200032 967 inlägg
#4

devotion skrev:

Ok, det vore ju smidigt att se ett räkneverk som visar antalet skrivna poster till databasen så man vet att det händer något. Hur gör man det?

Något sånt här kanske:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>

<%
Response.write("<div id=""myMess"">Vänta, skriver till databasen...</div>")
Response.write("<div id=""progress""></div>")
Response.Flush()

dim objConn, objRS, strLine, iEnumber, strCategory, strUnit, curPrice, strSQL, strCheckEnumber, intCounter

intCounter = 0
set objFSO = Server.CreateObject("Scripting.Filesystemobject")
set objFile = objFSO.OpenTextFile (Server.MapPath("\prislistor\storelpris.txt"))

Set objConn = Server.CreateObject("ADODB.Connection")
ObjConn.Open "DSN=Prislista"

while not objFile.atendofstream
    intCounter = intCounter +1
    if intCounter mod 100 = 0 then
        Response.write ("<script>document.getElementById(""progress"").innerHTML=""" & intCounter & """;</script>")
        Response.flush
    end if
    strLine = objFile.ReadLine
    strCheckEnumber = Replace(Trim(Mid(strLine, 1, 1)), "'", "''")

   if strCheckEnumber = "0" then
   
    iEnumber = Replace(Trim(Mid(strLine, 2, 7)), "'", "''")
   Else  
    iEnumber = Replace(Trim(Mid(strLine, 1, 8)), "'", "''")
   End if

    strArticlename = Replace(Trim(Mid(strLine, 9, 30)), "'", "''")
    strCategoryStorel = Replace(Trim(Mid(strLine, 42, 4)), "'", "''")
    strUnit = Trim(Mid(strLine, 39, 3))
    curPriceStorel = Trim(Mid(strLine, 46, 7))

    ' Först kör vi en update om artikeln redan finns.
    strSQL = "UPDATE tblPriceList SET articleCategoryStorel = '" & strCategoryStorel & "', articlePriceStorel =  " & curPriceStorel & " WHERE eNumber = '" & iEnumber  & "'"

    objConn.Execute strSQL, lngRA, 128

    if lngRA = 0 then

         ' Ny artikel, gör insert.
         strSQL = "INSERT INTO tblPriceList (eNumber, articleName, articleCategoryStorel, articleUnit, articlePriceStorel) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strCategoryStorel & "', '" & strUnit & "', " & curPriceStorel & ")"
         objConn.Execute strSQL, , 128
    end if

wend

objFile.close
set objFile = nothing
set objFSO = nothing
objConn.Close
Set objConn = Nothing

Response.write("<script>document.getElementById(""myMess"").innerHTML=""Prislistan har lagrats i databasen! "";</script>")
%>
</head>

<body>

</body>
</html>

Din andra fråga kan jag inte besvara, dessvärre. Du får nog vänta på att koden körs klart, eller stoppa webbtjänsten på servern.

mvh

Medlem sedan jan. 20013 582 inlägg
#5

Tack! :)
Räkneverket fungerar utmärkt!!!

Mvh

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)