Wie kan mij helpen met access

Status
Niet open voor verdere reacties.

fekkie

Gebruiker
Lid geworden
10 mei 2017
Berichten
14
Ik wil het aantal teams in het bijgevoegde bestand vergroten naar 18 of 19.
Hoe doe ik dit?

En ik wil de Team namen aanpassen.

Hoe doe ik dit?

Wie kan mij hierbij helpen?
 

Bijlagen

Laatst bewerkt:
door op F11 te drukken krijg je links een menu waar alle code staat. zoek daar de formulieren dat je wilt aanpassen en sla op :-)
 
Was dat maar zo makkelijk.

Het aantal teams en de namen kan ik niet veranderen.

Bekijk het bestand maar eens.
 
Laatst bewerkt door een moderator:
F11 en dan naar tabellen en dan rechtermuis tbl_namen --> openen


Die tabel leeggooien en dan opnieuw vullen met de namen die je hebt.

tbl_team zelfde verhaal

hopelijk heb je hier wat aan
 
Dan nog blijf ik een maximum van 12 teams houden.

Hij vult maar 12 teams

Alleen de teams die in Qry_PouleIndeling staan.

Hij maakt dus maar 12 teams en dit moeten er 18 of 19 worden.
 
Laatst bewerkt door een moderator:
Begin eens met de macro AutoExec weg te gooien, dan ben je van het startscherm af en kun je verder overal netjes bij. Verder zijn er een paar misverstandjes die even weggewerkt moeten worden. De belangrijkste: er is geen limiet aan het aantal records dat je kan toevoegen. Of je nu twee teams, 12 of 200 wilt toevoegen, dat mag allemaal. Wel kun je in een tabel een regel maken die checkt op bepaalde waarden, maar daar is geen sprake van. Kortom: in beginsel is de db gewoon te gebruiken en uit te breiden.
Ik ben eigenlijk wel benieuwd waarom je denkt dat je de db niet kan uitbreiden of veranderen...
 
@fekkie: Als je direct reageert op een bericht hoef je niet te quoten.
 
Nog even wat verder in de db gekeken, want het is natuurlijk wel een intrigerend probleem, en daarbij op een functie gestuit die het aantal ploegen inderdaad beperkt tot 12: de functie MaxPloegen. Deze vind je op de module (er is er maar één, dus niet zo moeilijk te vinden) Mdl_Berekening. Deze functie kun je an sich nog wel simpel aanpassen, maar ik vermoed dat er nogal wat afhankelijkheden zijn in de db die er voor kunnen zorgen dat je alsnog in de problemen komt als je er meer van maakt. Het aanpassen van namen zou niet zo problematisch moeten zijn, als je in de tabel zelf aanpast. Maar omdat deze db structuur op mij nogal 'alien' overkomt (ik zou 'm nooit zo gebouwd hebben) moet ik er veel meer tijd in steken om te zien wat er nu echt allemaal achter de schermen gebeurt. Ik neem aan dat je er geen Functioneel Ontwerp (meer) van hebt?
 
Het gaat mij er om teams van 6 spelers te krijgen.
En nu maakt hij maximaal 12 teams en daar gooit hij meer dan 6 spelers in.

Die autoexec is er voor mensen die niet met access om kunnen gaan.

Vandaar
 
Nee dit komt uit een hele oude database

Dit is alles wat ik heb.
 
Macro's zitten alleen maar in de weg, IMHO. Ik gebruik ze zo min mogelijk. Overigens breid je de vraag nu uit, want je hebt het nog niet eerder over het maximale aantal spelers gehad. Maar dat maakt verder niet zoveel uit.
Wat is (nu er geen FO is) het proces dat achter de db zit? Oftewel: hoe wil je de db gebruiken? Ik vermoed dat er op de een of andere manier een competitie moet worden ingevoerd met teams en spelers, en dat je op basis daarvan speelrondes wil toevoegen. Maar hoe je dat wilt doen, haal ik nog nergens uit.
 
Wat voor mij nu even belangerijk is dat ik teams van 6 personen krijg
En het niveau is belangerijk.


De rest is voor dit toernooi niet belangerijk.
De indeling van de wedstrijden enz
alleen de team samenstelling
 
Leg eerst eens uit wat nu precies de bedoeling is; je hebt dus teams ([tbl_Team]), en die wil je (gezien je vraag) ongelimiteerd kunnen toevoegen. Dat kan nu niet, want er zit een functie in die dat voorkomt (stopt bij 12). Teams bestaan uit deelnemers, dus je hebt een tabel [tbl_Namen]. Deelnemers koppel je aan een team, en dat kan je op twee manieren doen. Hoe, is afhankelijk van wat je wilt doen met je database. (En dáár heb je dus een Functioneel Ontwerp voor nodig, want dát beschrijft wat je uit de database wilt halen, en wat je daar voor nodig hebt en wat je er dus in moet stoppen.) Zo kan de regel zijn dat één deelnemer maar in één team mag zitten. Maar je kan ook een systeem bouwen waarbij één deelnemer in meerdere teams mag meedoen.

In het eerste geval (één speler, één team) kun je het team als eigenschap van de deelnemer zien, en zet je een TeamID in de [tbl_Namen]. Simpele oplossing, die wel een nadeel heeft (kom ik zo op). In het andere geval (speler kan in meerdere teams) werkt dit niet, en zul je een koppeltabel nodig hebben waarin je per team vastlegt welke spelers er in zitten. Zo'n tabel heb je: [Tbl_Teamlijst]. Heb je dus voor de tweede oplossing gekozen? Geen idee, want je hebt óók de eerste optie ingebouwd! Je legt dus twee keer vast in welk team een speler zit: in de tabel [tbl_Namen] en in de tabel [Tbl_Teamlijst]. En dat deugt dus niet. Kies voor één van de varianten, maar niet allebei.

Overigens heeft de eerste variant dus een groot nadeel: je hebt geen historie van de teams per speler. Zodra een speler aan een ander team wordt toegewezen, ben je de link met de uitslagen van het oude team kwijt, want je slaat nergens op dat een speler ook in een ander team zit. Persoonlijk zou ik dus altijd voor de tweede optie gaan, met een koppeltabel. Dan weer niet jouw variant, want die is m.i. ook onbruikbaar. Als je een speler toewijst aan een team, dan wil je daar op zijn minst een periode aan koppelen.
Stel dat een speler maar in één team mag zitten (wat mij trouwens ook logisch lijkt) dan mag je een speler dus maar één keer per competitiejaar of kalenderjaar (wellicht werk je op toernooibasis, dus dan gebruik je toernooi) worden gekoppeld aan een team. Is simpel in te richten overigens. Dan maak je dus een record aan waarin je de speler kiest, het team kiest, de competitie/jaar/toernooi invult etc. Een volgende competitie/jaar/toernooi doe je hetzelfde. En op die manier bouw je een historie op van deelnames van een bepaalde deelnemer.

Gaan we nog eens dieper in op de verschillende tabellen, dan zitten daar m.i. nog wel een paar andere fouten in. Zo heb je in de tabel [Tbl_Namen] de velden [Komt], [Aangemeld] en [Naam_Omschrijving]. De laatste heb je als sleutelveld gebruikt, maar doe moet echt weg, want dat veld is een samenstelling van de velden [Voornaam] en [Achternaam]. En alleen al op basis van die combinatie totaal ongeschikt als sleutelveld, want een combinatie als "Jan Smit" kan echt wel vaker dan één keer voorkomen. Gebruik voor sleutelvelden een unieke waarde, bijvoorbeeld een Autonummerveld als je geen code kan genereren die logisch is. En koppel de overige tabellen op basis van dát sleutelveld. Maar wat doen de velden [Komt] en [Aangemeld] in deze tabel? Geen idee. Het veld [Komt] zit namelijk óók al in de tabel [Tbl_Teamlijst]. Sowieso een raar veld, want in beginsel mag je er vanuit gaan dat een deelnemer die zich ergens voor aanmeldt, ook komt. Hooguit kun je de aanwezigheid registreren zodat je achteraf kunt zien wie er wel en wie niet zijn geweest.

Goed, kijken we verder naar de opzet. Je werkt met een m.i. incomplete toernooiregistratie, want ik vind nergens een datum terug, alleen Poulenummers. Dat werkt wel, als het om een eenmalig evenement gaat. (In dat geval hoef je natuurlijk ook geen spelershistorie op te bouwen). Maar als het om een evenementenregistratie gaat, en er dus meerdere evenementen moeten worden vastgelegd, dan moet je elk evenement apart vastleggen (waar, wanneer, hoeveel ploegen, aantal deelnemers per ploeg etc) en in je wedstrijdindeling ([tbl_Poules]) ook een verwijzing opnemen naar die tabel. Dan kun je dus elke competitie maken die je wilt (kan die rare functie ook weg), daar elke pouleindeling bij maken die je wilt en elke deelnemer bij zetten die je wilt.

Kortom: ik hoop dat ik je een beetje duidelijk heb gemaakt dat je eigenlijke vraag nog best lastig te beantwoorden is, omdat je database onvoldoende gestructureerd is om e.e.a. goed vast te leggen. Nogmaals: de inrichting van je database wordt bepaald door het "Programma van eisen" dat je hebt. En dat is dus een document waarin je beschrijft wat je nu precies wilt doen met de database. Opmerkingen als:

Wat voor mij nu even belangerijk is dat ik teams van 6 personen krijg
..
De rest is voor dit toernooi niet belangrijk. De indeling van de wedstrijden enz alleen de team samenstelling
boezemt wat dat betreft niet veel vertrouwen in, want die aspecten zijn nu juist wél belangrijk: ze bepalen namelijk wel degelijk hoe je de database moet bouwen om dát te kunnen doen wat je er uiteindelijk mee wilt doen. Als je een auto laat bouwen en je vergeet te zeggen dat je in de toekomst óók minstens 6 kratten bier mee wilt kunnen in de bagageruimte, dan krijg je een autootje zoals de eerste Ford Ka, met een handschoenenvakje op de plek waar een normale auto de kofferbak heeft :).
 
