webForumDet fria alternativet
Logga in / Bli medlem

SQl problem

ASP

24 svar · 1 673 visningar · startad av Thompa__85

Medlem sedan aug. 2002600 inlägg
Trådstart#1

Tjosan!

Tänker uppdatera i databasen..
har denna SQL sats:

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath ("databas/dagbok.mdb")

sql = "insert into anv Where id="& request.QueryString("id") (sida, sidinfo, siddatum) values(' minsida.asp?id='"&request.querystring("id")&"' ', ' Spanar in minsida ', '"& Now() &"')"
connect.execute(sql)

Men har försökt fram å tillbaka.. men får de inte att funka :(
Får detta felmeddelande:

Microsoft VBScript compilation error '800a0401' 

Expected end of statement 

/adde/star/2/minsida2.asp, line 44 

sql = "insert into anv Where id="& request.QueryString("id") (sida, sidinfo, siddatum) values(' minsida.asp?id='"&request.querystring("id")&"' ', ' Spanar in minsida ', '"& Now() &"')"
---------------------------------------------------------------------------------------^

Någon som vet vad jag gör för fel?
Vore jätte glad om ni kunde hjälpa mig!!

// Adde

Medlem sedan mars 20032 667 inlägg
#2

Hej,

Du kan inte ha where-klausulen i en insert, dessutom inte på den plats den befinner sig på nu.

Vad vill du göra, skicka in data i databasen eller uppdatera den samma?

Medlem sedan sep. 20026 425 inlägg
#3

Testa med UPDATE i stället:

UPDATE anv SET sida = 'minsida.asp?id=" & Request.Querystring("id") & "', sidinfo = 'Spanar in min sida', Siddatum = Now() WHERE id=" & Request.Querystring("id")
Medlem sedan dec. 20003 887 inlägg
#4

Du kan inte använda ett WHERE-uttryck i en INSERT INTO-fråga, eftersom det inte kan existera ett resultat innan du stoppat in posten. Det verkar som om du vill göra en update

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Provider = "Microsoft.Jet.OleDb.4.0"

strSQL = "UPDATE anv SET sida = 'minsida.asp?id=" & Request.QueryString("id") & ", " & _
  "sidinfo = 'Spanar in minsida', " & _
  "siddatum = '" & Now() & "' " & _
  "WHERE id = " & Request.QueryString("id")

objConn.Open "Data Source=" & Server.MapPath("databas/dagbok.mdb")
objConn.Execute strSQL, lngRA, 128

If lngRA = 0 Then
  strSQL = "INSERT INTO anv (sida, sidinfo, siddatum) VALUES (" & _
    "'minsida.asp?id="& Request.QueryString("id") & "', " & _
    "sidinfo = 'Spanar in minsida', " & _
    "siddatum = '" & Now() & "')"
  objConn.Execute strSQL, , 128
End If

objConn.Close
Set objConn = Nothing
Medlem sedan aug. 2002600 inlägg
#5

Engine^ skrev:

Du kan inte använda ett WHERE-uttryck i en INSERT INTO-fråga, eftersom det inte kan existera ett resultat innan du stoppat in posten. Det verkar som om du vill göra en update

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Provider = "Microsoft.Jet.OleDb.4.0"

strSQL = "UPDATE anv SET sida = 'minsida.asp?id=" & Request.QueryString("id") & ", " & _
  "sidinfo = 'Spanar in minsida', " & _
  "siddatum = '" & Now() & "' " & _
  "WHERE id = " & Request.QueryString("id")

objConn.Open "Data Source=" & Server.MapPath("databas/dagbok.mdb")
objConn.Execute strSQL, lngRA, 128

If lngRA = 0 Then
  strSQL = "INSERT INTO anv (sida, sidinfo, siddatum) VALUES (" & _
    "'minsida.asp?id="& Request.QueryString("id") & "', " & _
    "sidinfo = 'Spanar in minsida', " & _
    "siddatum = '" & Now() & "')"
  objConn.Execute strSQL, , 128
End If

objConn.Close
Set objConn = Nothing

Får det att funka halft..
får detta felmeddelande:

Microsoft JET Database Engine error '80040e14' 

Syntax error (missing operator) in query expression ''minsida.asp?id={33BD0255-46BC-4E2C-82EC-20E8DE9DDFF6}, sidinfo = 'Spanar in minsida', siddatum = '2003-11-14 14:13:53' WHERE id = {33BD0255-46BC-4E2C-82EC-20E8DE9DDFF6}'. 

/adde/star/2/minsida2.asp, line 50

och rad 50 är denna kod:

objConn.Execute strSQL, lngRA, 128

Varför?

Medlem sedan feb. 200112 078 inlägg
#6

Näe. :l :)

Medlem sedan mars 20025 907 inlägg
#7

Prova

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Provider = "Microsoft.Jet.OleDb.4.0"

strSQL = "UPDATE anv SET sida = 'minsida.asp?id=" & Request.QueryString("id") & "', " & _
  "sidinfo = 'Spanar in minsida', " & _
  "siddatum = '" & Now() & "' " & _
  "WHERE id = '" & Request.QueryString("id") &"'"

