Toon posts:

[access] database met veel uitzonderingen

Pagina: 1
Acties:
  • 124 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met het maken van een database van verschillende Excel sheets die ik dan import in Access (met Excel werkt dit zeer onoverzichtelijk en je kan niet goed genoeg zoeken en invoeren). Het gaat hierom:
Ik heb 1 grote excel sheet met daarin 14 werkbladen, het 1e werkblad bevat klanten die betaald hebben en het product ontvangen. Maar sommige klanten hebben bijv nog niet betaald, die staan dus in het werkblad "niet betaald", andere klanten hebben het product nog niet ontvangen, die staan dus in het werkblad "niet ontvangen". Weer andere klanten hebben het verkeerde product ontvangen. Zo zijn er nog 10 werkbladen meer met dit soort uizonderingen.

Nu heb ik al en beetje "genormaliseerd" maar kom er niet meer uit.

Ik dacht eraan om in de database 1 tabel te maken met daarin ALLE klanten (naam, adres, etc). En dan 14 losse tabellen met daarin de "werkbladen" (bijv tabel "niet betaald").

Maar hoe krijg ik hier een goed overzicht in? ik kan niet al die 14 losse tabellen koppelen aan 1 veld in de klant tabel.


Ook kan ik 1 grote tabel maken met ALLES daarin (dus een aantal velden met klant gegevens en dan heel veel velden met : niet betaald, niet ontvangen, verkeerde ontvangen, accept giro sturen etc etc, en dan voor de desbetreffende klant het desbetreffende veld aanvinken of invullen). Dit lijkt mij ook niet echt geweldig


Een andere optie is om alk werkblad apart te importen naar een tabel (dus krijg ik 14 tabellen), maar dan is het weer niet handig zoeken of overzicht krijgen of invoeren)


Je moet een goed overzicht kunnen krijgen van bijv de klanten die niet betaald hebben.

Ik heb dus een paar tips nodig zodat ik verder kan experimenteren.

[ Voor 12% gewijzigd door Verwijderd op 08-03-2005 16:04 ]


  • sanfranjake
  • Registratie: April 2003
  • Niet online

sanfranjake

Computers can do that?

(overleden)
Welke versie van Access hebben we het over?

Mijn spoorwegfotografie
Somda - Voor en door treinenspotters


  • jbcyber
  • Registratie: April 2001
  • Laatst online: 24-06 19:40
Als ik zo snel je vraagstelling lees dan zou ik dit verwachten:

Tabel klanten
Tabel bestelling
Tabel status

In de tabel klanten staan alle klanten die je hebt met NAW gegevens.

Vervolgens bestellingen die een klant plaats gekoppeld door middel van het klantnummer

En dan een tabel status waarin staat betaal of niet betaald etc.... gekoppeld aan een ordernr.

Lijkt mij het meest logische zo op het eerste gezicht

Verwijderd

Topicstarter
jbcyber schreef op dinsdag 08 maart 2005 @ 16:03:
Als ik zo snel je vraagstelling lees dan zou ik dit verwachten:

Tabel klanten
Tabel bestelling
Tabel status

In de tabel klanten staan alle klanten die je hebt met NAW gegevens.

Vervolgens bestellingen die een klant plaats gekoppeld door middel van het klantnummer

En dan een tabel status waarin staat betaal of niet betaald etc.... gekoppeld aan een ordernr.

Lijkt mij het meest logische zo op het eerste gezicht
Zoiets had ik dus ook in gedachte maar dat is hier niet mogelijk omdat ik op elk werkblad andere gegevens moet invoeren (bijv op werkblad "alles ontvangen en goed" heb ik NAW. maar op werkblad accept-giro heb ik NAW en datum, rekening nummer, ontvangen ja/nee ). Hoe koppel ik deze dan aan elkaar zodat het makkelijk in te vullen is
(want niet elke klant doet een bestelling of niet elke klant betaald, dus hoe zorg ik ervoor dat je dit kunt zien)

Versie Access = 2000.

[ Voor 7% gewijzigd door Verwijderd op 08-03-2005 16:23 ]


Verwijderd

Topicstarter
Nog iemand met suggesties?

ter verduidelijking; normaal heb je bijv een klant_tbl, een order_tbl , een status_tbl etc. en die hangen dan onderling aan elkaar (relatie). Maar ik heb dus klant_tbl, en nog 14 andere tabellen die eigenlijk allemaal aan klant_tbl moeten hangen. (dat werkt dus niet)

  • Mystiqes
  • Registratie: Juli 2002
  • Laatst online: 26-12-2022
Komt er ook een tblProducten, zodat je straks de tblBestelling kan koppelen aan producten?

Zo ja:

tblKlant
tblBestelling
tblProducten

Zo nee:

tblKlant
tblBestelling

In tblKlant alle NAW gegevens en natuurlijk een ID_klant
In tblBestelling komt:

ID_Bestelling
ID_klant (koppelen dus)
Bestelling (memo veld)
Datum (misschien, zo kan je bijvoorbeeld een lijst creeeren van alle niet betaalde orders van 2 weken oud)
StatusBetaald (ja/nee)
StatusVerzonden (ja/nee)

Zo kan je het zo programmeren dat je bijvoorbeeld alle klanten wil zien die nog niet betaald hebben (Select * FROM tblBestelling Where StatusBetaald=nee, en even koppeling om de naam op te halen van klant). Dit kan natuurlijk ook op verzonden en combo's daarop.

Verwijderd

Topicstarter
Nou het gaat niet om een webshop oid. Het gaat om een maandblad.
Ik heb dus een lijst van klanten, de ene klant heeft nog niet betaald, een andere is lid van blad A, een andere is lid van blad B etc, weer een ander moet nog een accept giro krijgen, weer een ander heeft betaald maar niks ontvangen (daarbij staat dus ook een betaaldatum en een status), weer een ander heeft het blad dubbel betaald perongeluk etc etc.
(zo heb ik dus 14 van dit soort "uitzonderingen"). Hoe zet ik dit het overzichtelijkste in een database (want met excelsheetjes werken is ook niet alles)

[ Voor 7% gewijzigd door Verwijderd op 09-03-2005 11:00 ]


  • Mystiqes
  • Registratie: Juli 2002
  • Laatst online: 26-12-2022
ik denk zelf iets van:

tblKlant

Hier zet je de standaard zaken in als betaald (ja/nee), ontvangen (ja/nee), etc

dan misschien nog:

tblProbleem met daarin:

ID_klant (zo kan je aan een klant meerdere problemen koppelen)
Afgehandeld (ja/nee)
Eventueel probleemgebied dmv combobox
Probleem (memo)

Zo kan je bijv je openstaande problemen bijhouden, wel of niet afgehandeld per klant. Zo kan je bepaalde problemen zie ouder dan maand, etc, of per woonplaats, zo gek je het maar wilt :P

Verder kan je via tblKlant query's maken mbt betalingsachterstand, of niet betaald, wel ontvangen, etc.

Bedoel je zoiets?

Verwijderd

Topicstarter
Dat lijkt er idd meer op.
Maar dan is de invoer nog niet optimaal, want dan moet ik eerst de klant invullen in de tabel klant, daarna in tabel probleem het probleem invoeren (en koppelen)

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 21:21

BCC

Trust me, het is minder werk om die 14 werkbladen uit te printen en in te kloppen, dan het automatisch te proberen. Dan filter je ook gelijk alle invoeren er handmatig uit, maar zoals gezegd: zorg eerst voor een mooi database ontwerp en veldjes in access..

[ Voor 20% gewijzigd door BCC op 09-03-2005 11:21 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • Mystiqes
  • Registratie: Juli 2002
  • Laatst online: 26-12-2022
Verwijderd schreef op woensdag 09 maart 2005 @ 11:16:
Dat lijkt er idd meer op.
Maar dan is de invoer nog niet optimaal, want dan moet ik eerst de klant invullen in de tabel klant, daarna in tabel probleem het probleem invoeren (en koppelen)
Nee, je maakt gewoon een formulier klant met een toevoeg iets voor probleem. Vervolgens sla je het probleem op (in geheugen of ontzichtbaar veldje zet je de ID neer van de klant en sla je op in tblProbleem onder ID_klant, bij ophalen kies je probleem WHERE tblProbleem.ID_klant=txtID)

Koppelen gebeurd dus achter de schermen...

Maar hoe is dat nou dan? Als je een probleem invoert, hoe weet je dan wie (de klant) dat probleem heeft?

Verwijderd

Topicstarter
BCC schreef op woensdag 09 maart 2005 @ 11:21:
Trust me, het is minder werk om die 14 werkbladen uit te printen en in te kloppen, dan het automatisch te proberen. Dan filter je ook gelijk alle invoeren er handmatig uit, maar zoals gezegd: zorg eerst voor een mooi database ontwerp en veldjes in access..
Nou het zijn ong 8000 klanten dus die handmatig overtype is onbegonnen werk.
Mystiqes schreef op woensdag 09 maart 2005 @ 11:21:
[...]


Nee, je maakt gewoon een formulier klant met een toevoeg iets voor probleem. Vervolgens sla je het probleem op (in geheugen of ontzichtbaar veldje zet je de ID neer van de klant en sla je op in tblProbleem onder ID_klant, bij ophalen kies je probleem WHERE tblProbleem.ID_klant=txtID)

Koppelen gebeurd dus achter de schermen...

Maar hoe is dat nou dan? Als je een probleem invoert, hoe weet je dan wie (de klant) dat probleem heeft?
Nu heb ik 1 excel sheet met daarin 14 werkbladen. werkblad 1 is klanten die niet betaald hebben, 2 is klanten die niks ontvangen hebben etc. (op elk werkblad staan dus andere klanten) Als een klant op werkblad 1 staan en ze betalen daarna dan wordt deze verplaats (knippen/plakken) naar het werkblad alles voldaan. In access kan ik hiervoor een toevoeg_query maken.

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 21:21

BCC

Verwijderd schreef op woensdag 09 maart 2005 @ 11:31:
Nu heb ik 1 excel sheet met daarin 14 werkbladen. werkblad 1 is klanten die niet betaald hebben, 2 is klanten die niks ontvangen hebben etc. (op elk werkblad staan dus andere klanten) Als een klant op werkblad 1 staan en ze betalen daarna dan wordt deze verplaats (knippen/plakken) naar het werkblad alles voldaan. In access kan ik hiervoor een toevoeg_query maken.
Au.. dat dacht ik al.. maar dan kun je met wat ranzige queries natuurlijk heel makkelijk wat klanten inserten en updaten in een database zoals Mystique voorstelde met gegevens afhankelijk in welk werkblad ze zitten. Maar dan krijg je geheid problemen met anders gespelde namen, etc. Als je het echt goed wil kun je toch echt beter een week een stagiare het in laten tikken, want je database model net zo slecht maken als je huidige situatie, zodat je wel kan copy-pasten lijkt mij geen verbetering...

[ Voor 12% gewijzigd door BCC op 09-03-2005 11:52 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Verwijderd

Topicstarter
Ik denk dat ik maar de meest foute oplossing kies:

Elk werkblad in een aparte tabel zetten. En dan voor elke tabel een form maken en een zooi mooie query's.
Dan heb je ong hetzelfde als in Excel maar dan in Access met fijne zoek query's etc.
Alleen hoe zorg ik ervoor dat:
Als ik nu een select-query uitvoer op meerdere tabellen (select * from tabel A, tabel B, tabel C).
Dan krijg ik 1 tabel te zien met daarin: tabelA.achternaam, tabelA.plaats,tabelB.achternaam, tabelA.plaats, tabelC.achternaam, tabelB.plaats.
Ik wil dus te zien krijgen: achternaam, plaats (dus dat hij mooi alle tabbellen onder elkaar zet in 1 kolom ipv alles apart)

edit:

dat laatste heb ik al gevonden (met union all)

[ Voor 6% gewijzigd door Verwijderd op 09-03-2005 12:25 ]


  • Mystiqes
  • Registratie: Juli 2002
  • Laatst online: 26-12-2022
Maak in Excel die 8000 klantgegevens zo dat je het kan importeren (macro laten draaien in Excel?).

Wat je nou gaat doen is waarschijnlijk niet de wens van je opdrachtgever.

Desnoods ga je pas wanneer er een 'probleem' is de klant intypen, bijv:

Klant: Tweakers

Anders ga je geheid problemen krijgen met de inconsistentie in de database...

Verwijderd

Topicstarter
Nou de eisen en wensen zijn niet echt specifiek, het is nu 1 grote bende, en alles beter dan excel. En aan gezien ik een beetje ervaring met access heb, en er veel goede functies inzitten....

Maar ik ga nog even hard nadenken.

  • Mystiqes
  • Registratie: Juli 2002
  • Laatst online: 26-12-2022
Verwijderd schreef op woensdag 09 maart 2005 @ 13:02:
Nou de eisen en wensen zijn niet echt specifiek, het is nu 1 grote bende, en alles beter dan excel. En aan gezien ik een beetje ervaring met access heb, en er veel goede functies inzitten....

Maar ik ga nog even hard nadenken.
Ga eerst de eisen opstellen voordat je begint. Anders ben je na 10000 uur klaar, en is het niet wat hij wou...

Verwijderd

Topicstarter
Ja , er zijn geen eisen, alleen dat ze van excel af zijn en dat alle huidige data ook verwerkt wordt.
Ik MOET dus uitgaan van de excel sheet. Ik heb nu alk werkblad in een aparte tabel gezet en de veldnamen zo goed als gelijk gemaakt, Nu heb ik een UNION ALL query (zodat je ALLE leden kunt zien). Nu nog een paar andere kleine sql statements en klaar.

Wie weet er trouwens hoe ik ervoor kan zorgen dat ik records kan aanpassen in een UNION all query?. Ik zie nu dus ALLE leden voor me neus met die query, maar ik kan niks aanpassen.

  • Boss
  • Registratie: September 1999
  • Laatst online: 19:01

Boss

+1 Overgewaardeerd

Verwijderd schreef op woensdag 09 maart 2005 @ 11:57:
Ik denk dat ik maar de meest foute oplossing kies:

Elk werkblad in een aparte tabel zetten. En dan voor elke tabel een form maken en een zooi mooie query's.
Dan heb je ong hetzelfde als in Excel maar dan in Access met fijne zoek query's etc.
Alleen hoe zorg ik ervoor dat:
Als ik nu een select-query uitvoer op meerdere tabellen (select * from tabel A, tabel B, tabel C).
Dan krijg ik 1 tabel te zien met daarin: tabelA.achternaam, tabelA.plaats,tabelB.achternaam, tabelA.plaats, tabelC.achternaam, tabelB.plaats.
Ik wil dus te zien krijgen: achternaam, plaats (dus dat hij mooi alle tabbellen onder elkaar zet in 1 kolom ipv alles apart)

edit:
Overigens zijn er ook redelijke kant-en-klare paketten te koop voor abonnement beheer van bijvoorbeeld een uitgever...
dat laatste heb ik al gevonden (met union all)
Dit gaat zo'n enorme bende worden...

Waarom zou je niet gewoon een beetje normaliseren zoals hierboven ook al is gesuggereerd?
Er zit volgens mij geen structuur in je denkwijze: het zijn helemaal niet allemaal uitzonderingen.

Allereerst heb je een hoop abonnee's (klanten?). Deze hebben een abonnement op een blad. Dat abonnement loopt over een bepaalde periode.

Daarnaast heb je de betaalgegevens. Een klant doet een betaling, en die moet gekoppeld worden aan het betreffende abonnement (zodat je kan zien wat wel/niet betaald is).

Dat soort dingen zou ik eerst eens uit gaan denken, en dan een nieuwe database maken. Ik weet niet of dit voor jezelf of voor werk/klant is, maar zoals je er nu mee bezig bent is het misschien handig om eenmalig even een overzichtje te krijgen, maar uiteindelijk wordt het een puinzooi.

[ Voor 5% gewijzigd door Boss op 10-03-2005 11:07 ]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Het gaat idd een bende worden :) maar het is zo onhanding om hier overzicht in te krijgen.

hieronder staat wat er allemaal in moet komen. (niet de allermakkelijkste dingen):

-klant gegevens

-accept_giro gehad voor 2003/2004, nieuwe accept_giro nog niet gehad.
-wel a_g gehad, nog niet betaald
-nog te incasseren
-blad+a_g gestuud , nog niet betaald
-betaald
-verzonden blad + dvd
-verzonden dvd (deze kan ook los besteld worden)
-verzonden zonder dvd
-contant betaald op beurs , nasturen dvd
-storno ja/nee

en bij elke "regel" horen ook andere veldnamen. bijv bij nog te incasseren hoort: aanvraag incasse en versturen incasso en alle datums. Bij storno's hoort datum, bijzonderheden, wel of niet storno etc.

[ Voor 27% gewijzigd door Verwijderd op 10-03-2005 11:30 ]


  • Mystiqes
  • Registratie: Juli 2002
  • Laatst online: 26-12-2022
Verwijderd schreef op donderdag 10 maart 2005 @ 11:28:
Het gaat idd een bende worden :) maar het is zo onhanding om hier overzicht in te krijgen.

hieronder staat wat er allemaal in moet komen. (niet de allermakkelijkste dingen):

-klant gegevens

-accept_giro gehad voor 2003/2004, nieuwe accept_giro nog niet gehad.
-wel a_g gehad, nog niet betaald
-nog te incasseren
-blad+a_g gestuud , nog niet betaald
-betaald
-verzonden blad + dvd
-verzonden dvd (deze kan ook los besteld worden)
-verzonden zonder dvd
-contant betaald op beurs , nasturen dvd
-storno ja/nee

en bij elke "regel" horen ook andere veldnamen. bijv bij nog te incasseren hoort: aanvraag incasse en versturen incasso en alle datums. Bij storno's hoort datum, bijzonderheden, wel of niet storno etc.
Je moet je denkwijze veranderen...
Je moet alles uitplitsen, dus:

Acceptgiro_verzonden
Betaald
Openstaand_factuur
Blad_verstuurd
etc

Door middel van query bijv WHERE Betaald=ja AND Blad_verstuurd=Nee kan je overzichten creeeren.
Je moet niet kijken naar je Excel, alleen kijken hoe je het beste kan indelen en dmv query's kan je dan gegevens ophalen wat je wenst te bekijken. Maar maak geen velden zoals 'wel a_g gehad, nog niet betaald' en 'blad+a_g gestuud , nog niet betaald', dan heb je dingen dubbel en mag niet...

Verwijderd

Topicstarter
Mystiqes schreef op donderdag 10 maart 2005 @ 11:35:
[...]


Je moet je denkwijze veranderen...
Je moet alles uitplitsen, dus:

Acceptgiro_verzonden
Betaald
Openstaand_factuur
Blad_verstuurd
etc

Door middel van query bijv WHERE Betaald=ja AND Blad_verstuurd=Nee kan je overzichten creeeren.
Je moet niet kijken naar je Excel, alleen kijken hoe je het beste kan indelen en dmv query's kan je dan gegevens ophalen wat je wenst te bekijken. Maar maak geen velden zoals 'wel a_g gehad, nog niet betaald' en 'blad+a_g gestuud , nog niet betaald', dan heb je dingen dubbel en mag niet...
Ja dat is idd het beste.

Ik heb al een beetje geexperimenteerd met relaties etc.

Ik kan bijv 1 tabel maken met ALLE klanten, en dan een aantal losse tabellen (bijv een tabel storno's) en daarin komen dan de datums, bijzonderheden, storno_id, klant_id. En klant.klant_id koppel ik dan aan storno's.klant_id (1 op N).
Als ik dan een query maak van die 2 tabellen zie ik netjes achter elkaar in 1 oog opslag: meneer jansen heeft een storno op die en die datum.

Alleen nu de invoer nog. hoe los ik dat het beste op (dus ook zoiets net als die query, alleen ik kan geen gegevens invoeren in de velden die uit tabel storno's komt. (ik moet dus eerst los in die tabel gegevens in gaan voeren ipv alles in een query intypen)

En dan zou ik dus al die losse tabelletjes via een klant_id allen moeten koppelen aan klant_id van de tabel klant. Dat werkt ook niet echt geweldig kwa invoer (aangezien je dan dus eerst een klant moet invoeren, dan het klantnummer onthouden, dan naar andere tabel gaan, daar klant nummer invoeren enz, dat schiet niet op)

edit;

Ik heb eens opnieuw alles uitgetekend en nagedacht, maar ik loop hier de hele tijd vast:

1 tabel klant
aantal tabellen met extra (betaalwijze, betaald, versie blad, dvd etc)
Maar het veld klant_id kan in elk van die extra tabellen voorkomen, hoe kan ik dan de relaties maken? Want tussen de "extra" tabellen onderling zit geen relatie.

[ Voor 26% gewijzigd door Verwijderd op 10-03-2005 12:16 ]


  • Mystiqes
  • Registratie: Juli 2002
  • Laatst online: 26-12-2022
Verwijderd schreef op donderdag 10 maart 2005 @ 11:41:
[...]


Alleen nu de invoer nog. hoe los ik dat het beste op (dus ook zoiets net als die query, alleen ik kan geen gegevens invoeren in de velden die uit tabel storno's komt. (ik moet dus eerst los in die tabel gegevens in gaan voeren ipv alles in een query intypen)

En dan zou ik dus al die losse tabelletjes via een klant_id allen moeten koppelen aan klant_id van de tabel klant. Dat werkt ook niet echt geweldig kwa invoer (aangezien je dan dus eerst een klant moet invoeren, dan het klantnummer onthouden, dan naar andere tabel gaan, daar klant nummer invoeren enz, dat schiet niet op)

edit;

Ik heb eens opnieuw alles uitgetekend en nagedacht, maar ik loop hier de hele tijd vast:

1 tabel klant
aantal tabellen met extra (betaalwijze, betaald, versie blad, dvd etc)
Maar het veld klant_id kan in elk van die extra tabellen voorkomen, hoe kan ik dan de relaties maken? Want tussen de "extra" tabellen onderling zit geen relatie.
stap 1, gegevens ophalen in geheugen
stap 2, lege veldjes invullen vanuit opgeslagen query of query in code
stap 3, veldjes invullen
stap 4, eventueel gegevens bewerken
stap 5, gegevens opslaan dmv query (save die en dat where klant_id=5 en save die en dat en die tabel where klant_id=5
Pagina: 1