Meerdere database naar 1 overkoepelende database

Status
Niet open voor verdere reacties.

Dencar77

Gebruiker
Lid geworden
15 mrt 2013
Berichten
131
Dag allen,

ik heb wederom een nieuwe uitdaging met MS ACCESS.

VOORTRAJECT:
Op dit moment heb ik 4 identieke databases waarin dagelijks in gewerkt wordt. (tabellen/queries/formulieren/rapporten). Elke database maakt ook gebruik van heeft (op dit moment 2) andere databases waaruit informatie gehaald wordt (middels gekoppelde tabellen).
De 4 identieke databases worden door 4 verschillende groepen dagelijks gebruikt.


DOEL:
-Nu wil ik een overkoepelende database maken die de gegevens van de 4 identieke databases bijeenraapt en je daarmee de resultaten van alle 4 de groepen kan bestuderen.


NADERE UITLEG:
*Tabellen: In elk van de 4 databases zijn de tabellen exact hetzelfde, zowel de benamingen alsmede de veldeigenschappen. Alleen de inhoud (invoer van
gegevens) is natuurlijk anders. 1 van deze 4 databases heeft 1 tabel extra. De tabellen zijn voorzien van sleutels.
*Queries: Alle 4 de databases hebben dezelfde queries. 1 database is voorzien van 1 extra query (zie Tabel).
*Formulieren: Allevier de databases maken gebruik van dezelfde benamingen van formulieren. Elke database heeft alleen een andere uiterlijk.
*Rapporten: de vier databases maken gebruik van exact dezelfde rapporten. Alleen het uiterlijk varieert. Daarnaast heeft 1 database een extra rapport (zie Tabel
en Query).
*Overkoepelende Database: Deze database verzamelt van de 4 databases de gegevens uit de tabellen die dagelijks opgemaakt wordt. Met de gebundelde data
wil ik vervolgens weer verder gaan met queries opbouwen en rapporten opmaken. De formulieren kan ik uit de 4 databases weer
halen. Het liefst zou ik de invoer van gegevens uit de 4 databases direct zichtbaar hebben in de overkoepelende database.


VRAAGSTELLING:
Wat is de beste aanpak hierin? Kan ik alleen de tabellen vanuit de 4 databases overhevelen (gekoppeld?) naar de overkoepelende database en dan vanuit daar queries/formulieren en rapporten opbouwen? Hoe kan ik de inhoud van 4 dezelfde tabellen (bijvoorbeeld TblVervoer) in 1 tabel gezamenlijke tabel krijgen?


Op dit moment haal ik mijn handen uit mijn haren en sluit mijn ogen voor een paar uurtjes....
 
Ik hoop dat je eens goed droomt over het opzetten van een goede Frontend-Backend opzet, want als ik het zo lees is de jouwe dat niet... Nodeloos ingewikkeld lijkt mij.
 
Ik heb inderdaad geen front-end/back-end database opgebouwd. De huidige versies heb gemaakt is door middel van de accdb omzetten naar accdr waardoor ik aanpassingen snel kan maken. Dit is zeker niet de meest "professionele" gebruikte wijze, maar kennis ontbreekt mij hierin.

Dus als ik je een beetje mag volgen dan kan ik het beste de 4 identieke databases omzetten naar 1 database. Vanuit deze database maak ik 5 (per groep hun eigen gerichte) Front-Ends welke ik dan aan iedere groep distribueer?! Kan men dan wel tegelijk in de database werken, in dezelfde 'tabel'?

Edit: Het enige wat ik dus nu verlies is dan de individuele karakter van elke groepsdatabase (iedere groep had zij eigen uniek opgemaakte formulier schermen). Maw Zeeland had logo's van Zeeland, Noord-Holland hun eigen logo's...etc etc.
 
Laatst bewerkt:
Je begint 'm door te krijgen als het gaat om de FE-BE opzet. Als het alleen om logo's gaat is het ook simpel. Ik neem aan dat je de gebruikers laat inloggen. Op basis van die inlog kun je niet alleen de dataset waarmee ze werken filteren, (Zeeland hoeft Utrecht niet te zien neem ik aan), maar ook logo's op een formulier zetten. Één formulier dus, en een eigen FE voor elke groep. Voor het aanpassen is het dan ook simpeler.
 
