Gerelateerde bestanden koppelen en formulieren maken

Status
Niet open voor verdere reacties.

ReijerdH

Gebruiker
Lid geworden
1 apr 2010
Berichten
93
Goedemiddag,

Ik ben bezig om een muziekbibliotheek aan te leggen voor onze muziekvereniging. Volgens mij heb ik middels de gemaakt tabellen de redundantie eruit gehaald. ik weet alleen niet hoe ik deze tabellen kan koppelen zodat de juiste gegevens in of uit de juiste tabellen komen. Ik las dat als je dat wilt laten werken de formulieren ook aangepast moeten zijn om de juiste tabel te benaderen. Ik hoop dat iemand mij hiermee op weg wil helpen. Ik heb geprobeerd om het access bestand te uploaden maar kreeg een foutmelding. De hoofdtabel is tblPartituur (zie bijlage) de andere tabellen heb ik gemaakt om redundantie te voorkomen.

Alvast bedankt.

ReijerdH
 

Bijlagen

  • Tabellen en Formulier.jpg
    Tabellen en Formulier.jpg
    34,2 KB · Weergaven: 54
  • tblLocatie.jpg
    tblLocatie.jpg
    56,6 KB · Weergaven: 55
  • tblPartituur.jpg
    tblPartituur.jpg
    129,7 KB · Weergaven: 62
Access bestanden kun je niet zonder meer uploaden, die worden geweigerd. Wel kun je ze zippen. Ik zou de db dan eerst comprimeren, en dan er een zip bestand van maken. Dat kijkt een stuk makkelijker dan op basis van ontwerpschermen van je tabel. Dat zegt mij niet zo heel veel op dit moment.
 
Ik las dat als je dat wilt laten werken de formulieren ook aangepast moeten zijn om de juiste tabel te benaderen.
Ik weet niet waar je dit gelezen hebt, maar niet in de cursus/handleiding die ik voor HelpMij heb gemaakt :). De opmerking is in mijn ogen in ieder geval goed fout. Formulieren zijn in mijn ogen de laatste stap in het bouwproces, samen met Rapporten. Eerst en vooral moeten je tabellen in orde zijn, en dus de relaties tussen die tabellen.

Wat je wilt bereiken met de database heb je nog niet aangegeven, en zonder die informatie kan ik ook niet zeggen of je tabellen in orde zijn of niet.
 
Aanvulling Access Muziekbibliotheek

OctaFish bedankt voor je reactie.

Ik wil met deze database de bladmuziek archiveren die onze vereniging heeft. Er is tot nu toe een summier lijstje waar ik niets mee kan en ben begonnen om met mijn beperkte kennis een database te bouwen waarin ik de gegevens kan noteren.

De velden van mijn hoofdtabel (tblPartituur) bevat alle velden die belangrijk zijn voor het archiveren. Deze velden staan in de afbeelding tblPartituur die ik heb geupload.

Omdat er van 1 titel soms meerdere uitvoeringen zijn heb ik voor de titel een aparte tabel gemaakt, dit geld ook voor de SetType (Orkestrale Bezetting b.v. Fanfare of Harmonieorkest), Grade (moeilijkheidsgraad van het stuk), Genre (b.v. Kerst, Jeugd of seizoen gerelateerde muziek), Componist (Een componist kan meerdere stukken geschreven hebben), Arrangeur(Er zijn meerdere stukken aanwezig van dezelfde arrangeur) en Locatie (Het stuk kan zich op 1 van de 3 lokaties bevinden). Met die reden heb ik de verschillende tabellen gemaakt. In de tabellen heb ik de toepassing toegelicht. Ik zal het bestand zippen en hierbij voegen.

Alvast bedankt ReijerdH.
 

Bijlagen

  • MuziekBibliotheek.rar
    52,8 KB · Weergaven: 26
Laatst bewerkt door een moderator:
Ik zal er zo even naar kijken. Mits je belooft nooit meer nodeloos te quoten en voortaan de knop <Reageer op Bericht> te gebruiken :).
 
OK, het eerste dat opvalt: je hebt de stamtabellen (Genre, Componist etc) wel gemaakt, maar je hebt ze niet gebruikt in de tabel Partituur. Daar heb je wél velden voor aangemaakt, maar dat zijn tekstvelden. En je hebt daar de complete naam van de componist etc. in gezet. Dat is niet de manier waarop je met stamtabelellen werkt. Neem partituur #2 (Saint Paul's Cathedral), die heeft als componist "Filip Ceunen" In je tabel Componisten staat deze componist inderdaad, met ComponistId 1. Je zou dus in Partituren een veld ComponistID moeten hebben, waarin je de waarde 1 neerzet. En niet de naam van de componist. Die hoort niet thuis in deze tabel.
Welke problemen jouw opzet oplevert, zie je al in partituur #3 (Back to the Future), waarin je de componist "Alan Silvestri" opvoert. Die bestaat dus niet in de tabel Componisten. Daarnaast heb je een tabel Grade, waar niets in staat, maar je voert in de partituur tabel al wél Grades op. Dat mag dus niet.
E.e.a. (de problemen) worden veroorzaakt doordat je de tabellen niet gekoppeld hebt in het venster Relaties. Had je dat wél gedaan, dan had je deze problemen al kunnen herkennen.

Wat je moet doen is in weze simpel: in de tabel waarin je gekoppelde waarden uit je stamtabellen wilt laten zien (tblPartituur dus) moet je voor alle waarden die uit stamtabellen komen numerieke velden maken. Die numerieke velden koppel je dan aan de stamtabellen met een één-op-veel relatie. Oftwel: één componist kan meerdere composities schrijven. Het principe dat je zelf ook al beschreef.

Als je al veel records hebt ingevoerd, dan zou ik de koppelvelden eerst toevoegen aan de tabel tblPartituur, en met bijwerkqueries (op basis van de stamtabellen) de numerieke waarden invullen. Daarna kun je alle tekstvelden die je nu gebruikt verwijderen. Bij een vrijwel lege tabel (met partituren) kun je ook overwegen om de velden om te zetten (de velden worden dan leeggemaakt, want in een numeriek veld past geen tekst) en dan handmatig invullen. Dat is vermoedelijk dan sneller.

Voor het uiteindelijk gebruik maak je uiteraard formulieren, waarin je keuzelijsten met invoervak gebruikt om de waarden (componist, genre, arrangeur) te kiezen. Je slaat hierbij automatisch het juiste veld op (de sleutelID) maar in de keuzelijst (en het formulier) zie je de namen, zoals je dat hebt vastgelegd in de definitie van de keuzelijst. En dat werkt dus perfect.

Op dat formulier kun je aan die keuzelijst nog een actie hangen voor waarden (componisten, arrangeurs etc.) die nog niet in de stamtabel zitten, en waarmee je die personen/waarden dan eerst toevoegt aan die stamtabellen. Dat doe je dan met de gebeurtenis <Bij niet in lijst>. En op die manier hou je de database correct in orde.
 
OctaFish, Bedankt voor je info. Ik ga ermee aan de slag. Groeten, ReijerdH
 
Relatie aangepast

OctaFish, ik heb de relatie van titel aangepast in titelID en deze numeriek gemaakt. De relatie aangebracht en dat ziet er nu uit als op de 2 afbeeldingen. Wil je even laten weten of dit zo goed is want in mijn gedacht zouden de gegevens samenkomen in de tblPartituur, maar als ik de tabel tblTitel open zie ik dat de gegevens in deze tabel samenkomen. Alvast bedankt voor je hulp. ReijerdH.Relatie Titel.jpgRelatie Titel.jpgRelatie Titel.jpg
 

Bijlagen

  • Tabel tblTitel.jpg
    Tabel tblTitel.jpg
    80,1 KB · Weergaven: 58