Doel:
Spelers op niveau indelen in 18 teams.
BV.
Lora de Jong Dames 1 kan komen in team 1

Janine Hofstetter Dames 1 kan niet in team 1 komen

Zelfde het geval bij H1 en H2

Jeugd en Recreatie mogen wel verdeeld worden over de overige teams.

Dames en heren apart verspreid
En jongens en meisjes ook

En dan in teams van niet meer dan 6 of 7 personen in 1 team.
 
Laatst bewerkt:
Ik heb vandaag waardes proberen aan te passen in de Mdl_Berekening maar als ik dat dan gaat het volgens mij niet helemaal goed als ik hier teams bij doe.
 
Ik heb nu dit:

Code:
Option Compare Database
Option Explicit
Public SurfNaam As String
Public SurfDatum As Date
Public MaxPlg As Integer
Public MaxKomen As Integer
Public TeamTellerNr As Integer
'Veld 1 voor 06 08 10 12
Public Const Veld1 = "Poule 1"
'Veld 2 voor 06 08 10 12
Public Const Veld2 = "Poule 2"
'Veld 3 voor          12
Public Const Veld3 = "Poule 3"
'Poule1 voor 06 08 10 12
Public Const Poule1 = "Poule 1"
'Poule2 voor    08 10 12
Public Const Poule2 = "Poule 2"
'Poule3 voor          12
Public Const Poule3 = "Poule 3"
'team 1 voor 06, poule 1 team 1 voor 08 10 poule 1 team 1 voor 20
Public Const Teams01 = "Team1"
'team 2 voor 06  poule 2 team 1 voor 08 10 poule 2 team 1 voor 20
Public Const Teams02 = "Team2"
'team 3 voor 06, poule 1 team 2 voor 08 10 poule 3 team 1 voor 20
Public Const Teams03 = "Team3"
'team 4 voor 06, poule 2 team 2 voor 08 10 poule 1 team 2 voor 20
Public Const Teams04 = "Team4"
'team 5 voor 06, poule 1 team 3 voor 08 10 poule 2 team 2 voor 20
Public Const Teams05 = "Team5"
'team 6 voor 06, poule 2 team 3 voor 08 10 poule 3 team 2 voor 20
Public Const Teams06 = "Team6"
'team 7 voor 06, poule 1 team 4 voor 08 10 poule 1 team 3 voor 20
Public Const Teams07 = "Team7"
'team 8 voor 06, poule 2 team 4 voor 08 10 poule 2 team 3 voor 20
Public Const Teams08 = "Team8"
'team 9 voor 06, poule 1 team 5 voor 08 10 poule 3 team 4 voor 20
Public Const Teams09 = "Team9"
'team 10 voor 06, poule 2 team 5 voor 08 10 poule 1 team 4 voor 20
Public Const Teams10 = "Team10"
'team 11 voor 06, poule 1 team 6 voor 08 10 poule 1 team 5 voor 20
Public Const Teams11 = "Team11"
'team 12 voor 06, poule 2 team 6 voor 08 10 poule 1 team 5 voor 20
Public Const Teams12 = "Team12"
'team 13 voor 06, poule 1 team 7 voor 08 10 poule 1 team 6 voor 20
Public Const Teams13 = "Team13"
'team 14 voor 06, poule 2 team 7 voor 08 10 poule 1 team 6 voor 20
Public Const Teams14 = "Team14"
'team 15 voor 06, poule 1 team 8 voor 08 10 poule 1 team 7 voor 20
Public Const Teams15 = "Team15"
'team 16 voor 06, poule 2 team 8 voor 08 10 poule 1 team 7 voor 20
Public Const Teams16 = "Team16"
'team 17 voor 06, poule 1 team 9 voor 08 10 poule 1 team 8 voor 20
Public Const Teams17 = "Team17"
'team 18 voor 06, poule 2 team 9 voor 08 10 poule 1 team 8 voor 20
Public Const Teams18 = "Team18"
'team 19 voor 06, poule 1 team 10 voor 08 10 poule 1 team 9 voor 20
Public Const Teams19 = "Team19"
'team 20 voor 06, poule 2 team 10 voor 08 10 poule 1 team 9 voor 20
Public Const TeamsExtra = "Team21"
Function TournooiNaam() As String
    TournooiNaam = SurfNaam
End Function
Function TournooiDatum() As Date
    TournooiDatum = SurfDatum
End Function
Function MaxAantalKomen(Maximum As Integer) As Integer
    If Maximum = -1 Then MaxKomen = MaxKomen + 1
End Function
Function MaxPloegen(Max As Integer) As Integer
    Dim MaxPloegenHulp As Variant
        MaxPloegenHulp = Max / 6
    If MaxPloegenHulp <= 8 Then
        MaxPloegen = 6
    ElseIf MaxPloegenHulp <= 10 Then
        MaxPloegen = 8
    ElseIf MaxPloegenHulp <= 12 Then
        MaxPloegen = 10
    ElseIf MaxPloegenHulp > 12 Then
        MaxPloegen = 12
    ElseIf MaxPloegenHulp > 14 Then
        MaxPloegen = 14
    ElseIf MaxPloegenHulp > 16 Then
        MaxPloegen = 16
    ElseIf MaxPloegenHulp > 18 Then
        MaxPloegen = 18
    ElseIf MaxPloegenHulp > 20 Then
        MaxPloegen = 20
    End If
        MaxPlg = MaxPloegen
End Function

Function TeamNummer(MaxTeamNr As Integer) As Integer
    TeamTellerNr = TeamTellerNr + 1
    TeamNummer = TeamTellerNr
    If MaxTeamNr < TeamTellerNr Then TeamTellerNr = 1: TeamNummer = TeamTellerNr
End Function

Function TeamsNaam(TeamNr As Integer, PouleNr As Integer) As String
    Select Case TeamNr
        Case 1
            TeamsNaam = Teams01
        Case 2
            TeamsNaam = Teams02
        Case 3
            TeamsNaam = Teams03
        Case 4
            TeamsNaam = Teams04
        Case 5
            TeamsNaam = Teams05
        Case 6
            TeamsNaam = Teams06
        Case 7
            TeamsNaam = Teams07
        Case 8
            TeamsNaam = Teams08
        Case 9
            TeamsNaam = Teams09
        Case 10
            TeamsNaam = Teams10
        Case 11
            TeamsNaam = Teams11
        Case 12
            TeamsNaam = Teams12
        Case 13
            TeamsNaam = Teams13
        Case 14
            TeamsNaam = Teams14
        Case 15
            TeamsNaam = Teams15
        Case 16
            TeamsNaam = Teams16
        Case 17
            TeamsNaam = Teams17
        Case 18
            TeamsNaam = Teams18
        Case 19
            TeamsNaam = Teams19
        Case 20
            TeamsNaam = "Vrijwillig aangewezen"
        Case 41
            TeamsNaam = "1ste eerste uit poule's"
        Case 42
            TeamsNaam = "2de  eerste uit poule's"
        Case 43
            TeamsNaam = "3de  eerste uit poule's"
        Case 51
            TeamsNaam = "1ste tweede uit poule's"
        Case 52
            TeamsNaam = "2de  tweede uit poule's"
        Case 53
            TeamsNaam = "3de  tweede uit poule's"
        Case 61
            TeamsNaam = "1ste derde  uit poule's"
        Case 62
            TeamsNaam = "2de  derde  uit poule's"
        Case 63
            TeamsNaam = "3de  derde  uit poule's"
        Case 71
            TeamsNaam = "1ste vierde uit poule's"
        Case 72
            TeamsNaam = "2de  vierde uit poule's"
        Case 73
            TeamsNaam = "3de  vierde uit poule's"
        Case 81
            TeamsNaam = "Laatste uit " & Poule1
        Case 83
            TeamsNaam = "Laatste uit " & Poule2
        Case 82
            TeamsNaam = "Derde uit " & Poule1
        Case 84
            TeamsNaam = "Derde uit " & Poule2
        Case 91
            TeamsNaam = "Eerste uit " & Poule1
        Case 93
            TeamsNaam = "Eerste uit " & Poule2
        Case 92
            TeamsNaam = "Tweede uit " & Poule1
        Case 94
            TeamsNaam = "Tweede uit " & Poule2
        Case 99
            TeamsNaam = "Tied veur pafke"
    End Select
End Function
Function VeldNr(Veld As String)
    Select Case LefTeams(Veld, 1)
        Case "1"
            VeldNr = Veld1
        Case "2"
            VeldNr = Veld2
        Case "3"
            VeldNr = Veld3
    End Select
End Function
Function PouleNr(TeamNr As Integer, Poules As Integer) As String
    MaxPlg = MaxKomen
    Select Case MaxPlg
        Case 8, 10
        Select Case TeamNr
            Case 1, 3, 5, 7, 9
                PouleNr = Poule1
            Case 2, 4, 6, 8, 10
                PouleNr = Poule2
            Case 81, 83
                PouleNr = "Verliezers"
            Case 91, 93
                PouleNr = "Winnaars"
            Case 99
                PouleNr = "Pauze"
        End Select
    End Select
    Select Case MaxPlg
        Case 6
        PouleNr = Poule1
    End Select
    Select Case MaxPlg
        Case 12
        Select Case TeamNr
            Case 1, 4, 7, 10
                PouleNr = Poule1
            Case 2, 5, 8, 11
                PouleNr = Poule2
            Case 3, 6, 9, 12
                PouleNr = Poule3
            Case 41, 42, 43, 51, 52, 53, 61, 62, 63, 71, 72, 73
                PouleNr = "Finale Ronden"
            Case 99
                PouleNr = "Pauze"
        End Select
    End Select
End Function
'Vragen om een input gegeven
Function Vragen(VraagOm As String) As String
    Dim strBericht As String, strInvoer As String
        strInvoer = InputBox("Geef selectie waarde voor " & VraagOm)
    If MsgBox("Was " & UCase(strInvoer) & " Uw selectie ", vbYesNo, VraagOm) = vbNo Then
        strInvoer = InputBox("Geef selectie waarde voor " & VraagOm)
    Else
        Vragen = UCase(strInvoer)
        Exit Function
    End If
    Vragen = UCase(strInvoer)
End Function

Function OmzettenAchterNaam(AchterNaamIn As String) As String
    Dim T, Lengte, Positie As Integer
    Lengte = Len(AchterNaamIn)
    For T = 1 To Lengte
        If Mid(AchterNaamIn, T, 1) = " " Then
            Positie = T
            T = Lengte + 1
        End If
    Next T
    OmzettenAchterNaam = Right(AchterNaamIn, Lengte - Positie)
End Function
Function OmzettenVoorNaam(VoorNaamIn As String) As String
    Dim T, Lengte, Positie As Integer
    Lengte = Len(VoorNaamIn)
    For T = 1 To Lengte
        If Mid(VoorNaamIn, T, 1) = " " Then
            Positie = T
            T = Lengte + 1
        End If
    Next T
    OmzettenVoorNaam = Left(VoorNaamIn, Positie)
End Function
Function CheckScore(TeamZoek As Integer, TeamSpeel As Integer, Score As Integer) As Integer
    If TeamZoek = TeamSpeel Then
        CheckScore = Score
    Else
        CheckScore = Score * -1
    End If
End Function
Function TeamZoeken(TeamZoek As Integer, TeamThuis As Integer, TeamUit As Integer) As Integer
    If TeamZoek = TeamThuis Or TeamZoek = TeamUit Then
        TeamZoeken = TeamZoek
    Else
        TeamZoeken = 0
    End If
End Function
Function PuntenBepalen(PuntenVerdeling As Integer) As Integer
    If PuntenVerdeling > 0 Then PuntenBepalen = 3
    If PuntenVerdeling = 0 Then PuntenBepalen = 1
    If PuntenVerdeling < 0 Then PuntenBepalen = 0
End Function
 
Laatst bewerkt door een moderator:
Ik ga deze code niet bekijken als die niet in CODE tags is opgemaakt; ik word al behandeld voor een muisarm :). Kun je dat alsnog even doen?
 
Probleem is opgelost.

Heb alles aangepast.

Was wel veel werk
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan