Länkade Listrutor. Eftersom jag inte fått något svar på min fråga, så lutar det åt att jag låter de rutiner som skapar poster i tabell ”Person” och tabell ”Månadsuppgifter” även skapa poster i en ny tabell ”MånadsTabellPersoner”. Det finns ingen anledning att spara uppgifterna i en ny tabell när du har dem tillgängliga i de befintliga. Vad du behöver är en fråga som sammanställer uppgifterna. Frågan använder du sedan som radkälla i din listruta. Tack för ditt svar Åsa! Toppen! Hej Igen! Vi förenklar problemet och glömmer Tabell 4 och tabell 5 tills vidare och försöker visa enbart Förstår nog inte riktigt problemet... Tycker att Åsas förslag borde fungera, jag skulle dock lösa det såhär (vilket borde ge samma resultat). Jaha, jag läste bara första inlägget och där var inte det med... Testa såhär: Du är värd din vikt i guld ! <b>SELECT EfterNamn, ForNamn, ManStatus, ManEnhet FROM ((Personer LEFT JOIN MånadsUppgifter ON Personer.PersonId = MånadsUppgifter.PersonId) LEFT JOIN ManStatus ON MånadsUppgifter.ManStatusId = ManStatus.ManStatusId) LEFT JOIN ManEnhet ON MånadsUppgifter.ManEnhetID = ManEnhet.ManEnhetId</b> Stort tack Johan! Om du får liknande problem i fortsättningen kan du kopiera SQL-satsen och klistra in den i en fråga, när du försöker köra den får du oftast fram en detaljerad beskrivning av felet som hjälper ordentligt vid felsökning.Länkade Listrutor
Försöker länka 2st listrutor på ett sätt som jag inte ens vet om är möjligt.
Använder Access2000 och VB kod.
Jag har alltså 2 st tabeller: Tabell ”Personer” och tabell ”MånadsUppgifter”
Båda tabellerna har ett fält med namn ”PersonId” ( som inte primärnyckel i någondera tabellen, båda tabellerna har andra primärnycklar).
- Tabell ”Personer” innehåller bl.a. fält: ”PersPrimNyckel”, ”EfterNamn”, ”ForNamn”, ”PersonId” mm
- Tabell ”MånadsUppgifter” Innehåller bl.a. fält: ”ManPrimNyckel”, ”Manad”, ”ManStatus”, ”ManEnhet” mm
-Tabell ”Personer” innehåller samtliga aktuella personer.
-Tabell ”MånadsUppgifter” innehåller personers månadsuppgifter om sådana finns. (Månadsuppgift består av en post per uppgift)
En person kan alltså sakna månadsuppgift för viss månad eller ha en eller flera månadsuppgifter.
Min önskan är att presentera en lista (ev. länkade listor) enligt nedanstående:
Välj Månad: (Ordnas via DTPicker)
Person Månadsuppgift Månad
Anka Kalle Månadsuppgift
Anka Joakim Månadsuppgift
Månadsuppgift
Månadsuppgift
Idefix (tom alltså ingen månadsuppgift denhär månaden)
Asterix Månadsuppgift
Kan det lösas med listruta (ev.flera länkade listrutor) eller borde jag skapa ytterligare en tredje tabell som innehåller ett sammandrag(det jag vill visa i min listruta) ur tabellerna ”Personer” och ”MånadsUppgifter”. ??
Alternativet med en tredje tabell kräver i så fall att jag även skapar tomma poster för de personer som saknar månadsuppgifter för aktuell månad för att på så sätt få med alla personer i listan. Eller ?
Skulle helst se att det gick att lösa m.h.a de två tabeller jag redan har.
Tacksam för svar! /Harry Sv: Länkade Listrutor
I den nya tabellen sparar jag bl.a. ”PersonId” med vars hjälp jag vill hämta fram personens uppgifter typ namn osv.
Här kommer då min nya fråga.
- Hur kan jag hämta fram uppgifter till en listruta från fler än en tabell ???
- Man anger ju endast en radkälla för kontrollen listruta så hur hämtar man då fram uppgifter till en kolumn i listrutan ur en tabell och uppgifter till en annan kolumn från en annan tabell?? ( Jag tänker mej att jag använder tabell ”Månadsuppgifter” som radkälla och önskar få mitt program att m.h.a fält ”PersonId” hämta fram Namn etc till kolumn i samma listruta.)
Det är klart att jag kan lagra undan namnet i klartext i den nya tabellen men eftersom det inte rör sig om enbart namnet utan en hel del andra uppgifter som jag har lagrat i separata tabeller vars Id finns lagrade i Tabell ”Månadsuppgifter” så är det inte vettigt att lösa problemet på det viset.
Hoppas det finns någon som är villig att ta sig en funderare !
Mvh / HarrySv:Länkade Listrutor
Låt oss anta följande:
- månadsuppgiften som du vill visa fins i fältet "ManUppg" i tabellen "MånadsUppgifter"
- månaden lagras i textformat enligt "yyMM" i fältet "Manad" i tabellen "MånadsUppgifter"
- formuläret heter "TestFrm"
- aktuell månad finns i formuläret i en textbox som heter "txtManad"
- listrutan heter "lstManad"
Frågan skulle då se ut så här:
<code>
SELECT ForNamn & ' ' & EfterNamn AS PersNamn, ManUppg
FROM (SELECT PersonId, ManUppg
FROM MånadsUppgifter
WHERE Manad = [Forms]![TestFrm]![txtManad]) AS MyRes RIGHT JOIN Personer ON Personer.PersonId = MyRes.PersonId
ORDER BY PersonId;
</code>
Du behöver dessutom en kodsnutt som uppdaterar listrutan när månaden ändras. I händelsen "Efter uppdatering" för, i det här fallet, textrutan "txtManad" skriver du:
<code>
Private Sub txtManad_AfterUpdate()
Me.lstManad.Requery
End Sub
</code>Sv: Länkade Listrutor
Hör av mej när jag fått tid att prova. (Ser ut som en elegant lösning).
mvh/HarrySv: Länkade Listrutor
Tack igen Åsa!
Med lite trixande enligt ditt exempel skall det nog gå att få in all tabellinfo jag vill ha med!
Ha en trevlig fortsättning på helgen. Hälsar HarrySv: Länkade Listrutor
Även med Åsas fina exempel verkar det vara i det närmaste omöjligt att få ihop den lista jag önskar.
Listan skall hämta info ur totalt 5 st tabeller där Tabell ”MånadsUppgifter” innehåller nycklar till de 5 tabellerna i det fall att personen har uppgifter för månaden. Ifall att personen saknar uppgifter för månaden skall enbart personens namn visas i listan.
Vid mina hittills fruktlösa försök lyckas jag få fram listan med personer och ”Månadsuppgifter” innehållande nycklarna till tabellerna men jag lyckas inte få fram de uppgifter som nycklarna pekar på.( Lyckas alltså inte koppla nycklarna så att jag istället för nycklarna får se innehållet i de fält som nycklarna pekar på).
Här kommer en närmare beskrivning
Tabell 1: Personer
PersPrimNyckel(Räknare)
PersonId(sifferkombination ex 50036)
EfterNamn
ForNamn
osv
Tabell 2: MånadsUppgifter
ManPrimNyckel(Räknare)
Manad(yyMM)
PersonId
ManStatusId
ManEnhetId
ManProjId
ManStartDatum
ManSlutDatum
osv
Tabell 3: ManStatus
ManStatusId(Räknare)
ManStatus (Ex: ”Påbörjat”, ”Under behandling”, ”Klar”, ”Klar Låst” osv)
Tabell 4: ManEnhet
ManEnhetId(Räknare)
ManEnhet(namn på platser)
Tabell 5: ManProj
ManProjId(Räknare)
ManProj(namn på projekt)
Med hjälp av dehär tabellerna vill jag ta fram nedanstående lista som jag väljer för viss månad:
Person ManStatus ManEnhet ManProj ManStartDatum ManSlutDatum
Anka Kalle Påbörjad Ankeborg Städning
Anka Joakim Klar Ankeborg Penningpolering
Påbörjad Ankeborg Penninginsamling
Avslutad Ankefarm Skattsökning 15.05.2005 17.05.2005
Idefix (tom alltså ingen månadsuppgift denhär månaden)
Obelix Under arbete Gallien BautaSlipning
osv
Mitt första alternativ för att lösa problemet var att skapa en ny tabell som innehåller en sammanställning av uppgifterna till listan, men jag förstår att en erfaren ”SQL – användare” lyckas lösa det med befintliga tabeller.
Vore tacksam om Åsa eller någon har tid att ta en funderare.
Mvh /Harry Sv:Länkade Listrutor
Personens namn och Manstatus.
Problemet att hämta fram raderna för varje person och en uppgift ur tabell "MånadsUppgifter" i det fall att sådana finns fungerar helt ok enligt Åsas lösning, men hur får man fram en uppgift vars nyckel finns i Tabell "Månadsuppgift" ??
Efter nya fruktlösa försök börjar jag undra om det ens är möjligt ?
Tacksam för svar / HarrySv: Länkade Listrutor
Sätt listrutans källa till (testa att skapa motsvarande fråga först, brukar vara enklare att felsöka):
SELECT EfterNamn, ForNamn, ManStatus FROM Personer LEFT JOIN MånadsUppgifter ON Personer.PersonId = MånadsUppgifter.PersonId WHERE Manad = 1
/JohanSv:Länkade Listrutor
Problemet är att ManStatus skall hämtas från tabell "ManStatus" vars nyckel ligger i tabell "MånadsUppgifter".
Jag måste på nåt sätt JOINA även tabell "ManStatus".
mvh /HarrySv: Länkade Listrutor
SELECT EfterNamn, ForNamn, ManStatus FROM (Personer LEFT JOIN MånadsUppgifter ON Personer.PersonId = MånadsUppgifter.PersonId) LEFT JOIN ManStatus ON MånadsUppgifter.ManStatusId = ManStatus.ManStatusId WHERE Manad = 1
/JohanSv:Länkade Listrutor
Det fungerade perfekt!!
Nu börjar jag känna mig riktigt dum. Jag förstår tydligen inte tekniken bakom det hela eftersom jag nu inte lyckas få in uppgifterna från tabell 4 och tabell 5. Borde ju bara vara att haka på ytterligare LEFT JOIN t.ex:
SELECT EfterNamn, ForNamn, ManStatus, ManEnhet FROM ((Personer LEFT JOIN MånadsUppgifter ON Personer.PersonId = MånadsUppgifter.PersonId) LEFT JOIN ManStatus ON MånadsUppgifter.ManStatusId = ManStatus.ManStatusId)
LEFT JOIN ManEnhet ON MånadsUppgifter.ManEnhetID = ManEnhet.ManEnhetId
Men så enkelt är det inte (Syntaxen ser ju lite annorlunda ut eftersom jag sätter in det hela som radkälla,
DEt blir tillägg av endel " och & _ för att få det att fungera, men det är nog inte där jag gör fel).
Skulle önska att jag fick sätta in nåt Ytterligare FROM eller nåt AND.
mvh/ HarrySv: Länkade Listrutor
Det där tycker jag ser rätt ut, vad får du för fel?
/JohanSv:Länkade Listrutor
Nu fungerar det. Jag blev tvungen att först köra igenom satsen med tabellerna var för sig.
Efter att jag fått det att fungera på det viset så gick det bra att utöka satsen med en tabell åt gången enligt ditt exempel. det gäller ju också att få alla parenteser rätt.
Eftersom man inte får något felmeddelande vid syntaxfel så blir ju det hela lite knepigare.
Använde:
.Rowsource = " SELECT bla bla"
Debug.Print .RowSource
För att spåra felet.
Hela satsen som nu fungerar ser ut som följer:
.RowSource = " SELECT EfterNamn, ManadsUppgiftStatus.Status, EnhetFartyg.EnhetFartyg, Befattningar.Befattning " & _
"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"
Ps: skall ännu komplettera satsen med konkateneringen av namnet enligt Åsas modell.
Stort tack till er båda två.
Nu skall jag ta en paus med en liten cyckeltur! :)
mvh / HarrySv: Länkade Listrutor
/Johan