Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer

Forum > Webbutveckling relaterat > Databaser och SQL

Krångel med SQL sats "And"

Roosweb
Roosweb

Gradering

#16725

Hej igen!

Har lite problem med en SQL-sats:

Set RecSet = Conn.Execute("Select * From svar Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val"))

Sitter och skriver om en sida som tidigare kört på Accessdatabas till MySQL när detta problemet dök upp som jag inte kommer på felet på. Felmeddelandet är följande:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51
Driver][mysqld-5.0.21-log]You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near ''' at line 1

Någon idé om vad det kan vara för tok?

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #16725 | Skapades: 2009-07-19 00:21:05 | Tråden har 12 svar och har lästs 233 gånger.

voigtan
voigtan

Gradering

#16726

Kontrollera att du har båda querystrings, hur ser SQL frågan ut när du skriver ut den? Är det rätt datatyper du försöker mata in?

Det ser i alla fall inte ut som du använder något resarverat ord i din SQL fråga och den ser "korrekt" ut (om fältnamnen finns där osv).

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16726 | Skapades: 2009-07-19 00:28:59

Roosweb
Roosweb

Gradering

#16727

Båda querystringsen har jag och dom innehåller även ett värde, t.ex. 211 och 2 alla datatyper där det är tal är av typen "int(11)" och sen har jag ett fält som innehåller text, den är av datatypen "varchar(350)".

Skriver jag ut allt ser det ut som följer:

Select * From svar Where id= And svarnr=  
Microsoft VBScript runtime error '800a01a8'

Object required: 'Response.Write(...)'

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #16727 | Skapades: 2009-07-19 00:48:42

voigtan
voigtan

Gradering

#16728

Om det är en varchar (du skriver inte vilken det är men jag gissar att det är svarnr, så kall det vara strängar:

Set RecSet = Conn.Execute("Select * From svar Where id=" & Request.QueryString("id") & " And svarnr='" & Request.QueryString("val") & "'")

Du kan inte få ett object requierd på att skriva ut en sträng :P

SQL = "Select * From svar Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val")
Response.Write(sql)
Response.End()
Set RecSet = Conn.Execute(sql)
för en enkel debug på problemet
Citat:
....for the right
syntax to use near '''
Jag börja undra om det ens är rätt SQL fråga som orskar detta problem, för den säger att det är något med ' att göra, vilket du inte ha i din fråga.
Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16728 | Skapades: 2009-07-19 02:32:22

Roosweb
Roosweb

Gradering

#16729

Angående Varchar datatypen så gäller inte den för någon av de nämna alternativen, det finns en sådan i tabellen, varav jag tog upp de, dessa två är Int(11).

Haha, nu blev det lite fel ja, debuggade och fick detta:

Select * From svar Where id= And svarnr=

Helt sjukt att jag inte får något värde ens ju? De finns ju i Querystringen, som för övrigt ser ut som följer:

Default.asp?do=spara&id=313&val=1

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #16729 | Skapades: 2009-07-19 02:52:44

voigtan
voigtan

Gradering

#16730

hur ser formulärpostningen ut? Har du glömt att sätt att do måste vara spara innan du gå in i SQL frågan?

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16730 | Skapades: 2009-07-19 09:25:06

Roosweb
Roosweb

Gradering

#16738

Ett formulär finns inte egentligen utan det är en poll där valet man väljer skickas i en länk som ser ut såhär:

<a href="<%=sidan%>?do=rosta&id=<%=Svar("id")%>&val=<%=Svar("svarnr")%>"><%=Svar("svar")%></a>

När man kommer till "rosta" kollar den om man redan röstat genom att kolla om man har en cookie, har man inte gjort det skickas man vidare dit man får felmeddelandet. Där ser allt ut som följer:

If Request.Querystring("do") = "spara" Then

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={MySQL ODBC 3.51 Driver};Server=****;Db=********;UID=*******;Pwd=********"

Set RecSet = Conn.Execute("Select * From svar Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val"))

Conn.Execute("Update svar Set klick=klick+1 Where id=" & Request.QueryString("id") & " And svarnr=" & Request.QueryString("val"))

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #16738 | Skapades: 2009-07-19 16:54:17

voigtan
voigtan

Gradering

#16739

Fast.. du kollar ju att do är spara, inte rosta ;)

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16739 | Skapades: 2009-07-19 16:57:16

Roosweb
Roosweb

Gradering

#16740

Jag var aningen otydlig där ser jag, när jag kollar om en aktiv cookie finns skickas man även iväg till spara sedan:

If Request.Querystring("do") = "rosta" Then

If Request.Cookies(sessionnamn1) = sessionnamn then
  Response.Redirect sidan
Else
Dim id
id = Request.Querystring("amp;id")
  Response.Redirect sidan & "?do=spara&amp;id=" & Request.Querystring("id") & "&amp;val=" & Request.QueryString("val")
End If

End If

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #16740 | Skapades: 2009-07-19 17:08:18

voigtan
voigtan

Gradering

#16742

I en response.redirect så kör du inte en xHTML validering:

Response.Redirect sidan & "?do=spara&amp;id=" & Request.Querystring("id") & "&amp;val=" & Request.QueryString("val")
skall vara:

Response.Redirect sidan & "?do=spara&id=" & Request.Querystring("id") & "&val=" & Request.QueryString("val")

Gjorde en test:

http://voigt.se/sandbox/aspkoll/roosweb/

<%

If Request.Querystring("do") = "rosta" Then
    For each item in Request.QueryString
        Response.Write item & " - " & Request.QueryString(item) & "<br/>"
    Next
else
    Response.Redirect("default.asp?do=rosta&bob=göran") ' - Gives two item: 'do' and 'bob'
    'Response.Redirect("default.asp?do=rosta&amp;bob=göran") ' gives two item: 'do' and 'amp;bob'
End If
%>

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16742 | Skapades: 2009-07-19 17:20:06

Roosweb
Roosweb

Gradering

#16743

Fixade det och det fungerade fint! Vet du av vilken anledning det har fungerat hela tiden förut men inte efter jag bytt till MySQL databasen? XHTML valideringen fixade ju till det, har den så stor roll i det hela att det påverkar Querystring'sen?


Tack voigtan!

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #16743 | Skapades: 2009-07-19 17:39:34

voigtan
voigtan

Gradering

#16744

Response.Redirect har inget med databaser att göra, så jag har svårt att se att det har fungerat, XHTML är klientsidan. ASP tolken splitar vid en &, not much you can do with that.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16744 | Skapades: 2009-07-19 17:44:28

Roosweb
Roosweb

Gradering

#16745

Jag tror att det är Dreamweaver som har spökat lite här, det här var inte enda stället där den har försökt skriva om ett tecken i "&nbsp;"-form. Fungerar dock som det ska allt nu igen, såväl koden som programmet.

Med Vänliga Hälsningar - Robert Roos - Roosweb.se
ID: #16745 | Skapades: 2009-07-19 17:55:56
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy