plelkesMedlem sedan mars 2002823 inlägg
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
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
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
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
Vilken datatyp har kolumnen volym?
plelkesMedlem sedan mars 2002823 inlägg
LarsG skrev:
Vilken datatyp har kolumnen volym?
volym = tal
patid = text
FluidID = tal
LarsGMedlem sedan dec. 200012 465 inlägg
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
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
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
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
LarsG, notera att plelkes använder Access. :)
Mvh
LarsGMedlem sedan dec. 200012 465 inlägg
@ndersMedlem sedan juni 200026 914 inlägg
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
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
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
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
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
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> </TD><TD> </TD><TD><%=rs("PatID")%></TD>
</TR><TR>
<TD> </TD><TD><%=rs("ftEnamn")%></TD><TD><%=rs("ftFnamn")%></TD>
</TR><TR>
<TD> </TD><TD> </TD><TD> </TD>
</TR><TR>
<TD> </TD><TD> </TD><TD> </TD>
</TR><TR>
<TD> </TD><TD> </TD><TD> </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
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
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.