De databases worden inderdaad voorzien van een inlogmethode. Daarbij wordt ook na 30 dagen verzocht om het wachtwoord te vervangen (verloopdatum wachtwoord).
Ik maak gebruik van 4 autorisatielevels te weten Frm_Medewerker (1), Frm_Filiaalmanager (2), Frm_Directeur (3) en als laatste Frm_Beheerder (4).
Voor elke level heb ik dus een eigen formulier gemaakt...4 stuks dus. Maar jij bedoelt dat ik dus dat ik maar 1 formulier hoef aan te maken ipv 4?
\
 
Dat is een ander onderwerp volgens mij, tenzij je beheerders inZeeland zitten (met hun formulierenset) en de medewerkers met hun formulieren in Utrecht etc. Maar ook daarvoor zou mijn antwoord zijn: één formulier. Dus geen aparte formulieren voor de vestigingen, en geen aparte formulieren voor de toegangsniveau's. Als ik het zo lees, ga je straks een hoop formulieren weggooien :).
Overigens rijst de vraag of de opzet van d db wel voldoende is uitgewerkt in een Functioneel Ontwerp, want ik was van mening dat ik een aantal open deuren verder aan het openen was...
 
Hmmm, ooit een moment in je leven gehad dat je met je mond open stomverbaasd genageld aan de grond staat en even niet weet wat te doen? Nou, ik heb dat moment nu. Zojuist even alle Handleidingen van je gedownload en uitgeprint. Deze ga ik van A tot Z eens goed doornemen.

Want zoals jij het stelt heb ik inderdaad een overtolligheid aan formulieren aangemaakt. Voor elke level had ik een eigen formulier aangemaakt. Dit formulier zorgt ervoor dat de gebruiker de juiste rapporten/formulieren/draaitabellen/graaigrafieken getoond krijgt. Ik zou graag mijn database hierop plaatsen zodat je tranen in je ogen krijgt, maar of mijn firewall of iets anders weerhoudt mij om de database hier te plaatsen.

Op zich werkt de databases goed voor individuele databases, maar "professioneel" is het zeker niet. Daarnaast haal ik mijn kennis van deze site en van een varierend aantal boeken die ik inmiddels aangeschaft heb.

Als ik je goed begrijp kan ik het beste doen:
- 1 FE/BE database waarin de 5 groepen (max 5 man per groep en dan zelfs niet allen tegelijk) een eigen Front-End versie krijgt.
- een inlogscherm maken (reeds klaar. voorzien van levels en ww veranderen na 30 dagen en een logboek waarin de username en tijd geregistreerd wordt)
- 1 formulier maken waar alle 5 de groepen gebruik van maken om daarna gebruik van de database te maken. (hierin moet dus de autorisatielevel van pas komen en de vestigingen. Deze methode ken ik dus geheel niet).

