Hej
Jag har två tabeller (Access), en där jag lagrar servicebesök (tbl_service) och en där jag lagrar ev. anmärkningar (tbl_anm).
Tabellerna ser ut som följer:
tbl_service
---------------------
Service_ID (räknare)
Hiss_ID (text)
Service_Datum (Datum / Tid)
Service_Anm (Ja / Nej)
---------------------
tbl_anm
---------------------
Anm_ID (räknare)
Service_ID (text)
Anm_Text (text)
Anm_Done (Ja / Nej)
---------------------
Nu vill jag kunna plocka ut ev. anmärkningar från det senaste servicebesöket, med villkoret att Anm_Done är Falskt och detta för en speciell hiss,
baserat på Hiss_ID, som jag vill ange i frågan (alltså vilket objekt det gäller.
Skulle det vara så att Service_Anm i tabellen tbl_service är Falskt, finns inget att hämta från tbl_anm.
Hur ska jag lösa det här på bästa sätt?
Tack på förhand!
@ndersMedlem sedan juni 200032 969 inlägg Till att börja med, varför är Hiss_ID i tbl_service och Service_ID i tbl_anmn av texttyp? Det är väl numeriska ID:n? De skall vara av samma typ som det du ska joina emot, dvs tal.
Börja med att fixa det.
@nders skrev:
Till att börja med, varför är Hiss_ID i tbl_service och Service_ID i tbl_anmn av texttyp? Det är väl numeriska ID:n? De skall vara av samma typ som det du ska joina emot, dvs tal.
Börja med att fixa det.
Hiss_ID är av typen text, eftersom det är ett replikerings-id, med bokstäver och siffror blandat.
Service_ID i tabellen tbl_anm kan jag därimot ändra, för det är tal. Vet ej varför jag har text där, hjärnsläpp möjligen.
Men kom gärna med ett förslag på sql fråga, så jag får igång hjärnan.
Tack!
@ndersMedlem sedan juni 200032 969 inlägg Ok, så länge fälten är av samma typ i alla tabeller du ska kunna koppla ihop så är det ju lugnt.
Jag återkommer med förslag till fråga om ingen annan hinner först.
mvh
@nders skrev:
Ok, så länge fälten är av samma typ i alla tabeller du ska kunna koppla ihop så är det ju lugnt.
Jag återkommer med förslag till fråga om ingen annan hinner först.
mvh
Hmm, men då struntar jag i att byta typ på service_id, för i nuläget är Hiss_ID av typen text och Service_Id (i tabellen tbl_anm) likaså.
@ndersMedlem sedan juni 200032 969 inlägg ServiceID är ju en räknare i tbl_service, då kan du väl inte ha det som text i tbl_anm?
@nders skrev:
ServiceID är ju en räknare i tbl_service, då kan du väl inte ha det som text i tbl_anm?
Nej visst faan, stämmer bra.
Men om jag ändrar service_id i tabellen tbl_anm till TAL, då funkar det alltså som jag vill?
@ndersMedlem sedan juni 200032 969 inlägg Om du ändrar typen till tal, då kan du i alla fall göra en join mellan tabellerna.
@nders skrev:
Om du ändrar typen till tal, då kan du i alla fall göra en join mellan tabellerna.
Ok, kan du dra ett exempel på hur jag skulle kunna bygga upp frågan?
@ndersMedlem sedan juni 200032 969 inlägg Jag sade ju att jag skulle återkomma med förslag, tjata inte. ;)
Förslag:
SELECT TOP 1 * FROM tbl_service INNER JOIN tbl_anm ON tbl_service.ServiceID = tbl_anm.ServiceID
WHERE tbl_service.Hiss_ID = 'foo' AND tbl_anm.Anm_Done = False
ORDER BY tbl_service.Service_Datum DESC, tbl_service.Service_ID DESC
@nders skrev:
Jag sade ju att jag skulle återkomma med förslag, tjata inte. ;)
Hmm, ok, vi kallar det påminnelse då, istället för tjat ;)
Tack!
Nu har jag återupptagit den här tråden lite, har inte haft tid förrän nu.
Får ett felmeddelande när jag kör ovanstående:
Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.
/print_anm.asp, line 99
Rad 99 är SQL-Frågan.
Jag har provat att skriva ut frågan och allt som ska vara med verkar komma med:
SELECT TOP 1 * FROM tbl_service INNER JOIN tbl_anm ON tbl_service.ServiceID = tbl_anm.ServiceID WHERE tbl_service.Hiss_ID = '{00000495-0000-0000-0000-000000000000}' AND tbl_anm.Anm_Done = False ORDER BY tbl_service.Service_Datum DESC, tbl_service.Service_ID DESC
Vad kan det vara som saknas?
Tack!
@ndersMedlem sedan juni 200032 969 inlägg Du har skrivit fel på ett fältnamn. Heter fältet ServiceID eller heter det Service_ID?
Jag är medveten om att felskrivningen kommer från mitt inlägg, men det är lite svårt att koda i blindo...
Det var precis så det låg till, tack för hjälpen.
Men nu uppstod ett kryptiskt felmess, som jag sökt på, men inte hittat en lösning:
error '80020009'
/print_anm.asp, line 116
Rad 116 är SQL-Frågan.
Min kod ser ut såhär:
<%
sSql = "SELECT TOP 1 Anm_Text " &_
"FROM tbl_service " &_
"INNER JOIN tbl_anm " &_
"ON tbl_service.Service_ID = tbl_anm.Service_ID " &_
"WHERE tbl_service.Hiss_ID = '" & oRec("Hiss_ID") & "' " &_
"AND tbl_anm.Anm_Done = False " &_
"ORDER BY tbl_service.Service_Datum DESC, tbl_service.Service_ID DESC"
' Response.Write(sSql)
' response.end
Set rS = oConn.Execute(sSql)
If Not rS.EOF Then
Do While Not oRec.EOF
Response.Write(rS("Anm_Text") & "<br>")
rS.MoveNext
Loop
Else
Response.Write("<i>Inga Anmärkningar föregående besök.</i>")
End If
Set rS = Nothing
%>
Någon som vet hur jag löser det här?
@ndersMedlem sedan juni 200032 969 inlägg Jag tror inte på att rad 116 är SQL-frågan. Jag tror att felet är detta:
If Not [b]rS[/b].EOF Then
Do While Not [b]oRec[/b].EOF
Hmm, hittade varför det blir så men kommer inte fram till hur jag löser det.
Fältet heter "Anm_Text" och finns i tabellen "tbl_anm" och inte i "tbl_service" ur vilken frågan försöker plocka ur detta.
Så jag måste alltså vända på frågan på något sätt.
Idéer någon?
Tack!
@ndersMedlem sedan juni 200032 969 inlägg Det borde inte spela någon roll, men när du korrigerat enl. mitt förslag ovan kan du ju alltid i SQL-frågan specificera vilken tabell du vill hämta fältet ifrån.
sSql = "SELECT TOP 1 tbl_anm.Anm_Text " &_
@nders skrev:
Jag tror inte på att rad 116 är SQL-frågan. Jag tror att felet är detta:
If Not [b]rS[/b].EOF Then
Do While Not [b]oRec[/b].EOF
Visst stämde det med!
Ändrade på det stället och vände även på sqlfrågan:
sSql = "SELECT TOP 1 Anm_Text " &_
"FROM tbl_anm " &_
"INNER JOIN tbl_service " &_
"ON tbl_service.Service_ID = tbl_anm.Service_ID " &_
"WHERE tbl_service.Hiss_ID = '" & oRec("Hiss_ID") & "' " &_
"AND tbl_anm.Anm_Done = False " &_
"ORDER BY tbl_service.Service_Datum DESC, tbl_service.Service_ID DESC"
Nu funkar det precis så som jag vill, tack för all hjälp!