webForumDet fria alternativet

Inkompatibla typer: '[string: ""]'

ASPur ASP

24 svar · 390 visningar · startad av eddy1

eddy1Medlem sedan aug. 2001969 inlägg
#1

Vad f*n betyder detta, kan inte fördtå felet...

Feltyp:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: '[string: ""]'
/dev/cleardb.asp, line 58

här följer koden, jag vet att det är j*vligt dåligt skrivet, vore kanon om någon kunde komma med förslag på förbättring av sql frågorna speciellt, typ för att räkna och sen radera db måste det ju finnas något bättre sätt....

<%
'=========================================
'hämtar antal ur db
'=========================================
Set con = Server.CreateObject("ADODB.Connection")
Set RS = Server.CreateObject("ADODB.Recordset")
x = Server.MapPath("db.mdb")
Con.open "driver={Microsoft Access Driver (*.mdb)};dbq= " & x & " "

SQL = "select count(nr) AS hits from test"

Rs.open SQL, Con, 2, 2

db = rs("hits")
dbcount = int(rs("hits"))

rs.close
con.close

'=========================================
'tömmer db
'=========================================
Set RS = Server.CreateObject("ADODB.Recordset")
x = Server.MapPath("db.mdb")
Con.open "driver={Microsoft Access Driver (*.mdb)};dbq= " & x & " "

SQL = "Select * from test"

Rs.open SQL, Con, 2, 2
if rs.EOF = false then
rs.delete
End if
rs.close
con.close

'=========================================
'hämtar antal ur txt fil
'=========================================
path = Server.MapPath("nruser.txt")
set fso = CreateObject("Scripting.FileSystemObject")
set infso = fso.OpenTextFile(path, 1, true)

nr = infso.ReadLine
infso.close

'=========================================
'Skriver nytt antal i txt fil
'=========================================
tot = nr + dbcount

path = Server.MapPath("nruser.txt")
set fso = CreateObject("Scripting.FileSystemObject")
set infso = fso.CreateTextFile(path, true)

infso.Writeline tot
infso.close

%>

/mvh

solbulleMedlem sedan mars 20015 287 inlägg
#2

Vilken rad är 58?

Ska det verkligen stå:

set infso = fso.CreateTextFile(path, true)

Ska du inte köra med OpenTextFile där med?

PS. använd kodtaggar.

SebbeMedlem sedan jan. 20032 285 inlägg
#3

Om jag har förstått koden rätt så är det en räknare du ska göra? I så fall kan jag inte fatta varför du ska hålla på och krångla med textfiler? Borde det inte vara lättare att bara göra allt i databasen på en gång?

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
strSQL = "UPDATE test SET hits = hits + 1"
objConn.Execute(strSQL)

strSQL = "SELECT hits FROM test"
Set objRS = objConn.Execute(strSQL)
Response.Write(objRS("hits") & " träffar på sidan.")

objRS.Close : Set objRS = Nothing
objConn.Close : Set objConn = Nothing
%>
eddy1Medlem sedan aug. 2001969 inlägg
#4

så här

Det är så att jag har en tadabas där besökare loggas och räknas men sen har jag en funktion som tömmer hela databasen men jag ska ända hålla koll på det totala antalet besökare..

så när jag tömer databsen ska antalet poster i dabasen läggas ihop med det antal som finns i txt filen för .....

SebbeMedlem sedan jan. 20032 285 inlägg
#5

Men eftersom du ändå tar bort allt i databasen direkt är det ju onödigt att ha det över huvud taget, eller? Om du ändå bara vill ha det i en textfil är det nog bättre att skippa databasen helt.

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(Server.MapPath("nruser.txt"), 1)
intNr = CInt(objTS.ReadLine)
objTS.Close : Set objTS = Nothing

Set objTS = objFSO.OpenTextFile(Server.MapPath("nruser.txt"), 2)
objTS.WriteLine(intNr + 1)
objTS.Close : Set objTS = Nothing
Set objFSO = Nothing

Response.Write(intNr + 1 & " besökare.")
eddy1Medlem sedan aug. 2001969 inlägg
#6

nää

det är så att jag har det för att kunna ta fram lite statistik med jämn mellanrum

SebbeMedlem sedan jan. 20032 285 inlägg
#7

Re: nää

eddy1 skrev:

det är så att jag har det för att kunna ta fram lite statistik med jämn mellanrum

Jo, men hur tänkte du komma åt statistiken när du ändå tar bort innehållet?

eddy1Medlem sedan aug. 2001969 inlägg
#8

ha ha

Jo me ibland skriver man ut stistiken för vissa ändamål och då tar man samtidigt bort den.. för att efter det bara ha efterföljande loggningar

SebbeMedlem sedan jan. 20032 285 inlägg
#9

Re: ha ha

eddy1 skrev:

Jo me ibland skriver man ut stistiken för vissa ändamål och då tar man samtidigt bort den.. för att efter det bara ha efterföljande loggningar

Då tycker jag nog att det skulle vara smartare att kolla med en WHERE-sats vilka poster du vill hämta.

eddy1Medlem sedan aug. 2001969 inlägg
#10

a

okey jag kan hålla med dig att det kanske inte någon bra lösning, för för tillfället har jag tänkt mig, databsen får inte bli för stor heller......

SebbeMedlem sedan jan. 20032 285 inlägg
#11

Men för att återgå till problemet: vilken är rad 58?

eddy1Medlem sedan aug. 2001969 inlägg
#12

men

hur ska koden se ut för på enklast och effektivast sätt räkna antal i databs för att sedan ta bort det???

hur kan jag få det skumma felet jag inte blir av med

eddy1Medlem sedan aug. 2001969 inlägg
#13

oj

'=========================================
'Skriver nytt antal i txt fil
'=========================================
rad 58 tot = nr + dbcount

response.write tot
path = Server.MapPath("nruser.txt")
set fso = CreateObject("Scripting.FileSystemObject")
set infso = fso.CreateTextFile(path, true)
SebbeMedlem sedan jan. 20032 285 inlägg
#14

Nu kanske det går bättre då?

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
strSQL = "SELECT COUNT(*) FROM test"
Set objRS = objConn.Execute(strSQL)
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

If objRS(0) = 0 Then
  Set objTS = objFSO.OpenTextFile(Server.MapPath("nruser.txt"), 1)
  intUsers = CInt(objTS.ReadLine)
  objTS.Close : Set objTS = Nothing
Else
  intUsers = objRS(0)
  strSQL = "DELETE FROM test"
  objConn.Execute(strSQL)
End If

Set objTS = objFSO.OpenTextFile(Server.MapPath("nruser.txt"), 2)
objTS.WriteLine(intUsers + 1)
objTS.Close : Set objTS = Nothing
Set objFSO = Nothing

objRS.Close : Set objRS = Nothing
objConn.Close : Set objConn = Nothing

Response.Write(intUsers + 1 & " besökare.")
%>
Nexus86Medlem sedan okt. 20023 030 inlägg
#15
nr = infso.ReadLine

Känns som om det står något mer på raden än bara siffror. Kör en Response.Write på den.

eddy1Medlem sedan aug. 2001969 inlägg
#16

fattar inte riktigt

vad menas objRS(0) varför en nolla inom paranteserna,?

SebbeMedlem sedan jan. 20032 285 inlägg
#17

Re: fattar inte riktigt

eddy1 skrev:

vad menas objRS(0) varför en nolla inom paranteserna,?

0:an är ordningsnummret i SQL-frågan, alltså COUNT(*) i det här fallet. :)

eddy1Medlem sedan aug. 2001969 inlägg
#18

Set objRS = objConn.Execute(strSQL)

måste man inte stänga objektet objConn innan men exekvera en sql sats eller är jag helt borta..

Else
intUsers = objRS(0)
strSQL = "DELETE FROM test"
objConn.Execute(strSQL)
End If

efter denna sats heter den då objRS(1) eller

SebbeMedlem sedan jan. 20032 285 inlägg
#19

eddy1 skrev:

Set objRS = objConn.Execute(strSQL)

måste man inte stänga objektet objConn innan men exekvera en sql sats eller är jag helt borta..

Else
intUsers = objRS(0)
strSQL = "DELETE FROM test"
objConn.Execute(strSQL)
End If

Nope, det behövs inte. :)

eddy1Medlem sedan aug. 2001969 inlägg
#20

ändrade

lite i koden men då sket det sig med en gång, varför kan jag inte använda EOF

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb")
strSQL = "SELECT COUNT(*) FROM test"
Set objRS = objConn.Execute(strSQL)
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

if not objRS(0).EOF = true then
intUsers = objRS(0)
strSQL = "DELETE FROM test"
objConn.Execute(strSQL)

Set objTS = objFSO.OpenTextFile(Server.MapPath("nruser.txt"), 1)
intUserss = CInt(objTS.ReadLine)
objTS.Close : Set objTS = Nothing

Set objTS = objFSO.OpenTextFile(Server.MapPath("nruser.txt"), 2)
objTS.WriteLine(intUsers + intUsers)
objTS.Close : Set objTS = Nothing
Set objFSO = Nothing

objRS.Close : Set objRS = Nothing
objConn.Close : Set objConn = Nothing
end if

Response.Write(intUsers + intUsers)
%>

134 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)