Ja, Michel, je hebt de voordeur opengemaakt en daarna de haldeur en nu moet ik dus alle deuren opendoen in het huis...hopelijk is het geen kasteel met tig duizend kamerdeuren :(
En dan dacht ik dat ik redelijk gevorderd was met een database maken :(
 
Her is uiteraard niet mijn befouling om je aan de grond te nagelen. Gisteren nog een film gezien waarin iemand dat deed, en blijkt een pijinlijke zaak te zijn :)
Als je denkt dat je een goed werkend systeem hebt, en het onderhoud is minimaal, dan moet je dat vooral zo laten. Als je denkt dat het slimmer kan, dan zou ik 'm wel aanpassen. In een draadje dat momenteel loopt (Inloggen: knoppen zichtbaar afhankelijk waarde tabel) geef ik aan hoe je schermen kunt aanpassen op basis van een autorisatietabel. Dat is volgens mij de volgende stap die je moet zetten.
 
Volgens mij is die dat nu wel. Er staat in ieder geval een complete oplossing.
 
Dit is mijn code die ik op dit moment gebruik voor inloggen en autorisatielevels:

Code:
' ***********************************************************
'   Formulier: Aanmeldscherm
'
'   Functie :  formulier om in te loggen in de database
'
'   Datum modificatie : 12-8-2013
'
'
' ***********************************************************

Option Compare Database
Option Explicit
Private intLogonAttempts As Integer

' ******************************************************
' Sluit formulier
' ******************************************************
Private Sub BtnVerlaat_Click()
On Error GoTo Err_BtnVerlaat_Click
    
    DoCmd.RunMacro "macro_exit"

Exit_BtnVerlaat_Click:
    Exit Sub

Err_BtnVerlaat_Click:
    MsgBox Err.Description
    Resume Exit_BtnVerlaat_Click
End Sub

' ***********************************************************
'   Gebruiker heeft Medewerker ID nr en wachtwoord ingevoerd
' ***********************************************************
Private Sub BtnAanmelden_Click()
On Error GoTo Err_BtnAanmelden_Click
   
' Valideer Medewerker ID nr en Wachtwoord en dan de display_menu onderwerpen
   
' op dit moment is de Medewerker ID nr en autorisatie_niveau gechecked
Dim Autorisatie_niveau As Integer
Dim finish_Date As Date
Dim port_syd As String
Dim valid_user As Integer
Dim check_user As Integer
Dim wachtwoord_periode As Date
Dim check_wachtwoord As String
Dim strmsg As String

valid_user = 2

' **********************************************
' valideer Medewerker ID nr
' **********************************************
check_user = DCount("[Medewerker_ID_nr]", "Tbl_Medewerker", "Medewerker_ID_nr=Forms!Aanmeldscherm!Medewerker_ID_nr")
    If check_user = 1 Then
        valid_user = 2
    Else
        valid_user = 0
   End If
    
' **********************************************
' valideer wachtwoord
' **********************************************
If valid_user = 2 Then
   check_wachtwoord = DLookup("[Wachtwoord]", "Tbl_Medewerker", "Medewerker_ID_nr=forms!Aanmeldscherm!Medewerker_ID_nr")
   If UCase(check_wachtwoord) = UCase(Forms!Aanmeldscherm!txtWachtwoord) Then
        valid_user = 2
   Else
        valid_user = 1
   End If
   
End If

' **********************************************
' valideer autorisatie_niveau
' **********************************************
If valid_user = 2 Then
    Autorisatie_niveau = DLookup("[Autorisatie_niveau]", "Tbl_Medewerker", "Medewerker_ID_nr=forms!Aanmeldscherm!Medewerker_ID_nr")
End If

Select Case valid_user

    Case 0, 1
            strmsg = " Toegang geweigerd" & _
                        vbCrLf & " Neem contact met de beheerder indien het probleem voortduurt.   "
            MsgBox strmsg, vbInformation, "Onjuiste MEDEWERKER ID NR of WACHTWOORD"
            
           ' DoCmd.Quit
        
    Case 2
            Select Case Autorisatie_niveau
               Case 1 ' level1 menu
                    ' valideer wachtwoord verloopdatum
                      wachtwoord_periode = DLookup("[Wachtwoord_datum]", "Tbl_Medewerker", "Medewerker_ID_nr=forms!Aanmeldscherm!Medewerker_ID_nr")
                      If wachtwoord_periode < Date - 30 Then
                            strmsg = " Uw wachtwoord is verlopen. U dient uw wachtwoord te wijzigen"
                            MsgBox strmsg, vbInformation, "Wachtwoord verlopen"
                            DoCmd.OpenForm "Frm_Wijzigwachtwoord", acNormal
                        Else
                            DoCmd.OpenForm "Frm_Hoofdscherm_Medewerker"
                            DoCmd.Close acForm, Me.Name
                        End If
                                                              
               Case 2 ' level2 menu
                  ' valideer wachtwoord verloopdatum
                      wachtwoord_periode = DLookup("[Wachtwoord_datum]", "Tbl_Medewerker", "Medewerker_ID_nr=forms!Aanmeldscherm!Medewerker_ID_nr")
                      If wachtwoord_periode < Date - 30 Then
                            strmsg = " Uw wachtwoord is verlopen. U dient uw wachtwoord te wijzigen"
                            MsgBox strmsg, vbInformation, "Wachtwoord verlopen"
                            DoCmd.OpenForm "Frm_Wijzigwachtwoord", acNormal
                        Else
                            DoCmd.OpenForm "Frm_Hoofdscherm_Filiaalmanager"
                            DoCmd.Close acForm, Me.Name
                        End If
                                                                                
                 Case 3 ' level3 menu
                    ' valideer wachtwoord verloopdatum
                      wachtwoord_periode = DLookup("[Wachtwoord_datum]", "Tbl_Medewerker", "Medewerker_ID_nr=forms!Aanmeldscherm!Medewerker_ID_nr")
                      If wachtwoord_periode < Date - 30 Then
                            strmsg = " Uw wachtwoord is verlopen. U dient uw wachtwoord te wijzigen"
                            MsgBox strmsg, vbInformation, "Wachtwoord verlopen"
                            DoCmd.OpenForm "Frm_Wijzigwachtwoord", acNormal
                        Else
                            DoCmd.OpenForm "Frm_Hoofdscherm_Directeur"
                            DoCmd.Close acForm, Me.Name
                        End If
                 Case 4 'level4 menu
                    ' valideer wachtwoord verloopdatum
                      wachtwoord_periode = DLookup("[Wachtwoord_datum]", "Tbl_Medewerker", "Medewerker_ID_nr=forms!Aanmeldscherm!Medewerker_ID_nr")
                      If wachtwoord_periode < Date - 30 Then
                            strmsg = " Uw wachtwoord is verlopen. U dient uw wachtwoord te wijzigen"
                            MsgBox strmsg, vbInformation, "Wachtwoord verlopen"
                            DoCmd.OpenForm "Frm_Wijzigwachtwoord", acNormal
                        Else
                            DoCmd.OpenForm "Frm_Hoofdscherm_Beheerder"
                            DoCmd.Close acForm, Me.Name
                        End If
                Case Else
                        strmsg = " Toegang geweigerd" & _
                                    vbCrLf & " Neem contact met de beheerder indien het probleem voortduurt.   "
                        MsgBox strmsg, vbInformation, "Onjuiste WERKNEMER ID NR of WACHTWOORD"
            End Select

End Select
 
 'Wanneer gebruiker het wachtwoord 3 keer onjuist invoert dan zal de database sluiten
  
     intLogonAttempts = intLogonAttempts + 1
    If intLogonAttempts > 2 Then
      MsgBox "U heeft geen toegang tot de database. Neem contact op met de beheerder.", vbCritical, "Toegang geweigerd!"
      Application.Quit
      
    End If
    
    
Exit_BtnAanmelden_Click:
    Exit Sub

Err_BtnAanmelden_Click:
    MsgBox Err.Description
    Resume Exit_BtnAanmelden_Click
End Sub


' ***********************************************************************************************************
' wanneer de medewerker(nr) de focus krijgt, dan wordt de medewerker ID nr en wachtwoord blanco gereset
' ***********************************************************************************************************
Private Sub Medewerker_ID_nr_GotFocus()
On Error GoTo Err_Medewerker_ID_nr_GotFocus

    'verwijder huidige medewerker en wachtwoord
    Me!Medewerker_ID_nr = Null
    Me!txtWachtwoord = Null
    
Exit_Medewerker_ID_nr_GotFocus:
    Exit Sub

Err_Medewerker_ID_nr_GotFocus:
    MsgBox Err.Description
    Resume Exit_Medewerker_ID_nr_GotFocus
End Sub

Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm "FrmVerborgen", acNormal, , , , acHidden
End Sub
 
Nah, na twee dagen intensief de Handleiding van Octafish gelezen te hebben, ben ik inderdaad anders begonnen met de database bouwen. Ondertussen heb ik alles aangepast naar een FE/BE systeem, inlogmethode aangepast, gebruik gemaakt van schakelbordmethode en nu ben ik de formulieren aan het verfraaien met sommige items uit de Handleidingen. Top werk daar Octafish. Mis alleen nog een hoofdstuk omtrent inlog database ;)

Ps. Vwb het aantal formulieren minder dat is niet het geval bij mij
 
Inloggen komt nog wel denker :)
Wat betreft je formulieren: zonder de db kan ik (en ik denk niemand) zeggen of je met minder formulieren af kan... Op basis van je verhaal zeg ik: ja.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan