26. september 2005 - 14:30Der er
35 kommentarer og 2 løsninger
form + subform returnere ikke forventet resultat
Hej eksperter,
Jeg har koblet en række "personer" til et "Firma" i et adressekartotek. Eksempel:
På en fortløbende formular har jeg alle mine firmaer, når jeg dobbeltklikker på et firma skal den åbne en ny formular med en underformular der viser de personer der koblet til firmaet, dertil bruger jeg følgende kode: stDocName = "formular" stLinkCriteria = "[ID]=" & Me![ID] DoCmd.OpenForm stDocName, , , stLinkCriteria
Det virker kun hvis der er koblet personer til firmaet, hvis der ikke er koblet personer til firmaet vises ingenting. HVORFOR F.... sker det :-)
Hej, det må være et eller andet med dit ID felt i den form du åbner via din firmaform. Hvis du har to tabeller en med firmaoplysninger, og en med personoplysninger, og der er relationer mellem disse vil jeg forslår at du benytter main og subform via dynamisk kæde (underordnet og overordnet felter)
Jeg vil være helt sikker på at jeg har forklaret mig ordentligt: Jeg har en tabel der hedder "firma" der har relateret poster i tabellen der hedder "personer" og det virker fint hvis bare tabellen "personer" indeholder data.
Hvis der ikke er data i persontabellen hvad skal ID så "sammelignes med", jeg er ikke så skrap lige her, men jeg tror det er det du skal kikke på, når jeg nævner det med struktur på subforms her 26/09-2005 14:40:55, er det fordi at det primært er sådan Access håndtere det
Den er jeg med på, men hvordan er det sat sammen ifht. koblingen mellem firma og personer, der må være et eller andet unikt der, når du skriver "Vises ingenting", mener du så på mainformen eller i subformen
Hmm, kan ikke lige gennemskue det, hvis du åbner en form via firmaformen (med ID som det unikke)vises data for det valgte firma i diverse tekstbokse på mainformen feks. øverst, så burde subformen vise de relaterede personer (hvis der er nogen)som svare til det firma du har valgt. Prøv at kikke på egenskaben Overordnet og underordnet feltet du finder egensken ved at åbne mainform i design, og højreklikke på subformen, det må være der den ligge begravet
Okay, hvad sker der hvis du bytter om på det, og forresten den tabel eller forspørgsel der er postkilde til mainformen, er både person.id og firma.id medtaget der, jeg mener at person.id skal være i postkilden for at det virker, men behøver ikke være på main eller subform, prøv at kikke på det
Okay, prøv at fjerne din subform fra mainformen, arbejd evt. på en kopi af databasen, opret nu en ny subform og medtag mindst feltet person.id, sørg for at både person.id og firma.id er i den forespørgsel der bruges som postkilde til mainformen, indsæt nu din nye subform på mainformen, ved at benytte guiden der starter automatisk op, prøv så at vælge under og overordnet felter i de forslag guiden stiller. Check evt ,om der er noget kode på mainform der spørger på om subform indeholder data eller ej
Jeg er på vej hjemover, men vender tilbage senere hvis ikke andre har fundet en løsning til dig, jeg er nogenlunde sikker på at der er rimeligt "banalt", men det er det med at se skoven for bare træer :o)
without looking through all of the comments, if your sub form which should display persons uses a query as the row source and this query has an INNER join. Then Only rows where there are records on bothsides of the join will be displayed.
If you want to show all records, also thouse without person, then you need to alter the query to an OUTER JOIN.
try by looking at each query in the query builder and see if you get the correct result here. If you dont then you have eliminated any problems with the forms.
inner outer, i never quite got the difference ;-) When i try change it to OUTER JOIN i get a syntax error
this result in syntax error: SELECT TBL_Adressekartotek.*, tblLokalAdresseCheck.* FROM (TBL_Adressekartotek LEFT JOIN tblLokalAdresseCheck ON TBL_Adressekartotek.ID = tblLokalAdresseCheck.FirmaID) OUTER JOIN TBL_Adresse_SUB ON TBL_Adressekartotek.ID = TBL_Adresse_SUB.AdresseID;
:o) an OUTER JOIN can be a right or left OUTER join. The best way to do this is in the Access query builder window. Right click on the thin line joing the two tables and then select the button which gives you waht you want. This will make the JOIN to a left or right.
Jeg tror faktisk at subformen og mainform "hænger rigtigt sammen", problemet er at mainformen er beskyttet mod indtastning af nye poster, men ikke nødvendigvis beskyttet mod redigering af poster der allerede er oprettet, når en form er beskyttet mod indtasting af poster (AllowAdditions False), tror jeg at mainformen opføre sig som pildal beskriver når der ikke er nogle data i subformen som relatere til det valgte firma.
Som terry skriver kan du kun får vist firmaer med tilknyttede personer i en Inner Join uanset hvad form properties er sat til. Så muligvis er det nok at ændre din sætning til:
SELECT TBL_Adressekartotek.*, tblLokalAdresseCheck.* FROM (TBL_Adressekartotek LEFT JOIN tblLokalAdresseCheck ON TBL_Adressekartotek.ID = tblLokalAdresseCheck.FirmaID) LEFT OUTER JOIN TBL_Adresse_SUB ON TBL_Adressekartotek.ID = TBL_Adresse_SUB.AdresseID
Der har lige været et par timer med børn og mad. Jeg har ved jeres super hjælp fundet fejlen. Forespørgelsen finder også ID fra tabellen der indeholder "personer". Da jeg fjernede den fra forespørgelsen spillede det hele. Så den første kommentar fra aandersen + lidt Terry på forespørgelsen. Er det rimeligt at dele point?
Tak for point, og forsat god arbejdslyst med projektet :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.