webForumDet fria alternativet

Loop End Of file

ASP

10 svar · 405 visningar · startad av devotion

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

Hej!
Det är bara jag igen... :r

Jag har följnade kod
Den är felskriven, jag vet!

Men tanken är att den skall kontrollera om Enumber finns i tabellen.
Finns det med ska ingenting hända
Finns det inte med skall en ny rad läggas till

Vet inte hur jag ska använda mig av EOF tillsammans med sql

strSQL = "SELECT eNumber FROM tblArticle2 WHERE eNumber = '" & iEnumber & "'"
objConn.Execute strSQL

If objRS.EOF Then

strSQL = "INSERT INTO tblArticle2 (eNumber, articleName, articleUnit) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strUnit & "')"

End If

Mvh

Medlem sedan juni 200032 967 inlägg
#2

Re: Loop End Of file

devotion skrev:

Den är felskriven, jag vet!

Jag tycker koden ser bra ut, förutom att du glömt att exekvera din INSERT-fråga inne i if-satsen. Det borde alltså fungera om det ser ut så här:

If objRS.EOF Then

strSQL = "INSERT INTO tblArticle2 (eNumber, articleName, articleUnit) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strUnit & "')"
objConn.Execute strSQL,,128

End If
Medlem sedan jan. 20013 582 inlägg
#3

Ooops!

Funkar nu...

Mvh

Medlem sedan jan. 20013 582 inlägg
#4

... får i a f inga felmeddelande.

Men om det finns data i databasen läggs inget nytt till! hmmm...

strSQL = "SELECT eNumber FROM tblArticle2 WHERE eNumber = '" & iEnumber & "'"
objConn.Execute strSQL,,128

If objRS.EOF Then

strSQL = "INSERT INTO tblArticle2 (eNumber, articleName, articleUnit) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strUnit & "')"
objConn.Execute strSQL,,128

End If

Min tanke med koden är:

Kontrollera om eNumber finns i tabellen

om inte; lägg till raden

om den finns; gör ingenting

Funkar dock inte så...

Finns det data i tabellen händer ingenting. Är den tom däremot läggs datat in..

Varför?

Mvh

Medlem sedan apr. 20022 743 inlägg
#5

Nu fattar jag inte...

om inte; lägg till raden

om den finns; gör ingenting

Finns det data i tabellen händer ingenting. Är den tom däremot läggs datat in..

Det läggs nu till när det inte finns, är det inte så du vill ha?

Medlem sedan jan. 20013 582 inlägg
#6

Hej!
Kanske lite otydlig...

När databasen är helt tom och jag startar scriptet läggs alla poster till. Som det ska!!

När jag sedan skall läsa in nästa prislista som innehåller ca 60% gemensamma artiklar och 40% unika, sä läggs ej dessa till utan scriptet bara snurrar igenom prislistan utan att något läggs till.

Tanken är att endast de artiklar som är unika för den leveratöern sklal läggas till

Mvh

Medlem sedan jan. 20013 582 inlägg
#7

Hej!

Hela koden ser ut så här:

<%@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>addSolar</title>

</head>
<body>

<%
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, intCounter

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

Set objConn = Server.CreateObject("ADODB.Connection")
Set objRS = Server.CreateObject("ADODB.Recordset")

ObjConn.Open = "DSN=Prislista"
objRS.Open "tblArticle2", objConn, , , adCMdTable

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

    iEnumber = Replace(Trim(Mid(strLine, 6, 7)), "'", "''")
	strArticlename = Replace(Trim(Mid(strLine, 18, 41)), "'", "''")
	strUnit = Replace(Trim(Lcase(Mid(strLine, 64, 4))), "'", "''")

    strSQL = "SELECT * FROM tblArticle2 WHERE eNumber = '" & iEnumber & "'"
    objConn.Execute strSQL,,128

    If objRS.EOF Then

    strSQL = "INSERT INTO tblArticle2 (eNumber, articleName, articleUnit) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strUnit & "')"
    objConn.Execute strSQL,,128

  End If
 
wend

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

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

</body>
</html>

mvh

Medlem sedan apr. 20022 743 inlägg
#8

Då måste du ha med leverantören i din Where-fråga. Om de har samma namn och du bara kollar namn så är det självklart att de bara läggs till en gång.

Medlem sedan jan. 20013 582 inlägg
#9

?????????????

De fält som finns i tblArticle2 är:

eNumber
articleName
articleUnit

eNumber är unikt (inga dubletter)

Var kommer leverantören ifrån??

Mvh

Medlem sedan juni 200032 967 inlägg
#10

Jag har hittat ett par felaktigheter.

objRS.Open "tblArticle2", objConn, , , adCMdTable

Du öppnar ett recordset som innehåller hela tabellen tblArticle2. Jag förstår inte varför du gör det. Ta bort den raden.

    strSQL = "SELECT * FROM tblArticle2 WHERE eNumber = '" & iEnumber & "'"
    objConn.Execute strSQL,,128

Det du gör är att ställa en SQL-fråga, och be om att inte få tillbaka ett recordset. Så skriver man när man exekverar frågor som inte returnerar ett recordset, exempelvis INSERT, UPDATE och DELETE.

Så här borde koden se ut:

<%@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>addSolar</title>

</head>
<body>

<%
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, intCounter

intCounter = 0
set objFSO = Server.CreateObject("Scripting.Filesystemobject")
set objFile = objFSO.OpenTextFile (Server.MapPath("\prislistor\solarpris.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

    iEnumber = Replace(Trim(Mid(strLine, 6, 7)), "'", "''")
    strArticlename = Replace(Trim(Mid(strLine, 18, 41)), "'", "''")
    strUnit = Replace(Trim(Lcase(Mid(strLine, 64, 4))), "'", "''")

    strSQL = "SELECT * FROM tblArticle2 WHERE eNumber = '" & iEnumber & "'"
    [b]Set objRS = objConn.Execute strSQL[/b]

    If objRS.EOF Then

       strSQL = "INSERT INTO tblArticle2 (eNumber, articleName, articleUnit) VALUES ('" & iEnumber & "', '" & strArticleName & "', '" & strUnit & "')"
       objConn.Execute strSQL,,128

    End If
 
wend

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

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

</body>
</html>

Mvh

Medlem sedan jan. 20013 582 inlägg
#11

Funkar perfekt!!! :)

Tack!

Mvh

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