Permalänk
Medlem

Kontrollera så att användaren IUSR_Ditt_datornamn har skrivrättigheter till den katalog där du har databasen.

Visa signatur
Permalänk
Medlem

Nu fungerar det :), hade tydligen missat att ställa in rättigheterna där, utan bara i IIS. Men nu kommer det nästa roliga felmedelande .).
Sen så har jag laggt in en primärnyckel i databasen sist som en räknare kan det strula till något?

Rad 30 "RecordSet.Fields.Item(i) = varde"

Feltyp:
ADODB.Fields (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
/skv/indata2.asp, line 30

Visa signatur

mAngAn_

Permalänk
Medlem

Funderade lite på den raden med kan det vara så att det inte funkar att göra så. Har dock för mig att jag gjort det tidigare. Kan det vara så att RecordSet.Fields.Item inte startar på 0 som for loopen gör?

Testa

RecordSet.Fields.Item(i+1) = varde

Visa signatur
Permalänk
Medlem

Då fick jag det här felmedelandet. Låter ju som om det blev lite mer rätt i alla fall.

Feltyp:
Provider (0x80020005)
Det gick inte att hitta parametern.
/skv/indata2.asp, line 30

For i = 0 to uBound(bort)
Är det inte den här funktionen som tar bort första raden? Men nu när jag kör med readfile.skipline behövs den? Ifall att det kan vara den som strular till det på något sätt.

Visa signatur

mAngAn_

Permalänk
Medlem

Nä den variabeln borde inte heta bort utan kanske arrInfo eller nått liknande men hur som helst är det inte den som det är fel på. Kan inte du maila dina filer till mig så jag får testa lite?

Visa signatur
Permalänk
Medlem

Det kan jag göra om du ger men en adress att skicka till.

Edit: extermin8 du har mail.

Visa signatur

mAngAn_

Permalänk
Medlem

Kolla PM hann inte skicka det bara innan telefonen ringde.

Edit: Ah tänkte ju fel så här ska det vara

RecordSet.Open addera, Connect, 0, 3 RecordSet.AddNew Dim i, radslut, varde radslut = 0 'Nu finns första raden med men om du sätter i = 32 borde den försvinna For i = 0 to uBound(bort) 'Bort med dubbelfnutts varde = replace(bort(i), """", "") RecordSet.Fields.item(radslut) = varde 'Kontrollera om det är dags att byta rad if radslut = 30 then 'Det är det! Uppdatera senaste Record och skapa nytt. radslut = 0 RecordSet.Update RecordSet.AddNew Else 'Om inte plussa på radslut variabeln radslut = radslut +1 End if Next RecordSet.Close Connect.Close

Visa signatur
Permalänk
Medlem

Nu bråkas det om "RecordSet.Close". Drygt att det ska bråka så mycket.

Feltyp:
ADODB.Recordset (0x800A0C93)
Åtgärden är inte tillåten i det här sammanhanget.
/skv/indata2.asp, line 45

Visa signatur

mAngAn_

Permalänk
Medlem

Testa att slänga in en RecordSet.Update innnan du kör close så den uppdaterar den sista posten med innan den stängs

Visa signatur
Permalänk
Medlem

Tjoho nu fungerar det, skummt att jag lyckades missa Recordset.update, men nu kommer vi till nästa problem, första värdet Reg.nr läggs bara in på ett fåtal poster i databasen. Det beror väl på att Reg.nr börjar med ""regnr";" det finns inget ; i början på det värdet.

Tips på hur man kan lösa det?

Edit:
Såg precis att den lägger in 777 rader istället för 259 rader som det är i skv text filen.

Edit:
Nu fungerar det som det ska helt plöstligt, med antalet rader som läggs till.

Edit:
Såg nu att den bara tar med Reg.nr på första raden.

Visa signatur

mAngAn_

Permalänk
Medlem

Har konverterat min fil till en .vbs-fil så jag slipper köra via IIS och så här ser den ut nu (borde gå att köra direkt som asp om man slänger in <% %> och ändrar på sökvägen till databasen)

dim filesys, readfile, content, arrInfo set filesys = CreateObject("Scripting.FileSystemObject") set readfile = filesys.OpenTextFile("lager2.txt", 1, false) readfile.Skipline content = readfile.ReadAll readfile.close 'Ny rad för att fixa att det inte är ett ; på slutet av varje rad content = replace(content, vbcrlf, ";") arrInfo = split(content, ";") dim addera Set Connect = CreateObject("ADODB.Connection") connect.provider = "Microsoft.jet.oledb.4.0" connect.Open "data source=lager.mdb" Set RecordSet = CreateObject("ADODB.Recordset") Addera = "SELECT * FROM tblBil" RecordSet.Open addera, Connect, 3, 3 recordset.addnew Dim i, radslut, varde radslut = 0 'Nu finns första raden med men om du sätter i = 32 borde den försvinna For i = 0 to uBound(arrInfo) 'Bort med dubbelfnutts och skriv inte ut de två sista posterna i skvfilen varde = replace(arrInfo(i), """", "") if radslut =< 30 then 'msgbox "uppdaterar: " & radslut & " " & varde RecordSet.Fields.item(radslut) = varde else 'msgbox "uppdaterar INTE!: " & radslut & " " & varde end if 'Kontrollera om det är dags att byta rad if radslut = 31 then 'Det är det! Skriv ut en radbrytning och nollställ radslut. radslut = 0 RecordSet.Update 'Lägg till nytt record om det finns mera värden i filen if i <> uBound(arrInfo)-1 then RecordSet.AddNew end if Else 'Om inte plussa på radslut variabeln radslut = radslut +1 End if Next Recordset.Update RecordSet.Close Connect.Close

Visa signatur
Permalänk
Medlem

Det där fungerade ju kalas bra, bara att jag fick ändra sökvägarna så att scriptet hittade filerna. Satan va stabil du är på asp/vb.

Nu borde det vara den enkla biten kvar, att göra frågor så jag får ut den infon som ska visas, tack så mycket.

Edit:
Hur gör jag för att lägga in en sökväg till skv txt filen som ser ut så här t.ex \mapp\skvfil.txt eller bara filnamnet, istället för att ha med hela sökvägen. Har testat lite med att göra som databas kopplingne med server.mappath men jag får det inte att fungera.

set filesys = CreateObject("Scripting.FileSystemObject")
set readfile = filesys.OpenTextFile("C:\Inetpub\wwwroot\skv\lager2.txt", 1, false)

readfile.Skipline
content = readfile.ReadAll
readfile.close
'Ny rad för att fixa att det inte är ett ; på slutet av varje rad
content = replace(content, vbcrlf, ";")
arrInfo = split(content, ";")

dim addera
Set Connect = CreateObject("ADODB.Connection")
connect.provider = "Microsoft.jet.oledb.4.0"
connect.Open "data source=" & server.mapPath("lager.mdb")

Visa signatur

mAngAn_

Permalänk
Medlem

set readfile = filesys.OpenTextFile(Server.MapPath("lager2.txt"), 1, false)

Ska fungera om den ligger i samma katalog som asp-filen.

Visa signatur
Permalänk
Medlem

Fungerade perfekt det, måste ha missat någon ( eller " eller något när jag testade det :).

Tack så hemskt mycket för all hjälp i alla fall, nu ska jag förhoppningsvis klara resten själv.

Visa signatur

mAngAn_

Permalänk
Medlem

NP annars är det bara att skrika till igen.

Visa signatur
Permalänk
Medlem

Nu har det gått åt skogen igen, fast med en annan sak, jag har ett asp script som hämtar dom rader där bilarna har stått i lager längre än 120, 180, 360 dagar.
Scriptet fungerar perfekt på den gamla databasen men nu när jag gjort om det så att fälten passar nya databasen så strular det ur ordentligt.
Jag har gjort om koden så mycket så nu vet jag inte hur den såg ut från början :).
Men här är i alla fall det felmedelande som kommer fram nu, har gått igenom en hel drös andra men nu fastnar det här. Det fungerar i alla fall med den gamla databasen, men inte med den nya.

Feltyp:
ADODB.Connection (0x800A0E78)
Åtgärden är inte tillåten när objektet är stängt.
/beg/visa.asp, line 51

Koden:

<html>
<body>

<!-- #include virtual="/beg/adovbs.inc" -->

<%
DIM dat , dat2 , dat3
dat = DateAdd("d", -120, date)
dat2 = DateAdd("d", -180, date)
dat3 = DateAdd("d", -360, date)

%>
<%

Set Connect = CreateObject("ADODB.Connection")
connect.provider = "Microsoft.jet.oledb.4.0"
connect.Open "data source=" & server.mapPath("lager.mdb")
Set RecSet = CreateObject("ADODB.Connection")

If Request.QueryString("datum")= "d120" OR Request.QueryString("datum")= "d180" OR Request.QueryString("datum")= "d360" Then

If Request.QueryString("datum") = "d120" Then
d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltStartdatumlager, fltInbytssalj FROM tblBil WHERE tblBil.fltStartdatumlager BETWEEN #" & dat & "# AND '2001-01-01' ORDER BY fltStartdatumlager ASC"

ElseIf Request.QueryString("datum") = "d180" Then
d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltStartdatumlager, fltInbytssalj FROM tblBil WHERE tblBil.fltStartdatumlager BETWEEN #" & dat2 & "# AND '2001-01-01' ORDER BY fltStartdatumlager ASC"

ElseIf Request.QueryString("datum") = "d360" Then
d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltStartdatumlager, fltInbytssalj FROM tblBil WHERE tblBil.fltStartdatumlager BETWEEN #" & dat3 & "# AND '2001-01-01' ORDER BY fltStartdatumlager ASC"

End if

RecSet.Open d, Connect, adOpenStatic, adLockOptimistic
%>
<table border="0" width="auto">

<tr>
<td colspan=6><center><b>Uppdaterad <%=Date%></b></center>
</tr>

<tr bgcolor="yellow">
<td><B>Reg. nr</B></td>
<td><B>Årsm</B></td>
<td><B>Vagnspecifikation</B></td>
<td><B>Färg</B></td>
<td><B>Inbyt. Säljare</B></td>
<td><B>Indatum</B></td>
</tr>

<% Do Until RecSet.EOF %>
<tr>
<td><%= RecSet("fltRegnr")%></td>
<td><%= RecSet("fltArsmodell")%></td>
<td><%= RecSet("fltVagnspec")%></td>
<td><%= RecSet("fltFarg")%></td>
<td><%= RecSet("fltInbytssalj")%></td>
<td><%= RecSet("fltStartdatumlager")%></td>
</tr>

<%
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close

End if
%>

</tr>
</table>
</body>
</html>

Visa signatur

mAngAn_

Permalänk
Medlem

Den koden kan inte fungera med någon databas

Byt

Set RecSet = CreateObject("ADODB.Connection")

mot

Set RecSet = CreateObject("ADODB.RecordSet")

Så ska du se att det går bättre.

Visa signatur
Permalänk
Medlem

Hehe skummt att den fungerade med gamla databasen :). IIS servern kanske ballade ur och visade en gammal sida där det fungerade :). Får testa det i morgon.

Edit:
Urk nu förstår jag ingenting, samma kod fungerar perfekt med den gamla databasen, bara man ändrar sökvägen och fält namnen. När jag kör den här koden med den nya databasen får jag det här felet. Kan det vara att nya databasen är gjord i access xp? Den gamla är gjord i Access 2000

Feltyp:
Microsoft JET Database Engine (0x80040E10)
Det har inte angetts något värde för en eller flera nödvändiga parametrar.
/skv/klar/begdagar.asp, line 34

<html>
<body>

<!-- #include virtual="skv/klar/adovbs.inc" -->

<%
DIM dat , dat2 , dat3
dat = DateAdd("d", -120, date)
dat2 = DateAdd("d", -180, date)
dat3 = DateAdd("d", -360, date)
%>
<%

Set Connect = Server.CreateObject("ADODB.Connection")
connect.provider = "Microsoft.jet.oledb.4.0"
connect.Open "data source=" & server.mapPath("lager.mdb")

If Request.QueryString("datum")= "d120" OR Request.QueryString("datum")= "d180" OR Request.QueryString("datum")= "d360" Then

Set RecSet = Server.CreateObject("ADODB.Recordset")

If Request.QueryString("datum") = "d120" Then
d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltStartdatumlager, fltInbytssalj FROM tblBil WHERE tblBil.fltStartdatumlager BETWEEN #" & dat & "# AND '2001-01-01' ORDER BY fltStartdatumlager ASC"

ElseIf Request.QueryString("datum") = "d180" Then
d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltStartdatumlager, fltInbytssalj FROM tblBil WHERE tblBil.fltStartdatumlager BETWEEN #" & dat2 & "# AND '2001-01-01' ORDER BY fltStartdatumlager ASC"

ElseIf Request.QueryString("datum") = "d360" Then
d = "SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltStartdatumlager, fltInbytssalj FROM tblBil WHERE tblBil.fltStartdatumlager BETWEEN #" & dat3 & "# AND '2001-01-01' ORDER BY fltStartdatumlager ASC"

End if

RecSet.Open d, Connect, adOpenStatic, adLockOptimistic
%>
<table border="0" width="auto">

<tr>
<td colspan=6><center><b>Uppdaterad <%=Date%></b></center>
</tr>

<tr bgcolor="yellow">
<td><B>Reg. nr</B></td>
<td><B>Årsm</B></td>
<td><B>Vagnspecifikation</B></td>
<td><B>Färg</B></td>
<td><B>Inbyt. Säljare</B></td>
<td><B>Indatum</B></td>
</tr>

<% Do Until RecSet.EOF %>
<tr>
<td><%= RecSet("fltRegnr")%></td>
<td><%= RecSet("fltArsmodell")%></td>
<td><%= RecSet("fltVagnspec")%></td>
<td><%= RecSet("fltFarg")%></td>
<td><%= RecSet("fltInbytssalj")%></td>
<td><%= RecSet("fltStartdatumlager")%></td>
</tr>

<% RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
End if
%>

</tr>
</table>
</body>
</html>

Visa signatur

mAngAn_

Permalänk
Medlem

Gör så här för att kontrollera att inte variabeln d är tom det verkar vara det mest troliga. Som du har gjort nu med en if sats gör att det finns möjlighet att sqlsträngen blir tom och det ska du se till att den aldrig blir. Vill du inte att något ska hända om man inte har en querystring måste du även kontrollera om sqlsträngen är tom och är den det får du se till att strunta i att köra recset.open

Response.Write "Debug: " & d Response.End RecSet.Open d, Connect, adOpenStatic, adLockOptimistic

Visa signatur
Permalänk
Medlem

Då får jag upp det här oavsett, om jag kör begdatum.asp?datum=d120 eller dom andra.

Debug: SELECT fltRegnr, fltArsmodell, fltVagnspec, fltFarg, fltStartdatumlager, fltInbytssalj FROM tblBil WHERE tblBil.fltStartdatumlager BETWEEN #2004-10-24# AND '2001-01-01' ORDER BY fltStartdatumlager ASC

Edit: Fältnamnen stämmer också med databasen, så där bråkar det inte heller.

Visa signatur

mAngAn_

Permalänk
Medlem

Varför har du # runt första datumet och ' runt det andra? Access använder # för att "identifiera" datum så ändra till det.

Visa signatur
Permalänk
Medlem

Bra fråga, iofs så står datumet som text i databasen, men jag får samma fel oavsett om man kör med # eller ', nu är det ändrat till samma i alla fall.

Visa signatur

mAngAn_

Permalänk
Medlem

Står det som text ska det vara ' istället för # men då är ju frågan om du kan köra BETWEEN och få fram korrekt information. Jag skulle nog ha bytt i databasen och kört med # som är det korrekta sättet att göra det hela på.

Visa signatur
Permalänk
Medlem

Nu är det ändrat till datum, men det blir samma fel ändå. Kan det vara att det är något fel i databasen eller ligger det i asp koden?

Feltyp:
Microsoft JET Database Engine (0x80040E10)
Det har inte angetts något värde för en eller flera nödvändiga parametrar.
/skv/klar/begdagar.asp, line 35

I gamla databasen ligger datumet också som text och där fungerar det att köra between, men det är kanske så mycket fulkod i mitt script så det fungerar på något sätt ändå

Visa signatur

mAngAn_

Permalänk
Medlem

Ok testa följande:

1.) direkt innan recset.open skriv d= "SELECT * FROM tblBil"

Funkar det så är det sqlsträngen som det är något skumt med.

2.) Ändra till RecSet.Open d, Connect, 3, 3

Funkar det så är det sökvägen till adovbs.inc som är fel

Funkar inget så har jag missat något

Visa signatur
Permalänk
Medlem

Okej nu såg jag vad som var fel, hur klantigt som helst, jag hade glömt en bokstav i fltInbytessalj så det stog fltInbytssalj, klantig som jag är missade jag det när jag kollade så namnen stämmde på fälten :).

Sen adovbs.inc är jag inte kompis med sökvägen till den brukar strula hela tiden, i det här scriptet måste jag ange två mappar i sökvägen t.ex skv/klar/filen för att det ska fungera. Men i ett annat på ett annat ställe räcker det med en mapp.

Edit:
Nu total vägrar scriptet köra som det ska, ska man inte kunna skriva in "1, 4" eller något liknande istället för att använda adovbs.inc. Så att det blir skriv/läs rättigheter.

Edit:

Vad har jag lyckats ställa till med, det enda jag gjorde var att byta ut namnet på databasen, och nu fungerar ingenting.

Feltyp:
Provider (0x80020005)
Det gick inte att hitta parametern.
/skv/klar/indata.asp, line 33

<!-- #include virtual="/skv/klar/adovbs.inc" -->
<%
dim filesys, readfile, content, arrInfo
set filesys = CreateObject("Scripting.FileSystemObject")
set readfile = filesys.OpenTextFile(Server.MapPath("lager2.txt"), 1, false)
readfile.Skipline
content = readfile.ReadAll
readfile.close
'Ny rad för att fixa att det inte är ett ; på slutet av varje rad
content = replace(content, vbcrlf, ";")
arrInfo = split(content, ";")

dim addera
Set Connect = CreateObject("ADODB.Connection")
connect.provider = "Microsoft.jet.oledb.4.0"
connect.Open "data source=" & server.mapPath("lager.mdb")
Set RecordSet = CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM tblBil"

RecordSet.Open addera, Connect, 3, 3
Recordset.addnew

Dim i, radslut, varde
radslut = 0
'Nu finns första raden med men om du sätter i = 32 borde den försvinna
For i = 0 to uBound(arrInfo)
'Bort med dubbelfnutts och skriv inte ut de två sista posterna i skvfilen
varde = replace(arrInfo(i), """", "")

if radslut =< 30 then
'msgbox "uppdaterar: " & radslut & " " & varde
RecordSet.Fields.item(radslut) = varde
else
'msgbox "uppdaterar INTE!: " & radslut & " " & varde
end if

'Kontrollera om det är dags att byta rad
if radslut = 31 then
'Det är det! Skriv ut en radbrytning och nollställ radslut.
radslut = 0
RecordSet.Update

'Lägg till nytt record om det finns mera värden i filen
if i <> uBound(arrInfo)-1 then
RecordSet.AddNew
end if
Else
'Om inte plussa på radslut variabeln
radslut = radslut +1
End if
Next

Recordset.Update
RecordSet.Close
Connect.Close
%>

Visa signatur

mAngAn_

Permalänk
Medlem

För att kolla vilka siffror som motsvarar vad kan du öppna adovbs.inc i notepad och leta t ex efter const adLockOptimistic = siffra den siffra som står efter = kan du använda. Själv använder jag aldrig adovbs längre.

Visa signatur
Permalänk
Medlem

Var lägger man in dom siffrorna sen då? t.ex om man vill kunna skriva till den här databasen.
connect.Open "data source=" & server.mapPath("lager.mdb")

Du råkar inte se något fel med koden ovanför?
Förstår inte varför det inte fungerar, det är ju samma kod som fungerade innan.

Visa signatur

mAngAn_

Permalänk
Medlem

Siffrorna lägger du in här

RecSet.Open d, Connect, adOpenStatic, adLockOptimistic

du byter alltså ut adOpenStatic och adLockOptimistic mot siffror.

Har du testat att starta om datorn så du inte har nått obejkt som ligger kvar koppplat mot den gamla databasen?

Visa signatur
Permalänk
Medlem

Jo jag har startat om datorn, men jag testar det igen, man vet ju aldrig.

Edit:
Fortfarande samma fel.
Klagar på.
RecordSet.Fields.item(radslut) = varde

Edit:
Jag satte in <% OPTION EXPLICIT %> i början på koden för ett desperat försök att felsöka, men då klagade scriptet bara på några odefinierade variabler och efter jag fixade till det så stannar den på RecordSet.Fields.item(radslut) = varde.
Kör jag utan den raden så fungerar ju scriptet som det ska bara att den inte lägger in någon information i databasen bara tomma fält, men den lägger in rätt antal poster osv :).
Felet känns oroväckande bekant, ska testa kopiera lite kod en bit upp i tråden och se om jag får till det.
Misstänker att allt började strula ur när jag skulle använda en annan databas som ser likadan ut och när jag bytte ut skv filen. Och databasen har skriv och läs rättigheter.

Så här ser koden ut nu, och det borde ju fungera som det ska.
Gah hata saker som inte fungerar när det fungerade med samma kod innan.

Kod:

<%@ Language="VBScript" %>
<% OPTION EXPLICIT %>
<%
dim filesys, readfile, content, arrInfo
set filesys = CreateObject("Scripting.FileSystemObject")
set readfile = filesys.OpenTextFile(Server.MapPath("lager.txt"), 1, false)
readfile.Skipline
content = readfile.ReadAll
readfile.close
'Ny rad för att fixa att det inte är ett ; på slutet av varje rad
content = replace(content, vbcrlf, ";")
arrInfo = split(content, ";")

dim addera, Connect, Recordset
Set Connect = CreateObject("ADODB.Connection")
connect.provider = "Microsoft.jet.oledb.4.0"
connect.Open "data source=" & server.mapPath("bilar.mdb")
Set RecordSet = CreateObject("ADODB.Recordset")
Addera = "SELECT * FROM tblBil"

RecordSet.Open addera, Connect, 3, 3
Recordset.addnew
%>

<%
Dim i, radslut, varde
radslut = 0
'Nu finns första raden med men om du sätter i = 32 borde den försvinna
For i = 0 to uBound(arrInfo)
'Bort med dubbelfnutts och skriv inte ut de två sista posterna i skvfilen
varde = replace(arrInfo(i), """", "")

if radslut =< 30 then
'msgbox "uppdaterar: " & radslut & " " & varde
RecordSet.Fields.item(radslut) = varde
else
'msgbox "uppdaterar INTE!: " & radslut & " " & varde
end if

'Kontrollera om det är dags att byta rad
if radslut = 31 then
'Det är det! Skriv ut en radbrytning och nollställ radslut.
radslut = 0
RecordSet.Update

'Lägg till nytt record om det finns mera värden i filen
if i <> uBound(arrInfo)-1 then
RecordSet.AddNew
end if
Else
'Om inte plussa på radslut variabeln
radslut = radslut +1
End if
Next
%>
<%
Recordset.Update
RecordSet.Close
Connect.Close
%>

Visa signatur

mAngAn_