objConn.Open "Data Source=" & Server.MapPath("databas/dagbok.mdb")
objConn.Execute strSQL, lngRA, 128

If lngRA = 0 Then
  strSQL = "INSERT INTO anv (sida, sidinfo, siddatum) VALUES (" & _
    "'minsida.asp?id="& Request.QueryString("id") & "', " & _
    "'Spanar in minsida', " & _
    "'" & Now() & "')"
  objConn.Execute strSQL, , 128
End If

objConn.Close
Set objConn = Nothing

Om du använder access får du byta ut ' till # runt dina datum

Medlem sedan nov. 20017 144 inlägg
#8

Vad är "lngRA"?

Medlem sedan aug. 2002600 inlägg
#9

Peeer skrev:

Prova

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Provider = "Microsoft.Jet.OleDb.4.0"

strSQL = "UPDATE anv SET sida = 'minsida.asp?id=" & Request.QueryString("id") & "', " & _
  "sidinfo = 'Spanar in minsida', " & _
  "siddatum = '" & Now() & "' " & _
  "WHERE id = '" & Request.QueryString("id") &"'"

objConn.Open "Data Source=" & Server.MapPath("databas/dagbok.mdb")
objConn.Execute strSQL, lngRA, 128

If lngRA = 0 Then
  strSQL = "INSERT INTO anv (sida, sidinfo, siddatum) VALUES (" & _
    "'minsida.asp?id="& Request.QueryString("id") & "', " & _
    "'Spanar in minsida', " & _
    "'" & Now() & "')"
  objConn.Execute strSQL, , 128
End If

objConn.Close
Set objConn = Nothing

Om du använder access får du byta ut ' till # runt dina datum

Får detta felmeddelande:

Microsoft JET Database Engine error '80040e57' 

The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data. 

/adde/star/2/minsida2.asp, line 50

rad 50:
objConn.Execute strSQL, lngRA, 128

Medlem sedan juni 200032 967 inlägg
#10

Har du kollat så texten du försöker lägga in verkligen får plats i fälten? Det verkar ju onekligen som om något av textfälten är för litet?

Medlem sedan aug. 2002600 inlägg
#11

men vilket fält är det den klagar på?

Medlem sedan juni 200032 967 inlägg
#12

Något av dem. Spelar det någon roll? Det är bara att gå igenom din tabell och tänka till.

Skriv ut den färdiga SQL-frågan så ser du ju hur mycket data du försöker stoppa in i vilket fält.

Medlem sedan dec. 20003 887 inlägg
#13

Jesper T skrev:

Vad är "lngRA"?

En personlig förkortning på lngRecordsAffected. Man kan skicka den som argument till Connection.Execute för att få veta hur många records som påverkades av frågan.

Thompa_85: Storleken på textfältet i vilket du sparar id:t måste vara minst 38.

Peeer skrev:

Om du använder access får du byta ut ' till # runt dina datum

Nja, om du använder Access tidigare än 2002 ;)

Medlem sedan aug. 2002600 inlägg
#14

Ändrade ett fält från "Text" till PM, Vilket verkar funka bra! :)
Vad är skillnaden mellan TEXT och PM?

Medlem sedan mars 20032 667 inlägg
#15

Text klarar 255 tecken, PM klarar 64000 tecken om jag inte minns fel.

Medlem sedan aug. 2002600 inlägg
#16

oj de va stor skillnad!
Ett till mini problem!

strSQL = "UPDATE anv SET sida = 'minsida.asp?id=" & Request.QueryString("id") & "', " & _
  "sidinfo = 'Spanar in minsida', " & _
  "siddatum = '" & Now() & "' " & _
  "WHERE id = '" & Request.QueryString("id") &"'"

Där det står "Spanar in minsida".. vill jag att de ska va:
Spanar in <%=rs("anv")%>.. men det funkar inte.. :(

Medlem sedan dec. 20003 887 inlägg
#17
strSQL = "UPDATE anv SET sida = 'minsida.asp?id=" & Request.QueryString("id") & "', " & _
  "sidinfo = '" & rs("anv") & "', " & _
  "siddatum = '" & Now() & "' " & _
  "WHERE id = '" & Request.QueryString("id") &"'"

Jag skulle vilja säga att det inte är praktiskt att ha id-fältet som PM. Det tar onödig plats och gör datahanteringen betydligt långsammare. Använd Text istället och sätt storleken till så mycket som behövs (din id-sträng var 38 tecken om jag räknade rätt, så sätt storleken till exempelvis 40).

Medlem sedan aug. 2002600 inlägg
#18

hur ändrar jag storleken?

Medlem sedan aug. 2002600 inlägg
#19

hmm det är inställt på Textstorlek: 50

Medlem sedan dec. 20003 887 inlägg
#20

I Access.
Öppna designen för tabellen.
Markera raden Id.
I nedre delen av fönstret är det ett antal rader med olika inställningar.
(Förutsatt att Id nu är av typen Text) Ändra Field Size/Fältstorlek till 40. Default är den förvisso 50 tror jag.

Nu kan du även passa på att kontrollera dina andra fälts värden. Förmodligen lär du behöva göra fältet sida större. Öka till 75 eller 100, så borde det räcka.

266 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)