Access voor Beginners - Hoofdstuk 17
|
|
|
- Theodoor Robert van Veen
- 9 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Access voor Beginners - Hoofdstuk 17 Handleiding van Auteur: OctaFish Februari 2013
2 Variabele gegevens gebruiken (Normaliseren vervolg) Vanaf het begin van de cursus Access heb ik regelmatig het begrip Normaliseren laten vallen. En ook op het forum kom je die term regelmatig tegen in berichten. Maar wat zijn de valkuilen van een te goed genormaliseerde tabel? En hoe ver moet je überhaupt gaan met normaliseren? Op die vragen ga ik nu proberen een antwoord te geven. Om nog even op te frissen hoe normaliseren ook al weer werkt, een kort fragment uit Hoofdstuk 2 van de cursus: Het normaliseren van een database Normaliseren is, zoals we waarschijnlijk nu wel weten, het proces waarbij we de structuur van de database beoordelen op o.a. het voorkomen en voorkomen (wat is onze taal toch mooi: één woord met twee totaal verschillende betekenissen: vóórkomen en voorkómen bedoel ik dus J) van dubbele gegevens, de zogenoemde dataredundantie. Daarom slaan we in een tabel Bestellingen niet alle klantgegevens op, maar alleen een KlantID. Want op basis van dat klantid kun je de voor de bestelling noodzakelijke gegevens middels een query makkelijk opzoeken. En voor het bestelde artikel vullen we het ArtikelID, en niet alle artikelgegevens. Een proces om gegevensverzamelingen te optimaliseren is het normaliseren van de tabellen. Daarbij wordt per tabel bekeken welke gegevens we willen gebruiken, en hoe die gegevens zich verhouden tot de overige gegevens in dezelfde tabel. We onderscheiden daarbij een aantal niveaus: 1 e Normaalvorm 2 e Normaalvorm 3 e Normaalvorm 4 e Normaalvorm 5 e Normaalvorm Deze normalisatie vorm is vastgelegd in de Boyce-Codd normaalbeschrijving. In het lijstje geldt dat elk opvolgend niveau het vorige niveau overerft, en er nieuwe voorwaarden aan toevoegt. De 2 e normaalvorm voldoet dus aan de 1 e normaalvorm en voegt nieuwe eisen toe; de 3 e normaalvorm voldoet aan de 2 e normaalvorm (en dus automatisch ook aan de 1 e ) en voegt nieuwe voorwaarden toe. Meestal wordt een database genormaliseerd tot de 3 e normaalvorm; dat is voor een gemiddelde database doorgaans genoeg. In deze cursus gaan we dan ook niet verder dan de 3 e normaalvorm. Nevenaspecten van normaliseren Normaliseren is prachtig, en helpt je bij het voorkomen van dubbele gegevens. Tot zover dus niks dan goeds. Maar sommige gegevens fluctueren regelmatig, en laten zich niet zomaar normaliseren. Om dat te visualiseren, hoef je alleen maar naar de tabel Klanten te kijken. Klantgegevens zijn doorgaans stabiele gegevens. Een klantnaam verandert zelden, zijn adres zelden. In die gevallen dat er een mutatie is, kun je die simpel doorvoeren in de tabel Klanten. Contactpersonen zullen wat sneller veranderen, maar daarvoor heb je de tabel Contactpersonen, en die bekijk je dan weer op dezelfde manier: het geslacht van een CP zal niet heel snel veranderen, zijn naam ook niet etc. Misschien de functie of telefoonnummer, maar die zijn ook snel aangepast. Anders wordt het als je naar de Klanten kijkt in relatie tot een Bestelling. De klant(gegevens) liggen redelijk vast, maar wat te denken van het Afleveradres? Een klant kan een bestelling laten afleveren Pagina 1/12
3 op zijn bekende adres, maar een specifieke bestelling kan net zo goed ergens anders afgeleverd moeten worden. Dus waar is dat afleveradres dan van afhankelijk? Van de klant, of van de bestelling? Je zou zeggen: het afleveradres is een eigenschap van de Bestelling, niet van de klant! Kortom: de Normalisatie zou zeggen: klantid à Klantadres, maar bij een bestelling kun je net zo goed aparte velden nodig hebben voor de aflevering. Hoe je dat oplost, is een ander verhaal (in tabel Bestellingen, of middels een gekoppelde tabel Afleveradressen bijvoorbeeld). Ander voorbeeldje: adressen. Normaliseren schrijft voor dat je herhalende gegevens uit de tabel verwijdert en in een eigen tabel opslaat. In extremis kun je zeggen dat straatnamen en huisnummers in een grote tabel met adressen ook herhalend zijn. Toch zal niemand het in zijn hoofd halen om huisnummers en straatnamen in eigen tabellen onder te brengen, en ze te koppelen. Al kun je, als je echt wilt standaardiseren, natuurlijk een koppeling maken met een postcodetabel, en adressen evalueren a.d.h.v. postcode + huisnummer. Kortom: Normaliseren is een goede basis, maar zonder gezond verstand kun je eigenlijk geen goede database maken. Case: de variabele artikelprijzen In een database die in de 3 e Normaal staat, heb je een aparte tabel voor Bestellingen met daarin de klantgegevens en bestellinggegevens, en een aparte tabel met de bestelde artikelen. Die zijn dus uit de tabel Bestellingen genormaliseerd door in de tabel [tbestellingregels] een veld [BestellingID] op te nemen, en de tabel [tbestellingregels] is op zijn beurt weer gekoppeld aan de tabel [tartikelen] op basis van het veld [ArtikelID]. Een tabel [tbestellingregels] zou er dus zo uit kunnen zien qua velden: BestelRegelID, BestellingID, ArtikelID, Aantal, Datum_Geleverd Bij elk nieuw artikel in de bestelling wordt dus een nieuw record toegevoegd, waarbij verwezen wordt naar het Bestelnummer, en het Artikelnummer. Uiteraard moet je wel het aantal te leveren artikelen per artikel invoeren, en is een veld Datum_Geleverd per artikel ook wel nuttig, omdat het kan voorkomen dat bij een aflevering niet alle bestelde artikelen geleverd kunnen worden. Die blijven dan in backorder staan. De tabel [tartikelen] bevat dan deze velden: ArtikelID, Artikel, Prijs, BedrijfID, Opmerkingen, Inactief In een query (voor een factuur bijvoorbeeld) kun je dan een volledige bestelling genereren door uit tbestellingen, tbestellingregels, tartikelen en tklanten de juiste velden te selecteren, zoals [Prijs] uit [tartikelen] en [Aantal] uit [tbestellingregels]. In die query kun je dan een veld maken met de formule =[Aantal] * [Prijs] en daarmee weet je dan wat de totaalprijs is voor dat bestelde artikel. Deze constructie is fantastisch genormaliseerd, maar heeft minstens één groot nadeel: als de prijs in de tabel [tartikelen] verandert, dan heb je een stevig probleem! Niet zozeer voor de klant, want die heeft (bijvoorbeeld per mail) een document ontvangen met daarop de bedragen die hij moet betalen. Het probleem ligt in de db, waarin de ontvangen bedragen na verloop van tijd (namelijk vanaf het moment dat de eerste prijs is gewijzigd) niet meer kloppen met de overzichten die je zelf gebruikt, bijvoorbeeld als je een Totalen query maakt om de maandomzet te berekenen. Bij elke prijsverandering verandert de maandomzet. En dat mag natuurlijk niet! De oplossingen! De oplossing is op een aantal manieren uit te voeren, waarvan ik er in dit hoofdstuk 4 ga behandelen. En om het simpel te houden, zijn die oplossingen weer onder te verdelen in twee hoofdgroepen: een oplossing met behoud van (prijs)historie, en een oplossing zonder historie. De laatste variant is daarbij het simpelst, dus daar gaan we mee beginnen! Pagina 2/12
4 Oplossing 1: prijzen opslaan zonder historie Als je wilt voorkomen dat de prijzen in een bestelling niet meer kloppen, dan is er maar één oplossing: de prijs opslaan in de tabel! En daartoe heb je dus een extra veld nodig in de tabel [tbestellingregels], die je dan natuurlijk [Prijs] noemt. De tabel ziet er dan zo uit: BestelRegelID, BestellingID, ArtikelID, Aantal, Prijs, Datum_Geleverd Dit levert dan wel gelijk weer een probleem op, want hoe ga je dat vullen met de juiste artikelprijs? Het ArtikelID halen we uit de tabel tartikelen, waar ook de prijs staat. Je kunt natuurlijk een keuzelijst maken voor ArtikelID, en één voor ArtikelPrijs. Maar dat is niet erg handig, want dat laat de mogelijkheid open om een verkeerde prijs bij een artikel te selecteren. En we willen natuurlijk geen fouten inbouwen. Laten we eens kijken naar een voorbeeldje op basis van een Reiskosten formulier. Dat maakt gebruik van deze tabel: Je ziet een viertal brandstoftypes met hun prijs. Het datumveld is niet eens nodig, want je doet daar niet zoveel mee, anders dan controleren of de medewerkers de prijs wel op de juiste dag hebben bijgewerkt. Maar het gaat natuurlijk om het veld [Prijs]. In het formulier Reiskosten gebruiken we de tabel [Reiskosten] als basis. We slaan een datum op, het aantal liters, en middels de keuzelijst Brandstofsoort selecteren we het juiste type brandstof. De tabel is al aangepast volgens de techniek die hierboven is uitgelegd, dus we slaan de prijs van de brandstof per invuldag op. Normaal gesproken zouden we, als we de prijs niet opslaan, maar wel willen gebruiken, voor txtliterprijs een niet-afhankelijk veld gebruiken, en de prijs uit de keuzelijst cbobrandstofsoort halen. Die heeft deze code als Rijbron: SELECT DISTINCT PrijsID, Switch([BrandstofType]=1,"Euro Normaal",[BrandstofType]=2,"Super",[BrandstofType]=3,"Diesel", Pagina 3/12
5 [BrandstofType]=4,"Gas") AS Brandstof, Prijs FROM tbrandstofprijs_eenvoudig; In de query zit de functie SWITCH die nog niet in de cursus aan bod is gekomen, en die misschien enige uitleg behoeft. De functie kun je gebruiken als een vervanger van de IIF functie, als het gaat om het vervangen van een veldwaarde door een vervangende waarde of tekst. Je geeft in de functie aan om welk veld het gaat, wat de waarde moet zijn en wat dan de vervangende waarde is. In algemene zin: Switch([Veld]=Waarde1; Nieuwe tekst 1 ; [Veld]=Waarde2; Nieuwe tekst 2 ) Switch is in tegenstelling tot IIF eendimensionaal; je moet de functie dus niet gebruiken om functies te nesten. In IIF kun je maximaal 7 niveaus diep nesten, en met wat trucjes kun je dus zo n 14 verschillende waarden substitueren. Switch heeft die beperking niet; bovendien is de syntax vele malen overzichtelijker dan een op 7 niveaus geneste IIF functie. In dit geval wordt de Switch functie gebruikt om de keuzelijst voor brandstof van de juiste tekst te voorzien. De keuzelijst in de tabel maakt gebruik van twee kolommen, waarbij kolom 1 de getallen 1-4 bevat, en de tweede kolom de naam van de brandstof. En met de Switch worden de getallen weer terugvertaald naar tekst. Het tekstvak Literprijs vul je door als besturingselementbron de formule = cbobrandstofsoort.column(2) te gebruiken, zoals in de afbeelding. Maar dat levert dus het eerder aangehaalde probleem op, dat de prijs steeds verandert al naargelang de waarde in de tabel tbrandstof. Het veld [Prijs] moet dus gekoppeld zijn aan het tekstveld. De oplossing is, dat we het tekstveld txtliterprijs vullen vanuit de keuzelijst. Oftewel: als we een brandstof kiezen, dan wordt de prijs daarvan gelijk ingevuld in het tekstveld txtliterprijs. Je kunt dat doen bij de gebeurtenis van de keuzelijst. Tegelijkertijd kun je dan een formule maken die daarna de Totaalprijs berekent, want als je de prijs weet, en het aantal liters is ingevuld, dan kun je [Aantal] * [Prijs] uitvoeren om de totaalprijs te berekenen. De code op de keuzelijst ziet er dan zo uit: Private Sub cbobrandstofsoort_click() Me.txtLiterprijs = Me.cboBrandstofsoort.Column(2) Me.txtTotaalprijs = Me.txtLiterprijs * Me.txtLiters End Sub Korte uitleg: in de keuzelijst cbobrandstofsoort zitten 3 velden, waarvan het derde veld de prijs bevat. Deze wordt met Column(2) uitgelezen (lees de eerdere hoofdstukken als je niet weet waarom dit is). Vervolgens wordt de berekening uitgevoerd. Voordelen van deze methode: Nadeel: Makkelijk te implementeren (veld toevoegen, en koppelen in het formulier) Betrouwbaar Geen historie op prijzen Extra veld nodig voor de prijs De prijs is simpel aan te passen in de tabel, dus data lastig te locken Of het nadeel ook echt een nadeel is, moet je natuurlijk zelf bepalen. Ben je niet geïnteresseerd in de historie van je prijzen, dan kan deze methode prima werken, en hoef je niet verder te lezen! Oplossing 2: opslaan met historie Wil je de prijshistorie vastleggen, dan het je een iets andere werkwijze nodig. Om te beginnen: in de tabel [tbrandstofprijzen] volstaat het om een datumveld te hebben en een Prijs veld. Voor een bruikbare indeling hoef ik eigenlijk alleen naar de afbeelding van de tabel uit de vorige case te verwijzen, want dat is exact de tabel die we nu ook gebruiken. Alleen dus met meer records. Een voorbeeldje is bijvoorbeeld deze tabel: Pagina 4/12
6 Je ziet dat er inmiddels voor elke brandstof wel een aantal prijswijzigingen is geweest, en dat de tabel dus een stevig aantal records bevat. De meest logische gedachte is natuurlijk, dat als je het reiskosten formulier invult, dat dan de meest recente records worden gebruikt. Oftewel: op 18 januari zij de actieve prijzen als volgt: Euro normaal: 1,69.9 Super: 1,85.2 Diesel: 1,47.2 Gas: 0,99.3 Dat betekent dus, dat we de keuzelijst cbobrandstofsoort van het formulier zodanig moeten aanpassen dat alleen deze waarden te kiezen zijn. Als dat mogelijk is, werkt het formulier eigenlijk hetzelfde als in de vorige situatie: we slaan netjes de prijs op bij het record, en dat verandert dan niet meer. Hoe vaak ook daarna de prijs nog wijzigt. Omdat de hele situatie verder niet verandert, hoef ik alleen maar te laten zien hoe de query van de keuzelijst er nu uit komt te zien. En dat is als volgt: SELECT DISTINCT PrijsID, Switch([BrandstofType]=1,"Euro Normaal", [BrandstofType]=2,"Super",[BrandstofType]=3,"Diesel", [BrandstofType]=4,"Gas") AS Brandstof, Prijs, Wijzigingsdatum FROM tbrandstofprijs WHERE (PrijsID In (SELECT Last(PrijsID) AS LaatstePrijsID FROM tbrandstofprijs GROUP BY BrandstofType;)); De query maakt, net als in het vorige voorbeeld, gebruik van de Switch voor de brandsoort. Wat nu het onderscheid maakt, is de WHERE voorwaarde. Zoals je in de tabel kunt zien, zijn er per brandsoort meerdere records. De opdracht is dus om de tabel zodanig te filteren dat van elke brandstofsoort het laatste record wordt opgezocht. Daarvoor wordt een subquery gebruikt, die groepeert op BrandstofType, en daarvan het laatste PrijsID pakt. Dit werkt alleen als er van elke brandstof minstens één record is, dus als je met een lege tabel begint, moet je wel voor elke brandstof één record aanmaken. Die fungeert dan als laatste, en wordt dan getoond in de query. In het voorbeeld wordt de Pagina 5/12
7 query dan als uitkomst vertaald naar: Where PrijsID In(18;19;20;21) Kortom: de subquery maakt een filter van (in dit geval) 4 records, en dat zijn de brandstofprijzen die in de keuzelijst te kiezen zijn. De werking van het formulier (en de tabellen) is dus in principe identiek aan het eerste voorbeeld, alleen bewaar je nu de oude prijzen, en bouw je een historie op. Altijd leuk om daar later weer grafiekjes op los te laten. Voordelen van deze methode: Nadeel: Redelijk makkelijk te implementeren Opbouwen van prijshistorie Behoorlijk betrouwbaar Lastige query voor de keuzelijst Extra veld nodig voor de prijs Data makkelijk te wijzigen, en dus niet te locken Deze oplossing is redelijk makkelijk te maken, en je legt de prijshistorie op de achtergrond ook nog vast. Oplossing 3: Genormaliseerde tabel met twee datumvelden De moeilijkste oplossingen maken geen gebruik van een extra (prijs)veld, en daarmee blijft de database dus goed genormaliseerd. Dat betekent, dat we de prijs moeten gaan bepalen op basis van het datumveld (of velden) in de tabel met prijzen. Die datums gaan we dan vergelijken met de declaratiedatum. Daarbij stuiten we echter al heel snel op een probleem. Kijk eens naar de datums in de volgende afbeelding waarop de prijzen van Euro Normaal zijn verhoogd. Ik pak er even twee uit: en Als je een declaratie invult op die twee datums, dan krijg je prima resultaat: 1,66.2 en 1,69.9 resp. Maar als de declaratiedatum is, heb je in Access een probleem. In Excel zou zo n klusje heel eenvoudig zijn, want je zoekt de datum dan simpel op met Vert.Zoeken. Deze functie zoekt fuzzy naar een datum, en als die datum niet gevonden wordt, naar de eerstvolgende lagere datum. Oftewel: als je zoekt op , dan vind je in de zoektabel En het resultaat dat je terugleest is dan de prijs die op die datum is vastgesteld. Simpel dus: Access zal ook wel zo n functie hebben? Nee dus. Vandaar dat we een moeilijke oplossing moeten gaan maken. Maar ook moeilijke oplossingen komen in gradaties, dus ook hier: twee varianten. Daarbij is de eerste variant een stuk simpeler dan de tweede, dus daar moesten we maar mee beginnen! De prijzentabel ziet er nu zo uit: Pagina 6/12
8 Zoals je ziet, is er een veld bijgekomen: het veld Einddatum. Elk record met een prijs heeft nu dus een startdatum, en een datum waarop periode afloopt. Die einddatum ligt logischerwijs één dag voor de begindatum van de volgende periode. Zo zie je dat de periode die ik net al noemde op en op eindigt, en de volgende periode op begint en geen einddatum heeft. En dat is gelijk een indicatie van de actieve periode, want die is al wel begonnen, maar nog niet afgelopen. Er is derhalve nog geen einddatum. In de query gaat dat straks een klein probleem opleveren, maar gelukkig hebben we daar een simpele oplossing voor, zoals je kunt zien. Het formulier dat we gebruiken om de records aan te maken is vergelijkbaar met dat van oplossing 2, dus daar besteden we nu geen aandacht aan. Het enige dat niet nodig is, is het opslaan van de feitelijke prijs van de brandstof. Die gaan we tenslotte dynamisch genereren. In de reiskosten tabel staan dan ook alleen deze gegevens: Voor de berekeningen (denk aan rapporten etc.) hebben we een query nodig, die de bovenstaande gegevens laat zien, en uit de tabel met de prijzen de juiste prijs ophaalt voor het betreffende brandstoftype. Daarvoor gebruiken we een Cartesisch product. We hebben die al eens eerder gemaakt, dus het principe ervan zal ik niet al te uitgebreid uitleggen. Waar het op neer komt: je pakt twee tabellen die (al dan niet) gemeenschappelijke velden hebben, en die tabellen koppel je niet aan elkaar. Als je de query nu uitvoert, worden alle records uit Tabel1 gekoppeld aan alle records uit Tabel2. In ons voorbeeld: 20 (Tabel Brandstof) X 10 (tabel Reiskosten) records = 210 records. Een Pagina 7/12
9 deel ervan zie je hier: Op zichzelf is dit een onbruikbare query; TankID 1 zien we bijvoorbeeld 20 keer terug, met de daarbij horende gegevens. Aan de velden BeginDatum en EindDatum kun je al een beetje zien wat de bedoeling is. Die velden komen uit [tbrandstof], en geven de verschillende periodes aan waarin een prijs geldt. Het veld [Brandstoftype] komt ook uit [tbrandstof]. Omdat elke tankbeurt maar één product bevat, kunnen we de lijst al een heel stuk inkorten door de velden [tbrandstof].[brandstoftype] en [tbrandstof].[ Brandstofsoort] aan elkaar te koppelen. Daarmee wordt de lijst al een stuk zinniger: Er zitten nog steeds herhalingen in de recordset. Maar voor elke tankbeurt zijn er nu nog maar 5 records i.p.v. 20. Je kunt nu al wel zien welke records we moeten hebben, en welke de verkeerde prijs laten zien. Kijken we bijvoorbeeld naar TankID 0004, dan zien we dat tankdatum ( ) in de eerste record de verkeerde prijsrecord koppelt. De datumrange loopt namelijk van7-12 t/m De tweede record is wel goed (26-12 ligt in de reeks t/m 28-12) en de derde en vierde record zijn weer fout: de begindatums liggen al voorbij de tankdatum. Op basis van deze tabel kunnen we al bepalen hoe de query gefilterd moet worden: de tankdatum moet groter (of gelijk) zijn aan de begindatum, en kleiner (of gelijk) aan de einddatum. Zoals gezegd: het tweede record voldoet aan dit criterium. Pagina 8/12
10 Gewapend met deze kennis kunnen we de query gaan maken. Dat doen we natuurlijk in het queryraster. En dat ziet er dan zo uit: Alle belangrijke verbindingen zijn in deze afbeelding ondergebracht: de koppeling op basis van het veld [Brandstofsoort], en de velden BeginDatum en EindDatum met hun respectievelijke criteria. Het resultaat is nu: Zoals je kunt zien, wordt bij elke tankbeurt de juiste prijs opgezocht in de tabel. En op basis van de prijs en het aantal liters, is het nu simpel om de totaalprijs uit te rekenen. Voordelen van deze methode: Flexibele opslag en historie van prijzen Prijzen gefixeerd, en niet te veranderen en dus veilig Database is nog steeds redelijk genormaliseerd Nadeel: Moeilijkheidsgraad ligt al redelijk hoog Lastige query om de prijs uit te rekenen Extra veld (Einddatum) nodig voor de prijs Het extra datumveld vergroot de kans op verkeerde waarden in de tabel, want er is geen relatie tussen de einddatum en de startdatum van de volgende periode Deze methode is een stuk lastiger te maken, omdat je goed moet nadenken hoe de subquery er uit moet zien. In het voorbeeld is een wat uitgebreider criterium opgenomen (op brandstoftype). Heb je één artikel, dan hoeft dat natuurlijk niet en wordt de query wat simpeler. Je kunt hem a.d.h.v. het Pagina 9/12
11 voorbeeld hopelijk nu ook uitbreiden met meer voorwaarden; de structuur daarvoor blijft hetzelfde. Oplossing 4: genormaliseerde prijsberekening De lastigste oplossing bewaren we uiteraard voor het laatst. Deze oplossing bouwt voort op oplossing 3, maar nu op basis van een tabel met maar één datumveld voor de prijswijzigingen. Dat maakt het invoeren van prijswijzigingen een heel stuk simpeler, want er is nu maar één mutatiedatum. Probleem is nu wel: hoe kun je op basis van één datum kijken of een tankdatum in een bepaalde periode valt? Je hebt nu immers alleen de startdatum van de periode, en niet de einddatum. Wel, die zal op de een of andere manier berekend moeten worden! En dat kan door een hulptabel in te voeren d.m.v. een query. Die query levert als eindresultaat straks een tabel op die er precies zo uitziet als de prijstabel die we in oplossing 3 hebben gebruikt. En dat is ook logisch, want we hebben per prijsmutatie een begindatum en een einddatum nodig. We kunnen dat bereiken door een subquery te gebruiken als basis voor een extra veld. Tot nu toe hebben we subqueries gebruikt om recordsets te filteren (ook weer in dit hoofdstuk). Maar dus nog niet om een nieuw veld te maken. We concentreren ons nu dus op die specifieke techniek. SELECT PrijsID, BrandstofType, Prijs, Wijzigingsdatum AS BeginDatum, (SELECT MIN(tmpBrandstof.Wijzigingsdatum) FROM tbrandstofprijs AS tmpbrandstof WHERE tmpbrandstof.wijzigingsdatum > tbrandstofprijs.wijzigingsdatum AND tmpbrandstof.brandstoftype = tbrandstofprijs.brandstoftype)-1 AS VolgendeDatum FROM tbrandstofprijs; Zoals je gewend bent in een query, benoem je na SELECT de velden in de query. De subquery is er daar één van. Het stuk code waar het om gaat is dus: (SELECT MIN(tmpBrandstof.Wijzigingsdatum) FROM tbrandstofprijs AS tmpbrandstof WHERE tmpbrandstof.wijzigingsdatum > tbrandstofprijs.wijzigingsdatum AND tmpbrandstof.brandstoftype = tbrandstofprijs.brandstoftype)-1 AS VolgendeDatum Pagina 10/12
12 Wat gebeurt hier nu eigenlijk? We maken een query die de kleinste waarde van het veld Wijzigingsdatum opzoekt in de tabel tbrandstofprijs, die ook nog eens met zichzelf vergeleken wordt. Oftewel: als je deze query als zelfstandige query zou maken, dan moet je de tabel tbrandstofprijs twee keer toevoegen aan je raster. De twee tabellen worden vervolgens niet aan elkaar gekoppeld (geen INNER JOIN), maar zoals je in de code ziet, wordt er wel gefilterd op basis van het BrandstofType. Want we willen natuurlijk datums zien voor de gebruikte brandstofsoort. Het datumveld wordt verder gefilterd op het datumveld uit tbrandstofprijs, dat als criterium heeft dat er records moeten worden getoond die groter zijn dan de datum in de andere tabel. Dat zijn er uiteraard een hele hoop, als je meerdere records hebt. Daarom wordt met MIN de laagste uitkomst gefilterd. Kortom: we hebben een query gemaakt die alle datums laat zien die groter zijn dan de startdatum, en daar pakken we de kleinste waarde van. En de kleinste is natuurlijk maar één waarde, en dat is uiteindelijk het resultaat dat in de query wordt getoond. Een deel van het resultaat zie je hier: Je ziet, dat voor alle mutatiedatums een extra datum is gevonden, namelijk de volgende mutatiedatum voor dat brandstoftype. En, ook niet onbelangrijk, er is nog steeds geen einddatum voor de meest recente wijziging. Omdat we nu met een query werken, en niet met een tabel, is dat nog wel op te lossen met een extra IIF op het veld. De code ziet er nu zo uit: SELECT PrijsID, BrandstofType, Prijs, Wijzigingsdatum AS BeginDatum, IIf((SELECT MIN(tmpBrandstof.Wijzigingsdatum) FROM tbrandstofprijs AS tmpbrandstof WHERE tmpbrandstof.wijzigingsdatum > tbrandstofprijs.wijzigingsdatum AND tmpbrandstof.brandstoftype = tbrandstofprijs.brandstoftype) Is Null,Date(),(SELECT MIN(tmpBrandstof.Wijzigingsdatum) FROM tbrandstofprijs AS tmpbrandstof WHERE tmpbrandstof.wijzigingsdatum > tbrandstofprijs.wijzigingsdatum AND tmpbrandstof.brandstoftype = tbrandstofprijs.brandstoftype)-1) AS VolgendeDatum FROM tbrandstofprijs; Het resultaat wordt dan: In deze afbeelding zie je alleen de laatste records, want daarin wordt de variabele datum (Date() ) Pagina 11/12
13 uitgerekend. Voordelen van deze methode: Flexibele opslag en historie van prijzen Slechts één datumveld nodig voor de mutaties Prijzen gefixeerd, en niet te veranderen en dus veilig Database is nog steeds goed genormaliseerd Nadeel: Moeilijkheidsgraad ligt behoorlijk hoog Lastige query om de prijs uit te rekenen Het extra datumveld vergroot de kans op verkeerde waarden in de tabel Wat voor oplossing 3 geldt, is bij deze oplossing ook waar, en wel dat hij best lastig is. Je zult dus zelf moeten afwegen of de flexibiliteit en gegevensstabiliteit die je ervoor terugkrijgt opwegen tegen de tijd die je moet investeren om hem te doorgronden en toe te passen in je eigen situatie. Samenvatting We hebben in dit hoofdstuk een lastig onderwerp behandeld, dat toch erg belangrijk is voor de juiste werking van de databases die we maken en dat is de vraag: hoe gaan we om met gegevens die regelmatig veranderen? Ik heb daarvoor 4 methodes aangereikt die elk hun eigen voordelen en nadelen hebben. Er zijn vast meer oplossingen denkbaar en in omloop; heb je zelf een oplossing die je wilt delen, post die dan in het forumdraadje dat bij deze cursus hoort: Access-cursus Daar vind je ook de uitwerking van de verschillende opgaves. Volgende Aflevering In de volgende aflevering gaan we verder met het principe van een Frontend-Backend database. We maken dan in een gesplitste database een frontend die middels een losse connectie de gegevens inlaadt. Pagina 12/12
Cursus Access voor Beginners Hoofdstuk 2
Cursus Access voor Beginners Hoofdstuk 2 Handleiding van Auteur: OctaFisH April 2011 handleiding: Cursus Access voor Beginners Hoofdstuk 2 Cursus Access voor Beginners Hoofdstuk 2 Auteur: OctaFisH In deze
Access voor beginners - hoofdstuk 25
Access voor beginners - hoofdstuk 25 Handleiding van Auteur: OctaFish Oktober 2014 Werken met Klassemodules Tot nu toe heb ik in de cursus Access veel gewerkt met formulieren, en met procedures en functies.
Access voor Beginners - Hoofdstuk 7
Access voor Beginners - Hoofdstuk 7 Handleiding van Auteur: Octafish Augustus 2011 Een thema waar ik (redelijk bewust) omheen ben gelopen tot nu, is het onderwerp Queries. Niet omdat ik queries niet belangrijk
In deze appendix wordt bekeken wat er moet gebeuren voordat
Normaliseren A In deze appendix wordt bekeken wat er moet gebeuren voordat een systeem kan worden gedefinieerd. Dit begint met een analyse van de gegevens die de basis vormen. Daarbij wordt gekeken naar
Access Voor Beginners - Hoofdstuk 11 (deel 1)
Access Voor Beginners - Hoofdstuk 11 (deel 1) Handleiding van Auteur: Octafish Maart 2012 Rapporten (deel 1) In het vorige hoofdstuk hebben we ons bezig gehouden met Formulieren en hoe we op formulieren
Query SQL Boekje. Fredrik Hamer
Query SQL Boekje Query SQL Boekje Fredrik Hamer Schrijver: Fredrik Hamer Coverontwerp: Fredrik Hamer ISBN: 9789402162103 Fredrik Hamer Inhoudsopgave A. Aanhef bepalen 17 Aantal 18 Aantal dagen tussen
Maak van je tabel een database. Handleiding van Helpmij.nl
Maak van je tabel een database. Handleiding van Auteur: CorVerm September 2008 handleiding: Maak van je tabel een database. Database in Excel. Zoals alle vorige afleveringen is ook deze aflevering weer
Cursus Excel voor beginners (6) Functies.
Cursus Excel voor beginners (6) Functies. Handleiding van Auteur: CorVerm September 2008 Functies in Excel. Laten we eerst even kijken wat een functie is. Een functie bestaat uit een aantal argumenten
Hoofdstuk. Access wordt ook wel een elektronische kaartenbak. Access 2013, wat kunt u ermee?
Access 2013, wat kunt u ermee? Access wordt ook wel een elektronische kaartenbak genoemd. Anderen noemen het een programma om een relationele database mee te beheren. De vergelijking met een kaartenbak
Startgids 003 Invoeren prijzen in prijslijst
Startgids 003 Invoeren prijzen in prijslijst In deze startgids wordt uitleg gegeven hoe u prijzen in een prijslijsten kunt aanpassen en prijslijsten kunt beheren in de Safe Concept webapplicatie. Inhoud
Waarom Access. In de onderstaande afbeelding ziet u een begin van de lijst met cliëntgegevens van de diëtiste.
Waarom Access Voor velen is het verschijnsel van de relationele database een brug te ver. Voor het opslaan en analyseren van gegevens neemt men zijn toevlucht tot Excel. Excel heeft inderdaad een uitgebreid
Visitekaart Snelinvoer
Visitekaart Snelinvoer Voor meer informatie, kijk op www.newbase.nl Newbase BV, Hardwareweg 16 1033 MX AMSTERDAM Tel.: 020-6 111 444 Juni 2013 versie 1.0 pagina 1 van 10 Inhoudsopgave 1 Waar in Newbase
Handleiding vacaturebank VOOR ORGANISATIES
Handleiding vacaturebank VOOR ORGANISATIES Inleiding Om voor je organisatie vacatures aan te maken te beheren dien je eerst ingeschreven te zijn bij Apeldoorn Pakt Aan. Na je inschrijving als organisatie
Handleiding 103: Collecte Database (CDB) voor Wijkhoofden
Handleiding 103: Collecte Database (CDB) voor Wijkhoofden Gebruik handleiding 103: Deze handleiding is bestemd voor wijkhoofden en Vrienden die gegevens gaan verwerken en bewerken in een wijk binnen een
Handleiding Enquêtemodule. Contents
Handleiding Enquêtemodule Dit document dient als uitleg over de enquêtemodule. De enquêtemodule is een optionele module welke te bestellen is via Support Modules. Met de enquêtemodule krijgt de club de
Access voor Beginners Hoofdstuk 5
Access voor Beginners Hoofdstuk 5 Handleiding van Auteur: OctaFish Juni 2011 In deze aflevering maken we de eerste formulieren voor de database. Later in de cursus gaan we deze formulieren uitbreiden met
9. Het wijzigen van gegevens
9. Het wijzigen van gegevens Voor het wijzigen van gegevens wordt het DML-statement UPDATE gebruikt. Om dit statement correct te kunnen gebruiken moeten enkele zaken bekend zijn: In welke tabel moeten
Access cursus Hoofdstuk 3
Access cursus Hoofdstuk 3 Handleiding van Auteur: OctaFish April 2011 In deze aflevering gaan we beginnen met het opzetten van de database. We beginnen met het importeren van een tabel. Vervolgens gaan
Handleiding verenigingsportaal
Koninklijk Nederlands Watersport Verbond Overkoepelende organisatie ten dienste van de watersport Handleiding verenigingsportaal Hierbij een korte handleiding over het gebruik van het nieuwe verenigingsportaal
Informatie & Databases
Informatie Wat is informatie en waaruit het bestaat? Stel op een kaart staat het getal 37 geschreven. Wat kun je dan zeggen van het cijfer 37? Niets bijzonders, toch? Alleen dat het een getal is. Gaat
IPMarketing. Krijg inzage in uw potentiële klanten door uw website te analyseren! Handleiding 3.0
Krijg inzage in uw potentiële klanten door uw website te analyseren! Handleiding 3.0 Voorwoord Welkom bij de handleiding van IP Marketing 3.0. Hier vindt u alle informatie over het gebruik van het vernieuwde
databases & SQL - antwoorden
informatica databases & SQL - antwoorden Op dit lesmateriaal is een Creative Commons licentie van toepassing. 2010 Remie Woudt [email protected] 2013 François Vonk (XAMP vervangen door USBWebserver
Les 15 : updaten van gegevens in de database (deel2).
Les 15 : updaten van gegevens in de database (deel2). In de volgende reeks lessen zal alle vorige leerstof uitgebreid aan het bod komen. Zie ook de vorige lessen en documenten om informatie op te zoeken
v.1.30 Genkgo Handleiding Webshop Applicatie Producten verkopen op uw website
v.1.30 Genkgo Handleiding Webshop Applicatie Producten verkopen op uw website Inhoud Voordat u begint...3 Het instellen van uw webshop...4 Verkoper gegevens...4 Tenaamstelling... 4 Adres... 4 Contactgegevens...
Structured Query Language (SQL)
Structured Query Language (SQL) Huub de Beer Eindhoven, 4 juni 2011 Database: in essentie 0 of meer tabellen elke tabel nul of meer kolommen (of velden) elke tabel nul of meer unieke rijen elke query werkt
Een functie is een kant en klare formule. Via de knop Som in de groep Bewerken van het tabblad Start kun je een aantal veelgebruikte functies kiezen:
SAMENVATTING HOOFDSTUK 6 De functies Gemiddelde en Afronding Een functie is een kant en klare formule. Via de knop Som in de groep Bewerken van het tabblad Start kun je een aantal veelgebruikte functies
#Stap 1 Uw account activeren en inloggen
Inhoud #Stap 1 Uw account activeren en inloggen... 2 #Stap 2 Een test dossier aanmaken... 3 #Stap 3 Uw overzichtspagina... 3 #Stap 4 Het Dashboard... 4 #Optie 1 Bekijken... 4 #Optie 2 Wijzigen... 5 #Optie
HANDLEIDING Q1600 Fashion
HANDLEIDING Q1600 Fashion Pag.: 1 Inhoudsopgave Inleiding...3 Beheer...4 Kleurlijsten beheren...4 Kleurlijst groep aanmaken...6 Kleurlijst groep verwijderen...6 Kleuren (kleurnummers) aanmaken/wijzigen...7
Het twee of meer planningssysteem ziet er als volgt uit wanneer de gebruiker is ingelogged.
Twee of meer planningssysteem Het twee of meer planningssysteem ziet er als volgt uit wanneer de gebruiker is ingelogged. Inloggen Het systeem is gebaseerd op user verificatie. Hiervoor kan elke gebruiker
Coachview.net Eenmalige Imports
Coachview.net Eenmalige Imports Versie: Juli 2011, Revisie 2 Coachview.net: 2.1 Auteur(s): Remy Remery Dé nieuwe manier van samenwerken Inhoudsopgave 1. INLEIDING...3 BELANGRIJKSTE TERMEN... 3 2. IMPORT
Info-books. Toegepaste Informatica. Handleiding. Deel 40c : Gegevensbeheer en algoritmen in Access. HA40c. Jos Gils Erik Goossens
Info-books HA40c Toegepaste Informatica Handleiding Deel 40c : Gegevensbeheer en algoritmen in Access Jos Gils Erik Goossens Veldlengte Het maximale aantal tekens dat in een veld kan ingevoerd worden.
Handleiding vacaturebank VOOR ORGANISATIES
Handleiding vacaturebank VOOR ORGANISATIES Inleiding Om voor je organisatie vacatures aan te maken en te beheren dien je eerst ingeschreven te zijn bij Apeldoorn Pakt Aan. Na je inschrijving als organisatie
Handleiding Configuratie Brouwvisie pro
Handleiding Configuratie Brouwvisie pro Document : Handleiding Configuratie Brouwvisie Pro Versie : 1.0 Datum : Donderdag 18 Juli 2019 Auteur : Oscar Moerman 1 Inhoud 1. Inleiding... 3 2. Brouwerij constanten
Handleiding Afdrukken samenvoegen
Handleiding Afdrukken samenvoegen Versie: 1.0 Afdrukken Samenvoegen Datum: 17-07-2013 Brieven afdrukken met afdruk samenvoegen U gebruikt Afdruk samenvoegen wanneer u een reeks documenten maakt, bijvoorbeeld
Handleiding LVS-bestand
Tabblad Niveaus 1. Leerlingen(groepen) invoeren. 2. Nieuwe leerling toevoegen. 3. Leerlingen verwijderen. 4. Behaalde niveaus invoeren. Tabblad Gemiddelden 1. Waarom dit tabblad? 2. Opmerking toevoegen.
v.1.48 Genkgo Handleiding Genkgo Events Professioneel evenement management in Genkgo
v.1.48 Genkgo Handleiding Genkgo Events Professioneel evenement management in Genkgo Inhoud Voordat u begint...3 In dit document...3 Boom...3 Instellingen...4 Tenaamstelling... 4 Adres... 4 Contactgegevens...
SQL & Relationele datamodellen in interactieve media
SQL & Relationele datamodellen in interactieve media HVA-CMD-V1-datamodelleren oefeningen deel 1: SQL 2012-2013 Inhoud Inhoud... 2 Selecties uit een enkelvoudige datatabel... 3 Selecties uit een meerdere
Samen werken aan de mooiste database
Samen werken aan de mooiste database Inleiding Het is erg vervelend wanneer in een zakelijke brief uw naam verkeerd gespeld wordt, of als u op de werkvloer steeds post ontvangt op naam van uw voorganger.
Handleiding Wordpress
Handleiding Wordpress Inhoudsopgave 1. Inloggen 2. Berichten en Pagina s 3. Afbeeldingen en video s 4. Weblinks 1. Inloggen 1.1 Inloggen bij Wordpress We starten met het inloggen op je WordPress gebaseerde
HANDLEIDING Q1200 Klantenbeheer met Acties
HANDLEIDING Q1200 Klantenbeheer met Acties Pag.: 1 Inhoudsopgave Inleiding...3 Klanten in kassa...4 Kies Klant knop...4 Aanmelden klant...4 Klantenbeheer overzicht in kassa...5 Klant saldo...6 Klantenbeheer
Handleiding: Sponsit in 10 stappen!
Handleiding: Sponsit in 10 stappen! Om je snel op weg te helpen met Sponsit vindt je hier onze handleiding waarin we je in 10 stappen uitleggen hoe Sponsit werkt. Inhoudsopgave Stap 1. Contacten... 2 Contacten
Inhoudsopgave. Hoofdstuk 1: Beginnen met Access Hoofdstuk 2: Database SNOEP verkennen Voorwoord...9. Inhoudsopgave 3
Inhoudsopgave 3 Inhoudsopgave Voorwoord...9 Hoofdstuk 1: Beginnen met Access...11 Wat zijn databases?...12 Tabellen...12 Query's...13 Formulieren...14 Rapporten...14 Wat is een macro?...15 Wat is een module?...15
Factuurreeksen. Handleiding. Auteur: Sean Jansen - Onestein Versie: 1.1. Datum laatste wijziging 02-01-2014 1/ 6
Factuurreeksen Handleiding Auteur: Sean Jansen - Onestein Versie: 1.1 Datum laatste wijziging 02-01-2014 1/ 6 Inhoudsopgave Inhoudsopgave... 2 Inleiding... 3 1. Boekjaar aanmaken... 4 1.1 Boekjaar aanmaken
Access voor Beginners H4
Access voor Beginners H4 Handleiding van Auteur: Octafish Mei 2011 In deze aflevering gaan we beginnen met het maken van de Frontend en Backend database. We beginnen daarbij eerst met het koppelen van
E-MAILS VERZENDEN MET AFDRUK SAMENVOEGEN
E-MAILS VERZENDEN MET AFDRUK SAMENVOEGEN Met E-mail samenvoegen voor Word en Outlook kunt u o.a. een brochure of nieuwsbrief maken en deze per e-mail verzenden naar uw Outlook-lijst met contactpersonen
Hoofdstuk 3: Keuzestructuren
Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk
INHOUDSOPGAVE Ms Access 2010
Inhoudsopgave Ms Access 2010-1 INHOUDSOPGAVE Ms Access 2010 Woord vooraf... 11 Inleiding... 12 1 Een inleiding tot databanken... 12 2 Een databank ontwerpen... 13 3 Wat is Microsoft Access?... 16 DEEL
We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten.
MySQL talk Trage website? Het optimaliseren van een bestaande website die een MySQL database heeft is niet altijd even makkelijk. Het probleem kan namelijk op veel verschillende plekken zitten: de database
Excel Controller. Handleiding Excel Controller Wizard
Excel Controller Handleiding Excel Controller Wizard 1 Inhoud Inleiding... 3 Eigen SQL... 3 Stap 1 Eigen SQL... 3 Stap 2 Testen SQL... 8 Stap 3 Wizard... 11 Stap 4 Parameters... 13 Voorbeeld Eigen Parameter...
Handleiding Collecteportaal
Handleiding Collecteportaal Met CollectePortaal kunt u zelf de vrijwilligersgegevens bijhouden. Hierdoor heeft u de regie in eigen handen. Daarnaast bespaart u de Maag Lever Darm Stichting kostbare tijd.
Ridder R8 Financieel: openen nieuw boekjaar
Ridder R8 Financieel: openen nieuw boekjaar Inhoudsopgave Inhoudsopgave... 1 1. Nieuw boekjaar - Ridder R8 v8... 2 2. Journaalposten verplaatsen naar historie... 6 3. Koppeling met AccountView... 8 4.
Excel tips. Handleiding van Helpmij.nl. Auteur: CorVerm
Excel tips Handleiding van Helpmij.nl Auteur: CorVerm februari 2016 Autocorrectie Stel dat je vaak tijden in moet voeren. Doe je dat vanaf het numerieke deel van het toetsenbord dan is het omslachtig om
Snelgids voor het bouwen van een IT- RDBMS in EXCEL.
Snelgids voor het bouwen van een IT- RDBMS in EXCEL. door Johan van der Maas. Tabel2 Kolom1 Kolom2 Kolom3 Kolom4 Tabel1 Kolom1 Kolom7 Kolom6 Kolom7FK Kolom8 Kolom9 Kolom10 Kolom11 Kolom14 Tabel3 Kolom7
6.8 Lijsten: oefeningen
6.8 Lijsten: oefeningen Opgaven 44.: Records zoeken Open het document "Autokosten". Klik in de lijst. Kies de opdracht 'Data - Formulier' [Data - Form]. Klik de knop 'Criteria' [Criteria]. Vul als zoekcriterium
Artikelbeheer aanmaken
Artikelbeheer aanmaken Om in onze kassa artikels te kunnen gebruiken moet hiervoor ook een beheer worden geschreven. Daarbij gaan we in eerste fase de tabellen maken en daarna de formulier en queries die
Les S-02: Meer geavanceerde SQL-instructies
Les S-02: Meer geavanceerde SQL-instructies 2.0 Overzicht les 1: De basisvorm van een SQL query ziet er als volgt uit: (DISTINCT) selecteer de velden uit de tabel waar de volgende voorwaarde geldt ; Bij
Handleiding voor gebruik QHConnect online bestel systeem van Quinton Hazell Nederland B.V.
Handleiding voor gebruik QHConnect online bestel systeem van Quinton Hazell Nederland B.V. 1. Bestellen via QHConnect Als eerste ziet u het aanmeldingscherm, hier dient u uw gebruikersnaam en wachtwoord
Beheersplan 2010 Gebruikershandleiding
1. Inloggen Men dient eerst in te loggen op http://aanmelden.watertotaalbeheer.nl. De gebruikersnaam en wachtwoord worden verstrekt door een adviseur van Hydroscope. Gelieve met Hydroscope contact op te
Toelichting locatieregister Wie maakt gebruik van het locatieregister? Hoe werkt de autorisatielink?... 2
Handleiding SNF locatieregister (versie 05-2019) Inhoudsopgave Toelichting locatieregister... 2 Wie maakt gebruik van het locatieregister?... 2 Hoe werkt de autorisatielink?... 2 Wat is de link naar het
DATABASEBEHEER IN EXCEL
DATABASEBEHEER IN EXCEL 1. LIJSTEN Een lijst is een reeks van rijen met gelijksoortige gegevens waarvan de eerste rij de labels (veldnamen) bevat. Een voorbeeld: Je kunt een lijst beschouwen als een eenvoudige
Formulieren maken met Dreamweaver CS 4/CS 5
Formulieren maken met Dreamweaver CS 4/CS 5 In deze handleiding leer je om een formulier en elementen die je binnen een formulier kunt gebruiken, te ontwerpen met Dreamweaver. Het uitgangspunt is dat dit
Q1005 Artikelbeheer Pro: artikelen importeren
Q1005 Artikelbeheer Pro: artikelen importeren Inhoud Het CSV bestand... Een nieuw Excel werkblad aanmaken en een bestaand werkblad wijzigen... 2 Kolommen opmaken... 4 Opslaan als CSV bestand... 6 Het CSV
Variabelen en statements in ActionScript
Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer
Handleiding MS Access Database BOA
Handleiding MS Access Database BOA 1 Relaties en tabellen In deze database bevinden zich 9 tabellen die aan elkaar gekoppeld zijn. Daarbij komen nog 2 tabellen (nl. Eetfestijn en Lenteactiviteit ) die
Excel over transponeren en een tabel. Handleiding van Helpmij.nl. Auteur: CorVerm
Excel over transponeren en een tabel Handleiding van Helpmij.nl Auteur: CorVerm juli 2016 Excel: over transponeren en een tabel Transponeren Stel dat je een model hebt gemaakt om ziekmeldingen in te noteren.
Met een mailing of massaverzending kunt u een groot aantal documenten verzenden naar gebruikelijke adressen, die in een gegevensbestand staan.
Een mailing verzorgen Met een mailing of massaverzending kunt u een groot aantal documenten verzenden naar gebruikelijke adressen, die in een gegevensbestand staan. Voor deze techniek zijn twee bestanden
QLINE Q1200 KLANTENBEHEER EN ACTIES
QLINE Q1200 KLANTENBEHEER EN ACTIES Versie 1.1 Inhoud Kies Klant afrekenen...3 Aanmelden medewerker...3 Klantenbeheer Overzicht kassa...4 Klantenbeheer Saldo Instellingen...5 Tegoed opwaarderen...6 Saldo
Hoofdstuk 21: Gegevens samenvatten
Hoofdstuk 21: Gegevens samenvatten 21.0 Inleiding In Excel kunnen grote (en zelfs ook niet zo grote) tabellen met getallen en tekst er nogal intimiderend uitzien. Echter, Excel komt helemaal tot haar recht
Aanmaken van een organisatie in Newbase
Aanmaken van een organisatie in Newbase Voor meer informatie, kijk op www.newbase.nl Newbase BV, Hardwareweg 16 1033 MX AMSTERDAM Tel.: 020-6 111 444 Juni 2013 versie 1.0 pagina 1 van 12 Inhoudsopgave
2.2 Een tabel ontwerpen
2.2 Een tabel ontwerpen 2.2.1 Gegevens analyse Alvorens de tabellen van een database te kunnen gaan opzetten, dient u eerst te bepalen, welke gegevens daarin moeten worden opgenomen. Bepaal eerst het doel
Instructie hergebruik klantgegevens online TAF Rekentool
Instructie hergebruik klantgegevens online TAF Rekentool De online versie van de TAF Rekentool vindt u op www.tafrekentool.nl. Hier logt u in met uw gebruikersnaam en wachtwoord die u ook voor het TAF
1. Doel van de integratie
Exact Uren en Facturen Integratie 1. Doel van de integratie... 3 1.1 Data beheren op een plek... 3 1.2 Minder fouten, sneller factureren... 3 1.3 Overzicht voordelen integratie... 3 2. Uitgangspunten...
Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster
4. 4. Inhoud rste BAC Toegepaste Biologische Wetenschappen Hoofdstuk 4 Databank Terminologie, Navigeren, Importeren Tabellen Records/Velden manipuleren Queries (Vragen) [Ook in SQL] sorteren filter volgens
Bijlage Inlezen nieuwe tarieven per verzekeraar
! Bijlage inlezen nieuwe tarieven (vanaf 3.2) Bijlage Inlezen nieuwe tarieven per verzekeraar Scipio 3.303 biedt ondersteuning om gebruikers alle tarieven van de verschillende verzekeraars in één keer
Klantendatabase aanmaken
Klantendatabase aanmaken Invulformulier voor een klant te maken en op te slaan Voor dit project maken we een nieuwe database aan. Voor bepaalde acties zoals het maken van een nieuwe database en het maken
Schonen patiëntenbestand
Schonen patiëntenbestand Beschrijving programmatuur t.b.v. het schonen van het patiëntenbestand (apothekersversie) HET SOFTWAREPAKKET VOORDEZORG Versie 1.8 WIJ GARANDEREN HETBESTE SYSTEEM VOOR DE ZORG
9. MEMO'S. Handleiding Unit4 Auditor 8.1 Pagina 100 van 260
9. MEMO'S In Unit4 Auditor kunt u in een uit te voeren taak een aantekening toevoegen. In de aantekening beschrijft u de bevindingen met betrekking tot de uitvoering van de betreffende taak. Daarnaast
www.dubbelklik.nu Handleiding Access 2010
www.dubbelklik.nu Handleiding Access 2010 Deze handleiding is onderdeel van Dubbelklik, een lesmethode Technologie, ICT/ Loopbaanoriëntatie en Intersectoraal Alle rechten voorbehouden. Niets uit deze uitgave
Info-books. Toegepaste Informatica. Deel 40 : Gegevensbeheer en algoritmen in Access HA40. Jos Gils Erik Goossens
Info-books HA40 Toegepaste Informatica Deel 40 : Gegevensbeheer en algoritmen in Access Jos Gils Erik Goossens Gegevensbeheer Alle landen uit Europa en Azië die minder dan 1 000 000 inwoners tellen (Zie
Handleiding Wlijn Databeheer Internet
Handleiding Wlijn Databeheer Internet W9000 databeheer internet Leza Horeca & Winkel Management Van Dedemstraat 6 16274 NN Hoorn DATABEHEER INTERNET ( W9000) Voorraad Databeheer Internet Bestaat uit 3
De inrichting van Orbak Compact Stap-voor-Stap
De inrichting van Orbak Compact Stap-voor-Stap Inleiding Orbak Compact moet worden ingericht voordat men met het programma kan beginnen. Er moeten bijvoorbeeld bedrijfsgegevens, relaties (klanten: winkels
lesboek Jonker & Wu CAD support
7 lesboek Jonker & Wu CAD support Worksheet De Spreadsheet functie binnen MiniCad worden weergegeven in Worksheets. Deze Worksheets werken gelijk aan de Spreadsheet van bijvoorbeeld Claris Works of Mircosoft
Database Excel 2003 en Handleiding van Helpmij.nl
Database Excel 2003 en 2007 Handleiding van Auteur: CorVerm Oktober 2008 Lijst, Tabel of Database in Excel. Een Database heeft van Microsoft de naam Lijst (Excel 2003) of Tabel (Excel 2007) meegekregen.
INHOUDSOPGAVE Ms Access 2007
INHOUDSOPGAVE Ms Access 2007 Woord vooraf... 11 Inleiding... 12 1 Een inleiding tot databanken... 12 2 Een databank ontwerpen... 13 3 Wat is Microsoft Access?... 16 DEEL 1 Een relationele databank opstellen...
HANDLEIDING Q1020 Sales & Acties
HANDLEIDING Q1020 Sales & Acties Pag.: 1 Inhoudsopgave Inleiding...3 Salesprijs aanmaken...4 Salesprijs velden op artikelkaart plaatsen...5 Salesprijzen artikelkaart autoriseren...7 Salesprijs van/voor
Praktijkinstructie Dataverwerking 1 (CSE02.1/CREBO:50236)
instructie Dataverwerking 1 (CSE02.1/CREBO:50236) pi.cse02.1.v2 ECABO, 1 september 2003 Alle rechten voorbehouden. Niets uit deze uitgave mag worden vermenigvuldigd, overgenomen, opgeslagen of gepubliceerd
Snel gegevens importeren en updaten met Importeren uit Excel voor SAP Business One
Snel gegevens importeren en updaten met Importeren uit Excel voor SAP Business One Wellicht moet u regelmatig grote aantallen stamgegevens toevoegen of aanpassen, zoals zakenpartner stamgegevens of artikel
Microsoft Office voor Mac afdruk samenvoegen
Microsoft Office voor Mac afdruk samenvoegen Handleiding van Auteur: CorVerm Maart 2015 Microsoft Office voor Mac heeft een heel andere interface dan de Windows versie van Office. Het heeft naast een lint
UITLEG BIJ UW TEMPLATE
UITLEG BIJ UW TEMPLATE Woord vooraf Deze handleiding helpt u bij het zelfstandig implementeren van uw bedrijf. U leest hier welke instellingen belangrijk zijn om door te nemen en hoe u uw gegevens kunt
Formulieren en rapporten
pagina 1 van 14 Formulieren en rapporten In dit practicum wordt gekeken naar de verschillende mogelijkheden, die ACCESS biedt bij het ontwerpen van formulieren en rapporten. Formulieren kun je gebruiken
Werken met Recordsets (deel 1)
Werken met Recordsets (deel 1) Al een aantal keren heb ik aangegeven dat ik het in de cursus zou gaan hebben over het koppelen van een Front-end database aan een Backend middels Recordsets. En daar ga
Systeemontwikkeling, Hoofdstuk 4, Tabellen maken in MS Access 2010
4 Tabellen maken in MS Access In dit hoofdstuk starten we met de bouw van ons informatiesysteem met de belangrijkste bouwstenen: de tabellen. 4.1 Starten met MS Access Als je het programma Microsoft Access
Taxis Pitane Business Suite VERWERKING NOTEERRITTEN. Censys BV Eindhoven
Taxis Pitane Business Suite VERWERKING NOTEERRITTEN Censys BV Eindhoven Inhoudsopgave Inleiding... 3 Karakter van een noteerrit... 4 Basis reizigers... 5 Soorten noteerritten... 6 Type noteerrit... 6 Standaard
8.8 Records selecteren
8.8 Records selecteren Voor het maken van een uittreksel van één of meerdere records die aan een bepaald criterium voldoen, maakt u gebruik van het 'Filter'. 8.8.1 Automatisch filter Klik in het gebied