Nooit naar tabellen kijken :). En zeker niet naar de plusjes :D. Je relatie ziet er nu goed uit, en dat betekent dus dat je vanuit Titels nu ook Partituren ziet. Maar waarom zou je dat doen? Je hoort eigenlijk niet in tabellen te werken.
Kortom: je bent op d goede weg :)
 
Formulier maken

OctaFish goedenavond, alle relaties zijn gemaakt en de tabellen gevuld met de juiste gegevens. Nu wil ik graag een formulier maken waarmee ik de tabellen verder kan vullen. Hoe krijg ik de juiste velden in het formulier?
 

Bijlagen

  • Alle Relaties.jpg
    Alle Relaties.jpg
    85,9 KB · Weergaven: 52
De tabellen zien er prima uit; je kunt nu een formulier maken op basis van tblPartituur, en de velden die gekoppeld zijn vervang je dan door Keuzelijsten met invoervak. Als je dat voor het eerst doet, is het handig om daar de wizard bij te gebruiken, dan kun je rustig bekijken wat er mogelijk is. Die wizard zal dan het sleutelveld verbergen (dat wil je toch niet zien) en van de velden die je wel wilt zien, kun je in de wizard de breedte van de kolommen instellen. Kan achteraf uiteraard ook, maar als je het in de wizard doet, heb je gelijk een goed voorbeeld.

Wat de wizard niet kan, is velden samenstellen. Als je de complete Nama van de component/arrangeur wilt zien, dan moet je dat handmatig maken in het ontwerpscherm van de query die onder de keuzelijst hangt (Rijbron).
 
OctaFish goedemiddag,

de indeling van het invoerformulier heb ik nu voor elkaar. Keuzelijsten met invoervak zijn gekoppeld aan de hulptabellen. Als ik nu iets wil toevoegen lukt dat niet, waarschijnlijk omdat ik de hulptabellen niet kan bijwerken? Hoe moet ik dit aanpakken, als je voor 1 veld een voorbeeld kunt geven kan ik het verder zelf uitwerken denk ik.

Groeten ReijerdH.
 

Bijlagen

  • MuziekBibliotheek.rar
    66 KB · Weergaven: 23
  • Bijwerken velden.jpg
    Bijwerken velden.jpg
    45,9 KB · Weergaven: 49
Ik heb in bericht #7 uitgelegd dat je daar een gebeurtenis voor hebt: de gebeurtenis <Bij niet in lijst> (NotInList). Afhankelijk van wat je precies in de hulptabellen opslaat, kun je daarmee of een formulier, of een query uit laten voeren waarmee je de nieuwe waarden toevoegt aan de tabellen.
Ik heb hier regelmatig voorbeelden van gepost in het forum, dus als je daar even op zoekt, kun je hopelijk zelf al voorbeelden vinden. Maar ik kijk vandaag uiteraard ook wel even naar je db.
 
Eerst de algemene zaken:
1. de velden op je formulier moeten nu ook worden ingesteld op de aangepaste velden in je tabel [tblPartituur]. Dus het 'oude' veld [Titel] moet je koppelen aan [TitelID].
En dat voor alle velden met koppeltabellen.
2. Je moet die tekstvelden omzetten naar keuzelijsten met invoervak. Dat doe je door op het veld [TitelID] rechts te klikken, en vervolgens <Wijzigen in> te kiezen, en dan <Keuzelijst met invoervak>
Ook weer voor alle velden uiteraard.
3. Vervolgens moet je die keuzelijsten koppelen aan de tabellen. Voor TitelID is dat de rijbron: SELECT TitelID, Titel FROM tblTitel Order By Titel;
Twee velden dus. Ook weer voor alle keuzelijsten uiteraard :).
4. Als laatste moet je de keuzelijsten juist instellen. Als volgt: Aantal kolommen: 2; Kolombreedten: 0cm;5cm; Lijstbreedte: 5,7cm. Dit is weer voor TitelID.

Als je dat gedaan hebt, moet je formulier in ieder geval goed werken voor het kiezen van bestaande records.
 
OctaFish, na een poosje zoeken zag ik wat je bedoeld.
In het invoervak Titel in het formulier Partituur moet ik iets programmeren.
Zie afbeelding.
Alleen schiet mijn kennis te kort om hier de juiste code aan toe te voegen.
Kun je mij uitleggen en laten zien hoe ik dit dan aan het werken krijg?

Groeten,
ReijerdH
 

Bijlagen

  • Bij niet in lijst.jpg
    Bij niet in lijst.jpg
    25,8 KB · Weergaven: 42
Inmiddels ben ik alweer iets verder en heb in het veld Titel deze code toegevoegd (gevonden op het internet). Ik krijg na het toevoegen echter de volgende foutmelding. Kan een object niet vinden (zie afbeelding). Wat heb ik fout gedaan?
 

Bijlagen

  • Bijwerken velden.jpg
    Bijwerken velden.jpg
    45,9 KB · Weergaven: 45
  • Toevoegen gelukt.jpg
    Toevoegen gelukt.jpg
    33,7 KB · Weergaven: 45
  • Foutmelding.jpg
    Foutmelding.jpg
    53,1 KB · Weergaven: 51
Op basis van je relaties is het op te lossen door met een query de nieuwe waarde in de tabel tblTitel te zetten.
Voor de code krijg je dan zoiets: (ik heb de naam van je keuzelijst alvast aangepast, geef objecten altijd zinvolle namen ;))
Code:
Private Sub cboTitel_NotInList(NewData As String, Response As Integer)
Dim msg As String, CR As String, strSQL As String, Result as Variant

    CR = Chr$(13)
    If NewData = "" Then Exit Sub
    msg = "'" & NewData & "' staat niet in de lijst." & CR & CR & "Wil je ´" & NewData & "´ toevoegen?"
    If MsgBox(msg, vbQuestion + vbYesNo) = vbYes Then
        strSQL = "INSERT INTO tblTitel ([Titel]) VALUES(""" & NewData & """)"
        CurrentDb.Execute strSQL, dbFailOnError
    End If
    ' Zoek de nieuwe titel op in de tabel tblTitel.
    Result = DLookup("[TitelID]", "tblTitel", "[Titel]=""" & NewData & """")
    If IsNull(Result) Then
        ' Als de titel niet is aangemaakt, Response argument op Error message zetten en herstellen.
        Response = acDataErrContinue
        MsgBox "Nog een keer proberen...", vbOKOnly
    Else
        ' Als het land is aangemaakt, het Response argument Added zetten.
        Response = acDataErrAdded
        Me.cboTitel = Result
        Me.Refresh
    End If
End Sub
Dit zou moeten werken.
 
Ik heb het eerste veld cboTitel werkend met de bijwerkfunctie als de Titel niet in de lijst zit. Echter ik krijg telkens een foutmelding waarvan ik niet kan vinden hoe deze ontstaat. De fout treed ook op als ik een bestaande Titel in het veld zet en op de Tab toets klink. Ik loop nu vast omdat ik dit probleem zelf niet kan oplossen. Ik heb de database toegevoegd zodat je zelf kunt zien wat er mis gaat. Ik hoop dat je deze fout kunt oplossen. Groeten ReijerdH.
 

Bijlagen

  • MuziekBibliotheek.rar
    96,1 KB · Weergaven: 25
  • Foutmelding.jpg
    Foutmelding.jpg
    53,1 KB · Weergaven: 49
  • Toevoegen gelukt.jpg
    Toevoegen gelukt.jpg
    33,7 KB · Weergaven: 44
  • Bij niet in lijst.jpg
    Bij niet in lijst.jpg
    25,8 KB · Weergaven: 47
  • Bijwerken velden.jpg
    Bijwerken velden.jpg
    45,9 KB · Weergaven: 49
Ik zal er even naar kijken, al snap ik je laatste twee plaatjes niet.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan