Jullie mening over Access in een multi-user omgeving

Status
Niet open voor verdere reacties.

gebo51

Gebruiker
Lid geworden
30 mei 2007
Berichten
100
Jullie mening over ms access

Beste access gebruikers,

Al geruime tijd ben ik nu bezig met ms access en vind het een steeds interessanter programma worden, immers hoe langer je er mee bezig bent hoe meer mogelijkheden je ontdekt.
Dit forum is daarbij een uiterst belangrijk hulpmiddel, want je loopt - als niet specialist- toch steeds weer tegen problemen op.
Hulde voor dit forum:thumb:

In gesprekken met ict speialisten wordt echter toch vaak wat minzaam gesproken over ms access: low-end programma(tje), niet het serieuze werk, alleen leuk voor op een desktop voor je postzegelverzameling, niet geschikt voor in een multi-user omgeving(wordt dan veel te traag) en ga zo maar door...

Ik gebruik access op mijn afdeling, gesplits in een BE en FE, op het netwerk.
Gemiddeld zo'n 7 users gebruiken het gelijktijdig en dat gaat (tot heden) prima. Maar deze afdeling zal zeker verder groeien. Zit ik nu met access op de verkeerde weg??

Wat is jullie mening:
Is access echt zo'n 'low-end' programma
Moet je het niet gaan uitrollen in een grotere omgeving (bijv. 15 -20 users)

Bedankt maar weer.....
 
Laatst bewerkt:
Tot 10 gebruikers werkt het wel op het netwerk. Maar hierna word het te veel langzaam en gaan er problemen onstaan. En access is gewoon niet multi.
Je kan beter een MySql server gebruiken en in php een webpage.
 
Access is wel degelijk multi user. Je kunt er in principe, zonder problemen, met 50 man tegelijk mee werken.
Wel moet je, net als bij iedere andere ontwikkelomgeving, met het toenemen van het aantal gebruikers rekening gaan houden met multi user aspecten.
Dit begint met een goed database ontwerp. Als de database verkeerd ontworpen is, dan is al het werk wat daarna gedaan wordt complete tijdverspilling in een multi user omgeving.
Schenk hierbij aandacht aan goede indexen op de juiste plaats, zet geen indexen als het niet nodig is. Maak gebruik van betekenis loze sleutels, normaliseer etc.
Vervolgens moeten queries echt ontworpen worden en niet zomaar in elkaar geklikt. Gegevens benadering moet altijd via de indexen lopen!
Ontwerp je formulieren zo dat ook deze zoveel mogelijk gebruik maken van de beschikbare indexen.
Dat geldt ook voor de rapporten.
Maak je formulieren en rapporten dusdanig dat er geen VBA direct onder hangt (eigenschap HasModule = False).
Maak gebruik van classmodules.
En zo zijn er nog wel wat aspecten waaraan je moet denken VOORDAT je access opstart!

Met andere woorden: ook voor een goede toepassing in access moet je aan systeemontwikkeling gaan doen. Je moet niet zomaar even iets in elkaar klikken, dat is vragen om problemen in een multiuser omgeving.
 
Beste Bartuls,

Bedankt voor je uitgebreide antwoord.
ik heb nog wel wat vragen

PHP:
Maak je formulieren en rapporten dusdanig dat er geen VBA direct onder hangt (eigenschap HasModule = False).
Maak gebruik van classmodules.

Dat begrijp ik niet helemaal: je hebt toch altijd vba achter je formulieren/rapporten hangen?
Hasmodule is mij onbekend. Waar staat die module voor?
EN classmodules? Ik ken wel de standaard modules van Access:o

Bedankt maar weer...
 
Je moet ook nog denken aan authorisatie. Welke gebruiker mag een bepaald form openen?
 
Beste Guus,

Naar aanleiding van je uitgebreide antwoord ben ik verder op zoek gegaan naar:
classmodules
hasmodule=false

Via de helpfunctie vba begrijp ik dat bij formulieren en rapporten een classmodule wordt aangemaakt op het moment dat je vba toevoegt. De hasmodule wordt dan aut. op true gezet.

Nu begrijp ik je antwoord niet meer:
quote
Maak je formulieren en rapporten dusdanig dat er geen VBA direct onder hangt (eigenschap HasModule = False).
Maak gebruik van classmodules.
einde quote

Maar als ik gebruik maak van classmodules dan hang ik toch direct vba aan het rapport of formulier.

Graag je reactie
 
Over het algemeen ben ik het met Bartuls eens maar nu niet. Het is veel simpeler dan hij omschrijft.
Als je geen VBA direct onder je form hebt hangen is de property HasModule: False.
Dit is een gegeven. Je hoeft hier niets mee te doen. Als je dit absoluut niet wilt dan maak je dus gebruik van Macro's om je functies en procedures uit je modules te runnen. Dat lijkt mij een beetje omslachtig

Op deze plek heb ik een simpel login voorbeeld gedownload.

Kijk daar maar eens naar.

Enjoy!
 

Bijlagen

In de meeste gevallen is er aan een formulier of een rapport een module gekoppeld waarin bijvoorbeeld de VBA code die door de verschillende wizards van Access gemaakt wordt voor dat betreffende formulier of rapport geplaatst wordt.
Bij het laden van een formulier in het geheugen van de computer wordt ook deze module meteen geladen.
Door access wordt bijgehouden welke gebruikers welke formulieren en rapporten in gebruik hebben.
Hoe meer gebruikers gebruik maken van een database hoe groter deze overhead voor de access toepassing wordt.
Ook kost het laden van al die losse modules stomweg tijd.
De module die gekoppeld is aan een formulier of rapport is overigens een gewone module, geen class module.

Door de eigenschap HasModule op False te zetten wordt de module die onder een formulier of rapport hangt weggegooid!
Je kunt wel degelijk code uitvoeren als er een gebeurtenis optreedt. Dat doe je dan door een functie in een normale module aan te roepen. Dat doe je dan door bij de betreffende gebeurtenis =fnMijnFunctie() te zetten.

Door geen modules onder rapporten en formulieren te hangen wordt je toepassing gewoon sneller en wordt je gedwongen goed na te denken wat voor code je precies bij welke gebeurtenis moet uitvoeren. Dat heeft in een multiuser omgeving altijd voordelen!

Een class module gebruik je om objecten te definieren. Je gaat dan (bijna) object gericht programmeren.
Het voordeel van het gebruik van classmodules is dat je behalve de logica ook de data bij een object kan opslaan.
Als je dat goed toepast kun je veel compacter en duidelijker programmeren. Ook kun je dan nogal wat performance winst behalen.

Programmeren in een multiuser omgeving en dan ook nog een access toepassing maken die niet te traag wordt vereist domweg een stukje zorgvuldig systeem ontwerp en een gedegen kennis van database ontwerp.
 
mulit user

Hallo,

Access werkt prima in een mulit user omgeving. Bij mij hebben we het nu zo georganiseerd.

1 database met alleen tabellen. Deze staat op het netwerk
1 database met formulieren, rapporten etc op de lokale PC van de medewerkers met daarin koppelingen naar tabellen op het netwerk.
1 database met formulieren, rapporten etc op het netwerk. Hierin worden de aanpassen gemaakt tbv ontwerp nieuwe raporten ed.

Bij het opstarten van de lokele PC's wordt een script file uitgevoerd waarin de database op het netwerk wordt vergeleken met de lokale database. Wannneer de netwerk versie actueler is wordt er een kopie naar de lokale PC gemaakt.

Formulier en rapporten werken lokaal veel sneller, deze zijn nu altijd overal up to date. De data wordt weggeschreven op het netwerk en dus voor iedereen toegangelijk.

Veel succes

Norbertus
 
Beste Bartuls en Norbertus,

Allebei hartelijk dank voor jullie uitgebreide antwoorden.
Ik ben weer een stukje verder in mijn ontwikkeling met Access

:thumb:
 
Hallo,

Access werkt prima in een mulit user omgeving. Bij mij hebben we het nu zo georganiseerd.

1 database met alleen tabellen. Deze staat op het netwerk
1 database met formulieren, rapporten etc op de lokale PC van de medewerkers met daarin koppelingen naar tabellen op het netwerk.
1 database met formulieren, rapporten etc op het netwerk. Hierin worden de aanpassen gemaakt tbv ontwerp nieuwe raporten ed.

Bij het opstarten van de lokele PC's wordt een script file uitgevoerd waarin de database op het netwerk wordt vergeleken met de lokale database. Wannneer de netwerk versie actueler is wordt er een kopie naar de lokale PC gemaakt.

Formulier en rapporten werken lokaal veel sneller, deze zijn nu altijd overal up to date. De data wordt weggeschreven op het netwerk en dus voor iedereen toegangelijk.

Veel succes

Norbertus

hallo,

ik heb laatst opdracht gehad om een multi user database te maken. en heb alweer veel kennis opgedaan door deze topic door te lezen. maar ik vindt vooral de reply van norbertus intrassant en vraag mij af. welke functies je moet gebruiken dus hoe koppel je naar een tabel. de script dat controleerd of de bestands versie gelijk is. ik ben geen expert op het gebied van access en vooral met de multi user gebied ben ik helemaal niet bekend in dus graag of jullie mij zouden kunnen helpen of mogelijke informatieve sites kunnen geven.

lilx
 
reactie

Hallo Lilx,

Hoe leg je dat "eventjes" uit. Ik zal proberen je op weg te helpen.

Je maakt 1 database, waar je alleen maar de tabellen in opslaat. Dus geen formulieren, rapporten, queries etc. Dit is de netwerk versie en is in mijn geval als volgt opgeslagen:
"\\gv-nt1\t-root\Produktie\Produktiestatus\plc_be.accdb" (office 2007)

Je maakt een tweede database waar je de tabellen koppelt met bovengenoemde database. Zie hiervoor de help functie om externe gegevens op te halen dmv een koppeling. Let er op dat je de koppeling gebruikt anders worden de gegevens niet continue bijgewerkt.
Verder maak je in deze database ook de benodigde queries, rapporten en formulieren.
De database plaats je op de lokale harde schijf. In mijn geval:
"c:\program files\PLC\plc_gp.accdb"

Wanneer je dit bij alle gebruikers zou plaatsen op de harde schijf heb je al een mulituser database, waarbij de gebruikers hun eigen rapporten, formulieren endergelijke hebben maar gebruik maken van de data in de tabellen op het netwerk.

Wanneer je regelmatig nieuwe rapporten en formulieren ontwerpt en die wil je door iedereen laten gebruiken moet je een centrale database maken waar je de veranderen in aan kan brengen. Deze is bij mij alsvolgt opgeslagen:
"\\gv-nt1\t-root\Produktie\Produktiestatus\plc_gp.accdb"

Deze wordt dmv onderstaand script bestand, die uitgevoerd wordt bij het opstarten van de PC, vergeleken met het bestand op de lokale harde schijf.


Code:
? "PLC wordt geinstalleerd."

;PLC programma van NL installeren
if exist ("c:\program files\PLC\plc_gp.accdb")
   $Result = CompareFileTimes("C:\program files\plc\plc_gp.accdb", "\\gv-nt1\t-root\Produktie\Produktiestatus\plc_gp.accdb")
   IF $Result = -1 or $Result = -2 or $Result = -3
   	;File1 is more recent than file2 or cannot be opened
      ? "Er is een nieuwe versie van PLC beschikbaar."
	goto "plc_bijwerken"
   ENDIF
   goto "exit_plc"
else
	 ? "c:\program files\plc\plc_gp.mdb bestaat niet"
	goto "plc_installatie"
endif

:plc_installatie
	? "PLC wordt geïnstalleerd."
	MD "C:\Program files"
	MD "C:\Program files\PLC"
	Copy "\\gv-nt1\t-root\Produktie\Produktiestatus\plc_gp.accdb" "C:\program files\plc\plc_gp.accdb" 
	copy "\\gv-nt1\t-root\Produktie\Produktiestatus\plc.lnk" "c:\documents and settings\"+@userid+"\bureaublad\"
	copy "\\gv-nt1\t-root\Produktie\Produktiestatus\plc.lnk" "c:\documents and settings\"+@userid+"\desktop\"
		
	goto "exit_plc"

:plc_bijwerken
	? "PLC wordt bijgewerkt."
	Copy "\\gv-nt1\t-root\Produktie\Produktiestatus\plc_gp.accdb" "C:\program files\plc\plc_gp.accdb" 
	goto "exit_plc"

:exit_plc

Ik hoop dat je er iets aan hebt. Let wel even op mijn bestandsnamen. Ze verschillen maar een klein beetje.
plc_gp.accdb = front end database met formulieren, rapporten etc.
plc_be.accdb = beck end database met de gegevens tabellen.

Veel succes, groeten Norbertus
 
Beste Norbertus,

Dit is een heel interessant verhaal, ook voor mij.
Ik heb de _BE en _FE op een netwerkshare staan, waarbij de users gewoon inloggen op de _FE.
Alle users zitten dus op 1 _FE database. Dit werkt tot nu toe (met gemidd. 10 users) prima, al merk je wel enige vertraging bij 10 ipv bijv. 3 users.

Jouw mogelijkheid is daarom iets wat ik voor de toekomst eens best zou willen testen.
Daarom ook van mijn kant ' hartelijk dank' voor je inspanning.:thumb:
 
Hallo Norbertus,

dank je wel voor een reactie en zal er gelijk aan beginnen. ik heb snel jouw bericht door gelezen en zal hem zeker nog een paar keer door lezen om volledige begrip over te hebben. maar ik heb wel nog steeds een vraag erover. is het op deze manier wel mogelijk dat twee of meer mensen tegelijker tijd gegevens invoeren zonder dat er gegevens verloren gaan? (niet meer dan 5 mensen zullen er tegelijkertijd aan werken hoor.)

ik heb ook een andere vraag. mijn database is gemaakt voor om de gegevens van het personeel op te slaan. maar in plaats van een volledige werk dag te hebben. hebben wij een dag dat is verdeeld in drie shifts. en naast de persoonlijk gegevens van het personeel wordt ook hun rooster opgeslagen in de database. en al deze gegevens zijn allemaal in 1 tabel. persoonlijk denk ik dat deze moeten worden verdeeld en meerdere tabellen. maar het antwoord krijg ik hopelijk van jullie.

zo ziet mijn tabel eruit (de enigste tabel):
WerknemerID
voornaam
tussenvoegsel
achternaam
adres
postcode
woonplaats
mobiele_nummer
Geboortedatum
Email
Sofinummer
Bank_Rekening
Werkevaring
Uurloon
In_contract
Maandag_Ochtend
Maandag_Middag
Maandag_Avond
Dinsdag_Ochtend
Dinsdag_Middag
Dinsdag_Avond
(en dat gaat door tot zaterdag middag)

persoonlijk denk ik dat de rooster schema kan worden geplaatst in een andere tabel en dan worden gekoppeld met een relatie. maar ik weet niet of het nodig is en hoe het realiseerbaar is. en als er vragen zijn waarom ik de dagen zo erop heb gezet omdat, ik werk met een schema waarop de dagen worden ingevuld met een 1 of een 0. 1 betekend dat je die shift werkt en 0 betekend dat je die shift niet werkt. en deze waarde wordt gesorteerd in een query/rapport. ik weet niet of dit sowieso de beste oplossing is maar dit is het meest realiseerbaar voor mij geweest want deze systeem is het eerste systeem waarbij ik Access gebruik dus ik leer tijdens het realiseren van het project en ben vooral deze forum dankbaar voor het beantwoorden van mij vragen.:thumb:
 
Laatst bewerkt:
access dummie aan het woord!

Ik ben echt een access dummie en heb een adressendatabase gemaakt. Ik kom er later achter dat het wel handig is als meerdere mensen tegelijkertijd hier in kunnen werken. dus ik heb deze nu opgesplitst in 2 databases.
Is het nu wel zo dat als persoon 1 een wijziging aan brengt deze ook zichtbaar is voor persoon 2. of niet?
 
@Liesssaa:
Als beide medewerkers een FE gebruiken die naar dezelfde BE wijzen: jawel, de data wordt dan aangepast.

@gebo51:
Ik heb bij een klant een Access database draaien (gesplitst in FE en BE) waar continue tussen de 30 en 60 gebruikers in werken. De FE werd gekopieerd naar 'lokale' desktop, de BE stond op netwerkshare. Ander groot voordeel van gescheiden BE/FE is dat je rustig de FE kunt blijven ontwikkelen zonder iedereen eruit te hoeven gooien.
Op een gegeven moment werd het systeem instabiel (voornamelijk toen een aantal werkstations nog Win98 hadden en nog wel eens wilden vastlopen). Dit is echt een probleem met Access: loopt een van de clients vast dan heb je redelijke kans op een database beschadiging. Om dit te ondervangen zijn we toen overgestapt naar Terminal Server (op Windows 2000, is alweer een tijdje geleden) waardoor de database ahw weer 'lokaal' stond. Resultaat: enorme performance verbetering.
Nu staan er meer dan 200.000 record in de database en zijn we de overstap aan het maken naar een SQL 2000/2005 server Back-End met een VB.NET Front-End
 
Beste Rene

Dank voor je uitgebreide reactie. Op het bedrijf waar ik met access werk heb ik met crashen weinig problemen. En mocht de _fe eens een keer vastlopen of beschadigen, heb ik altijd een kopie bijdehand.
Even weer koppelen aan de _be en er is niets aan het handje.

Alles draait op een netwerkserver, _Be en _FE gezamelijk op de netwerkschijf, en de users loggen op (1) _FE in.
De werkstations draaien op windows XP

Mvg
 
Kan ik als ik al een database heb gemaakt deze achteraf nog splitsen?!:o en hoe kan ik dit het beste doen?
 
Tools/Database Utilities/Database splitter
of
Extra/Database hulpprogramma's/Database splitsen
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan