webForumDet fria alternativet

Syntax error (missing operator) in query expression

33 svar · 813 visningar · startad av plelkes

plelkesMedlem sedan mars 2002823 inlägg
#1

Hej igen,
Nu har jag kommit till rapportskrivandet, och då skiter det sig igen x(
Det jag vill är att markera kryssrutan Och sedan lista i tabellen för markerad PatID FluidID, Volym och datum.
Men när jag kör får jag fel

Microsoft JET Database Engine error '80040e14'

Syntax error (missing operator) in query expression 'PatID = ''1111111111'''.

/vatskebalans/visa_rapporten100.asp, line 14

De två aktuella sidors kod:

skrivaRapport.asp

<%
    Set objConn = Server.CreateObject("ADODB.Connection")
   objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")
   strSQL =" SELECT * FROM tblPersonuppgifter "
 %>
<FORM ACTION="visa_rapporten100.asp" METHOD="post">
<TABLE border=1>
       <TR>
          <TD><B>Personnummer</B></TD>
          <TD><B>Efternamn</B></TD>
          <TD><B>Förnamn</B></TD>
    <TD><B>Visa Rapport</B></TD>
       </TR>
 <%
 	Set objRS = objConn.Execute(strSQL)
    Do While Not objRS.EOF
       Response.Write "<TR><TD>" & objRS("PatID") & "</TD>"
       Response.Write "<TD>" & objRS("ftEnamn") & "</TD>"
       Response.Write "<TD>" & objRS("ftFnamn") & "</TD>"
Response.Write "<TD><INPUT NAME=""rapport"" TYPE=""checkbox"" VALUE=""'"& objRS("PatID") &"'""></TD></TR>"
       objRS.MoveNext
    Loop
Response.Write "<TR ALIGN=""RIGHT"" VALIGN=""MIDDLE"">"
    Response.Write "<TD COLSPAN=""3"">"
    Response.Write "<INPUT TYPE=""submit"" VALUE=""skriv ut rapport"">"
    Response.Write "</TD></TR>"
	Response.Write "</TABLE></FORM>"
    objRS.Close
    Set objRS = Nothing
    objConn.Close
    Set objConn = Nothing

 %>

visa_rapporten100.asp

<%  
Set vbalans = Server.CreateObject("ADODB.Connection")
vbalans.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vbalans.ConnectionString = "Data Source='" & MdbFilePath & "'"
vbalans.open
strSQL1 =" SELECT * FROM tblVetskebalans WHERE PatID = '"&Request.Form("rapport")&"' ORDER by Dag DESC"
datum ="" 
[B]Set rs1 = vbalans.Execute (strSQL1)[/B]
Do While Not rs1.EOF
If datum <> rs1("Dag") then
datum = rs1("Dag")
Response.Write "<B><U>" & rs1("Dag") & "</U></B><BR>" & rs1("FluidID") & rs1("Volym") & "<BR>"
Else
Response.Write rs1("FluidID") & rs1("Volym") & "<BR>"
End If
rs1.MoveNext
Loop
vbalans.Close
Set vbalans = Nothing
  %>

rad 14 är fetmarkerad

LarsGMedlem sedan dec. 200012 465 inlägg
#2
strSQL1 =" SELECT * FROM tblVetskebalans WHERE PatID = '"& replace(Request.Form("rapport") , "'","''") &"' ORDER by Dag DESC"

Det ser ut som fältet rapport innehåller '

plelkesMedlem sedan mars 2002823 inlägg
#3

Hittat ett av felen. Skulle vara

strSQL1 =" SELECT * FROM tblVetskebalans WHERE PatID = "&Request.Form("rapport")&" ORDER by Dag DESC"

Men saknar fortfarande att Volym inte skrivs ut

plelkesMedlem sedan mars 2002823 inlägg
#4

Som ni ser så skrivs inte alla"volym" ut
Måste väl vara fel på mina loopar, eller hur?

LarsGMedlem sedan dec. 200012 465 inlägg
#5

Vilken datatyp har kolumnen volym?

plelkesMedlem sedan mars 2002823 inlägg
#6

LarsG skrev:

Vilken datatyp har kolumnen volym?

volym = tal
patid = text
FluidID = tal

LarsGMedlem sedan dec. 200012 465 inlägg
#7

Det är alltid problem med kolumner av typen text (kan du byta till varchar(255)?).

Kolumner av den typen skall alltid läggas sist i select-listan och värdet bör läggas i en lokal variabel då en referens till en sådan kolumn verkar tömma alla efterliggande kolumnvärden från recordsetet.

plelkesMedlem sedan mars 2002823 inlägg
#8

LarsG skrev:

Det är alltid problem med kolumner av typen text (kan du byta till varchar(255)?).

Kolumner av den typen skall alltid läggas sist i select-listan och värdet bör läggas i en lokal variabel då en referens till en sådan kolumn verkar tömma alla efterliggande kolumnvärden från recordsetet.

Förstår itne riktigt vad som menas...
Skall jag sluta upp med alla text? Och göra om alla strSQL??

plelkesMedlem sedan mars 2002823 inlägg
#9

Nu har jag ändrat lite

Set vbalans = Server.CreateObject("ADODB.Connection")
vbalans.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vbalans.ConnectionString = "Data Source='" & MdbFilePath & "'"
vbalans.open
strSQL1 = "SELECT tblFluids.FluidNamn, tblFluids.FluidID, tblVetskebalans.Dag, tblVetskebalans.PatID, tblVetskebalans.FluidID, tblVetskebalans.Volym FROM " & _
         "tblVetskebalans, tblFluids WHERE tblVetskebalans.FluidID = tblFluids.FluidID AND PatID = "&Request.Form("rapport")&" ORDER by Dag ASC" 

datum ="" 
Set rs1 = vbalans.Execute (strSQL1)
Do While Not rs1.EOF
If datum <> rs1("Dag") then
datum = rs1("Dag")
Response.Write "<B>" & rs1("Dag") & "</B><BR>" & "<I>" & rs1("FluidNamn") & "</I>   " & "<U>" & rs1("Volym") & "  ml</U><BR>"
Else
Response.Write "<I>" & rs1("FluidNamn") & "</I>   " & "<U>" & rs1("Volym") & "  ml</U><BR>"
End If
rs1.MoveNext
Loop
vbalans.Close
Set vbalans = Nothing
  %>

och nu verkar det fungera

LarsGMedlem sedan dec. 200012 465 inlägg
#10

Om du behöver mer än 255 tecken så måste du använda text annars så är det bättre att använda varchar.

I dina select-satser så får du ange kolumnerna och lägga de med typen text sist.

select c1,c2,textKolumn ...

dvs, använd inte select *

@ndersMedlem sedan juni 200026 914 inlägg
#11

LarsG, notera att plelkes använder Access. :)

Mvh

LarsGMedlem sedan dec. 200012 465 inlägg
#12

Och ?

@ndersMedlem sedan juni 200026 914 inlägg
#13

Om jag kopplar in min Access-hjärna fungerar inte terminologin om man använder varchar / text som namn på datatyperna. Jag kanske missuppfattar vad du menar, men det du kallar varchar skulle jag kalla text, och det du kallar text skulle jag kalla PM/Memo. Eftersom vi pratar Access alltså. :)

Men å andra sidan, jag använder ju egentligen inte Access, så den delen av min hjärna kan ju vara fullständigt felkopplad. :)

Mvh

LarsGMedlem sedan dec. 200012 465 inlägg
#14

Visst, det är jag som blandar ihop saker och ting.

Text och varchar är synonyma i Access. Det är PM/Memo som man får se upp med.

I så fall förstår jag nog inte varför det går fel.

Engine^Medlem sedan dec. 20002 861 inlägg
#15

Felet torde ha berott (kändes som en väldigt underlig stavning) på att Ms.Jet försökte tolka PatID som varchar/text p.g.a. apostroferna och Access svarade med att kolumnen är/var inte av den typen.

Plelkes: jag vet inte riktigt hur långt du har nått nu i din vätskebalansdatabas, men har du verkligen tittat över strukturen på databasen?
Jag vill minnas att det var den som du hade förhållandevis stora problem med i början. Och det verkar vara som så att du fortfarande har lite bekymmer med den biten.

[halft OT]

LarsG skrev:

Kolumner av den typen skall alltid läggas sist i select-listan och värdet bör läggas i en lokal variabel då en referens till en sådan kolumn verkar tömma alla efterliggande kolumnvärden från recordsetet.

Varför ska man välja ett text/pm-fält sist?
[/halft OT]

LarsGMedlem sedan dec. 200012 465 inlägg
#16

Varför ska man välja ett text/pm-fält sist?

Det kan uppstå fel annars. :)

Det gäller enbart PM/Memo inte text. (Jag blandade ihop det med SQL server där text betyder samma sak som PM/Memo i Access.)

plelkesMedlem sedan mars 2002823 inlägg
#17

Engine^ skrev:

jag vet inte riktigt hur långt du har nått nu i din vätskebalansdatabas, men har du verkligen tittat över strukturen på databasen?
Jag vill minnas att det var den som du hade förhållandevis stora problem med i början. Och det verkar vara som så att du fortfarande har lite bekymmer med den biten

Jag börjar närma mig slutet. Har bara själva presentattionen, dvs det jag kallar "skrivaRapport" kvar.

Tyvärr kan jag för lite databaskonstuktion för att kunna säga ngt om "strukturen på databasen". Bifogar databasen ifall ngn av er har tid,lust och möjlighet att kika på den och komma med förslag på ev förbättringar.

Men för tillfället verkar det fungera - får iaf inga felmeddelande för närvarande

plelkesMedlem sedan mars 2002823 inlägg
#18

Försökt med följande förbättring:

strSQL1 = "SELECT tblFluids.FluidNamn, tblFluids.FluidID, tblVetskebalans.Dag," &_
"tblVetskebalans.PatID, tblVetskebalans.FluidID, tblVetskebalans.Volym" &_
"tblPersonuppgifter.PatID, tblPersonuppgifter.ftEnamn, tblPersonuppgifter.ftFnamn" &_ 
"FROM tblVetskebalans, tblFluids, tblPersonuppgifter WHERE" &_
"tblVetskebalans.FluidID = tblFluids.FluidID AND PatID = " &_
"&Request.Form(""rapport"")&" ORDER by Dag ASC"
%>
<TABLE border=1>
       <TR>
	   <TD>&nbsp;</TD><TD>&nbsp;</TD><TD><%=rs("PatID")%></TD>
	   </TR><TR>
	   <TD>&nbsp;</TD><TD><%=rs("ftEnamn")%></TD><TD><%=rs("ftFnamn")%></TD>
	   </TR><TR>
	   <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
	   </TR><TR>
	   <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
	   </TR><TR>
	   <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
	   </TR>
	   </TABLE>

Men får fel i strSQL

Microsoft VBScript compilation error '800a0401'

Expected end of statement

/vatskebalans/visa_rapporten102.asp, line 17

"&Request.Form(""rapport"")&" ORDER by Dag ASC"
------------------------------^

Varför gör det på detta vis??

plelkesMedlem sedan mars 2002823 inlägg
#19

Nu har jag ändrat till

strSQL1 = "SELECT tblFluids.FluidNamn, tblFluids.FluidID, tblVetskebalans.Dag," &_
"tblVetskebalans.PatID, tblVetskebalans.FluidID, tblVetskebalans.Volym" &_
"tblPersonuppgifter.PatID, tblPersonuppgifter.ftEnamn, tblPersonuppgifter.ftFnamn" &_ 
"FROM tblVetskebalans, tblFluids, tblPersonuppgifter WHERE" &_
"tblVetskebalans.FluidID = tblFluids.FluidID AND " &_
"PatID = "&Request.Form("rapport")&" ORDER by Dag ASC"

Men får felutskriften:

Microsoft VBScript runtime error '800a000d'
Type mismatch: 'rs'

Utskriften av strSQL1

SELECT tblFluids.FluidNamn, tblFluids.FluidID, tblVetskebalans.Dag,tblVetskebalans.PatID, tblVetskebalans.FluidID, tblVetskebalans.VolymtblPersonuppgifter.PatID, tblPersonuppgifter.ftEnamn, tblPersonuppgifter.ftFnamnFROM tblVetskebalans, tblFluids, tblPersonuppgifter WHEREtblVetskebalans.FluidID = tblFluids.FluidID AND PatID = '1111111111' ORDER by Dag ASC

@ndersMedlem sedan juni 200026 914 inlägg
#20

Det ser ut som att du glömt att skapa dig ett recordset, typ:

set rs = objConn.execute(strSQL1)

Du saknar också ett mellanslag efter WHERE, samt före FROM i SQL-frågan.

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb