Willekeurige query in subform

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
Beste forumleden,
Ik heb een vraag of het volgende mogelijk is.
Ik heb een form met een subform. De basis van mijn subform is een query.
Het forms en het daarbij behorende subform wordt getoond op basis van een cijferkeuze.
De keuze is van 16 tot 100.
Dit betekend dat ik 85 forms met subforms moet maken.
Als ik 1 form en subform maakt met de keuze voor de gewenste query scheelt dat een hoop werk.
B.v. het getal is 22 dan moet query nr 22 (Qry_Schema22spelers) de basis van het subform zijn.
Ik wil de met Access 2010 gemaakte database bijsluiten. Het bestand in zip of rar formaat is bijna 4mb groot.
Uploaden wil niet? Wellicht kan ik het tekstueel uitleggen of ander wil ik mijn testbestand graag op een andere manier toezenden.
In het bestand is bij openen kies optie 3: Spelers selecteren
Vervolgens in het volgend scherm Knop Toon geselecteerden (Er zijn al 22 geselecteerd)
In het volgend scherm de knop Toon wedstrijdschema.

Met als basis het aantal geselecteerden doet deze knop doet het volgende:
Code:
Function MaakSchemaTabel()[/I]
Dim Teller
Teller = Forms!Frm_GeselecteerdeSpelers!Teller
On Error Resume Next
DoCmd.SetWarnings False 'Waarschuwingen uitschakelen
If Forms!Frm_GeselecteerdeSpelers.Teller = 22 Then
DoCmd.OpenQuery "Qry_Schema22spelers_MaakTabel"
End If
DoCmd.SetWarnings True 'Waarschuwingen inschakelen
End Function
DoCmd.OpenForm "Frm_WedstrijdschemaSpelers", acNormal, "", "", , acNormal

Nu wordt het Form en subform getoond waar mijn vraag overgaat.
De basis van het subform is de query Qry_Schema22spelers.
Nu mijn vraag kan middels VBA de query aan het subform worden toegewezen.
Sytse
 
Zet je db maar even online, wikisend.com bijvoorbeeld, want ik krijg het hele sterke vermoeden dat je erg onhandig bezig bent. Alleen het feit al dat je zo te zien 85 identieke queries hebt, is een indicatie dat het allemaal niet optimaal in elkaar steekt. En dan zeg ik het waarschijnlijk nog heel voorzichtig...
 
Beste Octafisch
Ik heb het gezonden naar Wikisend http://wikisend.com/download/325236/test.rar

Aangezien het in test fase is heb ik alleen nog maar de queries(Qry_Schema16spelers) 16 t/m 24 gemaakt.
Een toelichting, het programma moet gebruikt kunnen worden voor een petanque toernooi waar maximaal 2600 spelers aan mee kunnen doen.
(Per poule 16 tot 100 spelers)
Voor een toernooi onderdeel Doublette Mêlee heb ik spelschema's heb in een tabel gezet.
De spelschema's kunnen niet random gemaakt worden(althans ik kan het niet)
De reden is dat er afhankelijk van het aantal deelnemers er 2 tegen 2 of 3 tegen 2 of 3 tegen 3 of of drie tegen drie en drie tegen 2 in 1 ronde gespeeld kan worden.
Tevens mogen spelers dan in de volgende ronde niet met dezelfde spelers en tegenspelers spelen en maar 1 maal in een team van 3 spelers spelen.
Het zijn dan ook geen teams, maar elke speler vergaart individueel zijn eigen punten.
Er zijn 5 speelronden.
Gecompliceerd en voor mij een hersenbreker. Niet alleen voor mij want het is landelijk in verschillende andere programma's ook niet gelukt.
Daar wordt wel met random gewerkt en dan gebeurd het altijd dat in de in de verschillende ronden dezelfde teams ontstaan die dan tegen elkaar spelen of dat spelers meerdere malen in een team van 3 personen zit. Wat altijd veel gemopper oplevert. Er wordt dan veel handmatig met papier gewerkt.
Ik heb de verschillende programmeurs digitaal gesproken. Zij wisten geen oplossing te bedenken vandaar mijn poging met de tabellen en de schema's.
Ik heb niet alle tabellen in het voorbeeld gezet aangezien het dan aardig groot wordt.
Wellicht heb ik met deze toelichting het e.e.a. verder kunnen uitleggen.
Ik ben zeer benieuwd naar je reactie en bij voorbaat bedankt hiervoor.
Sytse
 
Je kunt een hele hoop winnen door je structuur inderdaad aan te pakken. Eerst even een klein dingetje om op te warmen ;) : in de tabel [LedenJBV] heb je een veld [Naam], maar dat kan weg, want je hebt al velden voor voornaam en achternaam. Je slaat dus gegevens dubbel op, en dat doe je nooit in een database. Verder kun je velden best samenvoegen, maar als daar ogenschijnlijk lege waarden in staan (je ziet niks) maar daar blijkt dan consequent een spatie in te staan, dan krijg je rare strings. Dus een leeg veld moet ook wel echt leeg zijn...
Dan de grotere problemen: de tabellen [Tbl_Schema16spelers] t/m [Tbl_Schema24spelers] zijn zo te zien identiek, en dat hoort dus allemaal in één tabel thuis; nu is de structuur helemaal niet genormaliseerd. En dat is zo makkelijk (ook voor jezelf) :).
Hier zou ik zo ook weinig chocola van kunnen maken.
 
Voor een aantal zaken mbt tabel verbetering heb je direct gelijk.
Alleen er is ook een opzet gemaakt voor een ledenregistratie.
De tabellen [Tbl_Schema16spelers] t/m [Tbl_Schema24spelers] lijken misschien identiek maar dat zijn ze niet.
16 is voor 16 spelers en de volgende tabellen hebben steeds 1 speler meer.
Zie hiervoor mijn eerdere uitleg. Die tabellen zijn dan ook zorgvuldig gemaakt op basis van wedstrijdschema's die ervoor moeten zorgen dat op individuele basis elke speler in 5 ronden hooguit 1 x in een team zit met 3 spelers en nooit meer met dezelde maat tegen dezelfde tegenstander speelt. Kijk een naar tabel 16 en 17. Je zien dan direkt de verschillen, tw er zijn dan teams met 3 spelers.
Wellicht zie je dan ook mijn queries die hierop gebaseerd zijn.
Blijft mijn vraag of het mogelijk is om op basis van het aantal geselecteerden b.v. 22 in het subform de gewenste query aan te wijzen. Zonder dat ik voor elke query een form en subform moet maken.
Sytse
 
De tabellen [Tbl_Schema16spelers] t/m [Tbl_Schema24spelers] lijken misschien identiek maar dat zijn ze niet.
Dat zie ik dan toch anders, want ik vind ze wél identiek. Je denkt teveel in Excel vormen, niet in database modellen. Hooguit kun je (in de ene tabel die je nodig hebt) een extra veld maken waarin je de spelvorm zet, zodat je je indeling kunt maken. Met dus voor elke indeling gewoon één formulier en één query.
 
Ik probeer je te volgen.
Vanuit de onmogelijk om in Access de wedstrijdschema's te maken heb ik de oplossing in de op Excel lijkende tabellen gemaakt.
Maar ik zal proberen of het vanuit een andere invalshoek mogelijk is.
 
Form met willekeurige query of tabel

De hele base ben ik aan het veranderen maar mijn vraag is nog steeds.
Kan ik een form openen vanuit VBA met een willekeurige query of tabel.
De form heeft dan geen geen recordbron die moet dan middels de VBA DoCmd ingevult worden.
Wellicht lees ik de uitleg niet goed maar hieronder staat toch dat bij Filtername de query of tabel ingevult kan worden.
Expressie.OpenForm(FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)
De uitleg bij: FilterName is, dat dit een string-uitdrukking is t.w. de geldige naam van een query in de huidige database.
Volgens mij denk ik dan dat het volgende Do.cmd moet werken. Jammer, het form wordt wel geopend maar er zijn geen gegevens(die wel aanwezig zijn.
Ik maak dan een Form zonder recordbron. Bij de filtername noem ik dan de naam van de query. Blijkbaar is de naam van de query alleen nodig om te gebruiken als filter.
De recordbron moet toch ingevuld zijn. Of heb ik het mis?
Code:
DoCmd.OpenForm "Frm_Testen", acNormal, "QryTest", , , acNormal
Sytse:rolleyes:
 
De form heeft dan geen geen recordbron die moet dan middels de VBA DoCmd ingevult worden.
Dat mag je wel willen, maar dat kan helemaal niet. Dus je leest de uitleg inderdaad niet goed. Overigens ligt dat niet aan de uitleg, want die is niet echt ingewikkeld, vind ik:
... maar hieronder staat toch dat bij Filtername de query of tabel ingevult kan worden.
Inderdaad, dat is exact wat het doet :). Een filter toepassen op je formulier. En filteren kun je alleen maar op iets wat er is: een recordset dus die onder je formulier hangt. En dat is nu dus net wat je níet hebt.
 
Bedankt coor je uitleg. Blijkt dat ik iets wil wat biet mogelijk is.
Sytse
 
Laatst bewerkt:
Ik heb niet gezegd dat het niet mogelijk is :). Je hebt op een formulier 2 gebeurtenissen die je kunt gebruiken: <Bij Openen> en <Bij laden>. Bij één van die twee kun je met VBA een recordsource onder het formulier hangen en dan werkt je formulier dus met een flexibele databron. Mits uiteraard de velden overeenkomen.
Overigens werk ik al lang niet meer zo; ik hang rapporten en formulieren liever aan een vaste bron (query dus) en verander met VBA dan de SQL van die bron. Op die manier werkt je formulier altijd, en het aanpassen van de query kun je op een eerder moment doen. Bijvoorbeeld op het formulier waarop je de selectie maakt die je in het formulier terug wilt zien.
 
Je hebt helemaal gelijk dat het beter is om met een vaste bron te werken.
Middels een brainwave had ik de volgende oplossing bedacht.
De selectie-query is in een tabelmaak-query veranderd.
In alle betrokken queries zijn de velden gelijk.
Er wordt dan telkens een nieuwe tabel gemaakt (de oude wordt overschreven).
Vervolgens het form openen met de tabel die afhankelijk van het aantal records groter of kleiner is.
Ik kan dan 1 form of rapport gebruiken en daarin worden dan alle gewenste gegevens getoond.
Voor mijn 84 queries is dit m.i. de snelste en beste oplossing.
Bedankt voor het meedenken.
Sytse :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan