Jag har 2st listrutor. Detta kanse fungerar för dig: Hej Andreas! Tack för ditt svar. Testa att skapa en fråga i access datbas fönster. Då kan du få meddelande om vad det är för syntaxfel. Det är ofta bättre att använda sparade frågor i acccess. Då slipper frågorna kompileras om av JETs frågemotor varje gång listrutan laddas. Dessutom kan du återanvända frågorna i fler comboboxes. Tack Andreas för dina VÄRDEFULLA tips och råd! Om du skall lada om en fråga finns metoden Requery:Listruta skapad ur 2st Listrutor
Till den ena plockar jag in LÖNTAGARE med följande SQL-sats:
.RowSource = "SELECT Personer.Nyckel, EfterNamn & ' ' & ForNamn & ' ' & OvrigaForNamn AS Namn, EnhetFartyg.EnhetFartyg, Befattningar.Befattning, Personer.Anstallningsnr, Personer.AnstallnDatum " & _
"FROM EnhetFartyg INNER JOIN (Personer INNER JOIN Befattningar ON Personer.Befattningnr = Befattningar.Befattningnr) ON EnhetFartyg.Fartygsnr = Personer.Fartygsnr " & _
"Where (((Personer.Lontagare) <> False))" & _
"AND (Personer.AnstallnDatum)<= (txtEndDate) " & _
"ORDER BY Personer.EfterNamn, Personer.ForNamn, Personer.OvrigaFornamn"
Till den andra plockar jag MÅNADSUPPGIFTER med följande SQL-sats:
.RowSource = " SELECT Manadsuppgifter.ManadsUppgID, EfterNamn & ' ' & ForNamn & ' ' & OvrigaForNamn AS Namn, Personer.Anstallningsnr, " & _
"ManadsUppgiftStatus.Status, EnhetFartyg.EnhetFartyg, Befattningar.Befattning, Manadsuppgifter.Startdatum, Manadsuppgifter.Slutdatum " & _
"FROM (((Personer LEFT JOIN ManadsUppgifter ON Personer.Anstallningsnr = ManadsUppgifter.Anstallningsnr) " & _
"LEFT JOIN ManadsUppgiftStatus ON ManadsUppgifter.ManadsUppgiftStatusnr = ManadsUppgiftStatus.Statusnr)" & _
"LEFT JOIN EnhetFartyg ON ManadsUppgifter.EnhetsnrFartygsnr = EnhetFartyg.Fartygsnr)" & _
"LEFT JOIN Befattningar ON ManadsUppgifter.Befattningnr = Befattningar.Befattningnr " & _
"WHERE Month(Manadsuppgifter.Manad) = Month(txtStartDate) " & _
"AND Year(Manadsuppgifter.Manad)= Year(txtStartDate) " & _
" ORDER BY EnhetFartyg.EnhetFartyg, EfterNamn, ForNamn, OvrigaForNamn, Manadsuppgifter.Slutdatum "
(txtStartDate och txtEndDate innehåller datum för utvald månad)
Vill nu skapa en tredje listruta "Obehandlade" där jag vill plocka in alla Löntagare som inte finns i listan med Månadsuppgifter.
Jag vill alltså helt enkelt skapa en listruta över de löntagare som ännu inte fått månadsuppgifter för utvald månad.
En lösning skulle vara att skapa en ny tabell med nyckel Anstallningsnr och fält för markering av de månader som erhållit månadsuppgifter och därefter kolla i den tabellen om löntagare skall plockas med bland Obehandlade.
Kan någon komma på en bättre lösning?
Går det att lösa utan en ny tabell?
Tacksam för svar/HarrySv: Listruta skapad ur 2st Listrutor
RowSource = "SELECT Personer.EfterNamn & ' ' & Personer.ForNamn & ' ' & Personer.OvrigaForNamn AS Namn, Personer.Anstallningsnr" & vbCrLf & _
"FROM Personer" & vbCrLf & _
"WHERE Personer.Anstallningsnr NOT IN(SELECT ManadsUppgifter.Anstallningsnr" & vbCrLf & _
" FROM ManadsUppgifter" & vbCrLf & _
" WHERE Month(Manadsuppgifter.Manad) = Month(txtStartDate) AND Year(Manadsuppgifter.Manad)= Year(txtStartDate)" & vbCrLf & _
"ORDER BY Personer.EfterNamn, Personer.ForNamn, Personer.OvrigaForNamn" & vbCrLf
Sv:Listruta skapad ur 2st Listrutor
Tyvärr har jag ännu inte fått det att fungera, men jag filar vidare på förslaget.
Har provat skala bort delar av SQL satsen och konstaterat att när jag tar med den andra Select-delen(den som står efter NOT IN) så fungerar det inte längre.
Kopierade därefter in hela SQL-satsen som radkälla i listrutan. Tog bort .Radkälla och annat för att följa syntaxen för egenskapen radkälla i listrutan.
Vid körning därefter får jag felmeddelandet att "Datakälla saknas".
Det ser ut som om det som saknas är länken mellan Tabell: Personer och Tabell: Manadsuppgifter.
Måste väl försöka få till någon JOIN däremellan med hjälp av "Anstallningsnr"
/HarrySv: Listruta skapad ur 2st Listrutor
Sv:Listruta skapad ur 2st Listrutor
Jag skapade en fråga och fick på så sätt genast fram felmeddelande som visade att jag hade stavfel i SQL-satsen.
Att sedan använda Frågan som Rowsource istället för att skriva selectsatser underlättar enormt i mitt fall och gör alltsammans mycket mera flexibelt!
Jag har använt Select satser både som egenskap för listrutan, vid laddning av programmet och när listrutan skall "Refresch:as". Givetvis har jag lagt in Selectsatsen i en subrutin som anropas, men att använda en fråga är oerhört mycket bättre!
Stort TACK!
mvh / HArrySv: Listruta skapad ur 2st Listrutor
MyCombobox.Requery