webForumDet fria alternativet

textfiler = Subscript out of range: What to do???

ASP

11 svar · 275 visningar · startad av T_Codez

Medlem sedan juli 2001458 inlägg
Frågan#1

Hej igen

Nu har jag följande lilla "Kryp" i koden som jag inte kan tygla...

Först så kollar jag ett tidigare värde om det finns i databasen...

SQL = "SELECT * FROM tblartiklarlager WHERE fltcountrycode = '" & txt_Jvs2 &"'"

Set db = Server.CreateObject("ADODB.Connection")
db.Open "int_hardoxDSN"
Set rs = db.Execute (SQL)

Om det inte vill sig så öppnar jag en textfil med lite bkupvärden. Dessa värden läggs sedan i en array:

Do until rs.BOF = False

Dim text, textfil3, arrRows

Set fso = CreateObject("Scripting.FileSystemObject")
Set textfil3 = fso.OpenTextFile(server.mappath("./") & "\grannar.txt",1, False)
text = textfil3.ReadAll
arrRows = split(text, vbCrLf)
textfil3.close

rs.close 'stänger recset så att en ny fresh kan jobba nedan
db.close 'stänger db så att en ny fresh kan jobba nedan

rakna = rakna + 1 'deklareras och tilldelas värdet tidigare i koden

SQL = "SELECT * FROM tblartiklarlager WHERE fltcountrycode = '" & arrRows(rakna) &"'" rad 126

Set db = Server.CreateObject("ADODB.Connection")
db.Open "int_hardoxDSN"
Set rs = db.Execute (SQL)

If rs.bof = False Then
testa = 1
End If
Loop

Nu kan det faktiskt vara så att det inte ens räcker med mina bkup värden. Det blev jag varse via följande ERROR MESS:

Error Type:
Microsoft VBScript runtime (0x800A0009)
Subscript out of range: '4'
/se/tock.asp, line 126

Som ni förstår så är rad 4 tom. Jag skulle vilja få in en kontroll någonstans för att förhindra detta meddelande. Och istället så kommer det ett message om att "No Records Found", eller någe annat bra.

Har sprungit in i väggen och har inte en susning om hur jag ska lösa detta. Har ni någon ide!?

Tack för uppmärksamheten

/TT

Medlem sedan nov. 20017 144 inlägg
#2

on error resume next
Kanske?!

Medlem sedan juni 200032 967 inlägg
#3

Typ:

if ubound(arrRows) > 0 then
    ' jihoo, här finns grejer
else
    ' nähoo, här finns ju inga grejer :(
end if

----

JesperT skrev:

on error resume next

Nej, är du galen? Det är helt fel sätt att lösa buggar.

Mvh,

Medlem sedan nov. 20017 144 inlägg
#4

Nej, är du galen? Det är helt fel sätt att lösa buggar

*Rinkebysvenska*:Nej, kompis, bara rationell

Medlem sedan juli 2001458 inlägg
#5

Okay... Så är det säkert...

Nu är det bara så att det däringa med Errorbehandling har jag aldrig pulat med. Vart slänger man in en sådan rad i min kod t ex.?

Vart kan man läsa om Error stuff?

Medlem sedan juli 2001458 inlägg
#6

Jädrans va svar det blev under tiden jag skrev :e

Medlem sedan nov. 20017 144 inlägg
#7

Du skall nog "lyda" @nders råd.

Medlem sedan juni 200032 967 inlägg
#8

Om man skall använda sig av on error resume next, jag gör det själv i undantagsfall, så ska man se till att plocka upp felen också.

on error resume next

' kod som eventuellt, av någon anledning, kan skapa fel

' koll om det har blivit fel
If Err.number <> 0  then
    Response.write Err.Number & " - " & Err.Description
    Err.Clear ' nollställer error-objektet för användning senare i kod
End if

' stänger av felhanteringsspecialaren
on error goto 0

Det som är bra med on error resume next är alltså att man kan fånga upp fel, och utföra saker och ting, exempelvis skicka ett mail till webmaster, göra insert i en feltabell, eller vad man nu vill göra.

Mvh,

Medlem sedan juli 2001458 inlägg
#9

"Tjatta aldrig med @nders Styler's" De vet man ju... ;)

Men om jag nu använder mig av

if ubound(arrRows) > 0 then
JiHo JAAAAA
else
Jiho Not
end if

Så är ju det underförutsättning att filen är tom. Och det kan ju vara okay om de är det ibland.

Men för mig kommer de inte vara det... Det är bara att värdena inte finns att hitta i db. Eller är jag helt ute och trampar trehjuling nu? Och inte kunnat baka in koden riktigt bara... :q

sen är ju det så att i textfilen kan det variera mellan 1 till 5 rader...

Medlem sedan juni 200032 967 inlägg
#10

Jag vet inte om det är du eller jag som är ute och simmar på galen cykel, men kan borde det inte gå bra att kontrollera innan du ställer sql-frågan så rakna inte är större än ubound?

if not rakna>ubound(arrRakna) then
    ' jippihoo! ställ sql-frågan!
else
    ' näppeligen! :'(
end if

Mvh,

Medlem sedan juli 2001458 inlägg
#11

Nope

Samma mess:

Error Type:
Microsoft VBScript runtime (0x800A0009)
Subscript out of range: '1'
/se/tock.asp, line 126

Do until rs.BOF = False

Dim text, textfil3, arrRows

Set fso = CreateObject("Scripting.FileSystemObject")
Set textfil3 = fso.OpenTextFile(server.mappath("./") & "\\grannar.txt",1, False)
text = textfil3.ReadAll
arrRows = split(text, vbCrLf)	
textfil3.close

rs.close 'stänger recset så att en ny fresh kan jobba nedan
db.close 'stänger db så att en ny fresh kan jobba nedan

rakna = rakna + 1 'deklareras och tilldelas värdet tidigare i koden

if not rakna \> ubound(arrRows) then

SQL = "SELECT * FROM tblartiklarlager WHERE fltcountrycode = '" & arrRows(rakna) &"'"

Set db = Server.CreateObject("ADODB.Connection")
db.Open "int_hardoxDSN"
Set rs = db.Execute (SQL)

else
Response.Write "No NO" 
end if

If rs.bof = False Then
	testa = 1
End If

Loop

Säkert någe smått som jag missat...

Medlem sedan juni 200032 967 inlägg
#12

Hmm.

Varför loopar du mot BOF och inte EOF?
Varför öppnar du textfilen inne i loopen? Du öppnar ju bara samma fil om och om igen.
Du behöver inte heller använda mer än ett databasobjekt.

Jag förstår inte din kod riktigt, men vore det inte en idé att istället utföra någonting en gång per rad i textfilen?

for i = 0 to ubound(arrRows)
    ' bla
Next

Och du, använd [ kod]-taggar så blir din kod mer lättläst.

Mvh,

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