[ACCESS] Velden met variabelen toevoegen

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

Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
Ik moet voor mijn vakantiewerk een aantal excell bestanden omzetten in een Access database. Aangezien ik nog nooit met Access had gewerkt heb ik eerst een aantal dagen gekregen om wat uit te proberen. Maar nu ben ik dus begonnen.

Alles gaat zeer goed als het maar basis betreft (maken van tabellen, forms en queries enzo). Maar eens het iets ingewikkelder wordt lig ik al direct in de knoop. En veel hulp heb ik hier niet.

Maar goe, mijn vraag:
Hoe kan ik dmv een query (of een andere methode) een veld toevoegen aan een reeds bestaande tabel. In de veldnaam zou ook een variabele moeten komen.

Concreet: Het is een tabel van salarissen van werknemers en deze zou per jaar hun salaris moeten bevatten. Dus als het jaar om is moet er een veld bijkomen. Zo kan een historiek van hun salaris opgesteld worden.

Iemand een idee? Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:22

gorgi_19

Kruimeltjes zijn weer op :9

Extra kolom erbij?

Zou het volgende doen:

PersoneelsID Autonumber
Jaar Integer
Salaris Decimal.

Zo heb je niet het probleem dat er kolommen toegevoegd moeten worden.

Het probleem heeft trouwens weinig met P&W te maken, ik denk dat SA een beter iets is.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Anoniem: 21726

Overigens zou ik er voor kiezen om de kolom Jaar naar een datum-veld om te zetten ("Ingangsdatum"). Op die manier ben iets flexibeler (niet dat ik 2x per jaar een salaris-verhoging krijg :(, maar het is dan wel mogelijk).
Het probleem heeft trouwens weinig met P&W te maken, ik denk dat SA een beter iets is.
Tsja, volgens mij valt database ontwerp ook onder P&W?

Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
Ik zal maar eerst eens beginnen met zeggen dat ik dus een volledige beginneling ben (voor als jullie dat nog niet begrepen hadden :))

Wat bedoel je precies met jou oplossing Gorgi? 1 tabel maken met die 3 velden? Maar dan wil die autonumber toch zeggen dat het personeel_ID bij elke record wordt verhoogd, waardoor ik voor elke personeels_ID maar 1 jaar en salaris kan invullen. En dat is nu niet de bedoeling.

Ik had er ook al aan gedacht misschien een nieuwe tabel te maken per jaar met daarin de dingen die gorgi opnoemt (zonder jaar dan weliswaar). Maar dan kwam ik bij mijn volgende probleem: hoe kan ik in een maketable-query een variabele meegeven (om het jaar in mee te geven).

Nog even erbij zeggen misschien dat ik de database wel moet maken, maar dat er 4 andere gebruikers zullen zijn die hem invullen enz...

Alvast heel fel bedankt voor de reacties!

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:22

gorgi_19

Kruimeltjes zijn weer op :9

Gorgi zit ff helemaal te slapen.. Sorry

ff uitgebreid uitleggen:

Tabel personeel:

PersoneelID Autonumber
Achternaam String
Tussenvoegsles String
(..)

Tabel Salaris:
SalarisID Autonumber
PersoneelID Integer
Jaar Integer (Of datum, wat je wilt, denk dat jaar beter is in dit geval)
Salaris Decimal

Vervolgens maak je een 1:n relatie tussen de tabellen Personeel en Salaris; beiden op PersoneelID
Ik had er ook al aan gedacht misschien een nieuwe tabel te maken per jaar met daarin de dingen die gorgi opnoemt (zonder jaar dan weliswaar). Maar dan kwam ik bij mijn volgende probleem: hoe kan ik in een maketable-query een variabele meegeven (om het jaar in mee te geven).
Geloof me, dit wil je ECHT niet.. Je kan dan jaarlijks al je joins gaan aanpassen. Waarom wil je voor ieder jaar een andere tabel hebben? Je kan toch gewoon een query maken op beide tabellen, waarbij je query in de vorm is van

Pseudocode
code:
1
2
Select Personeel.naam, Salaris.Salaris FROM
 Personeel (..) WHERE salaris.Jaar = [Jaar]

Met een popup vraagt hij dan vervolgens om het jaar.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
Ok nu begrijp ik je wel volledig :)

Ik ga het zo eens proberen.
Nog een noob-vraagje dan: Hoeveel records mag zo'n tabel eigelijk bevatten? Want met 500 werknemers die elk jaar een nieuw salaris krijgen loopt dat nummer wel vlug op natuurlijk :)

Heel fel bedankt!

enneuh.. slaap lekker verder, dan ga ik wat prutsen ;)

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:22

gorgi_19

Kruimeltjes zijn weer op :9

Een integerveld kan geloof ik tot ergens in de 32767 records gaan, dan zal je hem moeten aanpassen tot een long integer of zoiets. Voorlopig ben je er dus nog niet... :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 05-06 22:44

Janoz

Moderator Devschuur®

!litemod

De beperking ligt eerder in het aantal 'kolommen' dan in het aantal records. De oplossing van gorgi is de juiste benadering. Mischien is het handig om een paar stukjes info over normaliseren door te gaan lezen (te vinden in de PW faq) voordat je een db-ontwerp inelkaar gaat knutselen. Kost je aan het begin mischien ietsje meer tijd, maar zal je uiteindelijk heel wat problemen schelen.

Wat je iig nooit moet doen is een 'variabele' tabel maken waaraan dynamisch kolomen kunnen worden toegevoegd. (ik kan je zo een rij problemen opnoemen waar jij tegenaan gaat lopen :) )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
Ok, we zijn weer een dagje later.

Dit werkt allemaal zeer goed, dus nog maar eens bedankt.

Nu een volgend vraagje: Ik zou per persoon (die ik dus via die persoonID makkelijk uit de lijst kan halen) automatisch een grafiek willen laten genereren van het verloop van zijn salaris over de jaren. Hoe dit handmatig moet dat weet ik we allemaal, dus dat is geen probleem :)

Ik had gedacht (ben meer thuis in JAVA, dus zit ik te denken hoe ik dat daarin zou kunnen oplossen (stom van me, maar ja) ergens op te slaan wat het huidige jaar is (daar is een method voor meen ik gezien te hebben) en wat het oudste jaar is (dus wanneer voor het eerst de salarissen zijn bijgehouden in de database). En dan in een soort for-loop (JAVA, *zucht*) die allemaal af te lopen.
Nu heb ik me rotgezocht op een manier om dat te doen, maar helaas, ik vrees dat ik jullie hulp weer eens nodig heb. |:(

Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
O ja, nog iets vergeten.

Die historiek van salarissen zou ook in een form moeten komen. Dus Textboxjes onder elkaar met hun waarde in. Is het mogelijk deze automatisch te laten variëren?

En is het mogelijk om ook variabelen in bv een expression mee te geven? Zodat hij niet altijd een input-box gaat geven.

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 03-06 06:47

ATS

Wat jij nodig hebt is een control dat grafiekjes kan tekenen. Ik denk (nooit geprobeert) dat je wel een object van Excel kan embedden. De salarisgegevens van een persoon kan je natuurlijk eenvoudig bij elkaar halen met een query:
code:
1
SELECT * FROM tblSalaris WHERE PersoonID=1 ORDER BY BeginDatum

Het resultaat met een loopje doorlopen en de punten in het grafiek-objectje zetten.

André

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 03-06 06:47

ATS

Die historiek van salarissen zou ook in een form moeten komen. Dus Textboxjes onder elkaar met hun waarde in. Is het mogelijk deze automatisch te laten variëren?
Hier is een subform je vriend. Een andere (vind ik mooiere) oplossing vergt meer code: het opnemen van een ListView op je form, waarin je de gegevens zelf neerzet met VBA code. Je gebruikt weer dezelfde query als net, alleen nu maak je voor elk record in het lijstje een listitem aan. Het control zit echter niet standaard bij Office, dus misschien is het wat te complex.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
Ok hier ben ik weer.

Bedankt ATS, zo ben ik alweer een stuk verder gekomen.
Dat van die forms laat ik even liggen, misschien als ik op het einde nog wat tijd heb kijk ik er even naar.

Maar mijn volgende vraag:
Ik heb het jaar-veld in de salaristabel als een integer ingevuld. Maar hoe kan ik die nu vergelijken met bijvoorbeeld Date() ? (Ik had overigens ook ergens Year() zien staan, maar dit werkte niet)
Eens dit werkt kan ik dan dmv van:

SELECT Salaris FROM SalarisTabel WHERE Jaar=****;

waarbij de *** een variabele zou moeten zijn die ik in een expression ofzo kan meegeven. En dus niet via een inputbox.

Kan dit?

edit:
En is het mogelijk om een subform te verbergen/tonen naargelang een andere selectie?

Acties:
  • 0 Henk 'm!

  • Againzender
  • Registratie: Maart 2002
  • Laatst online: 29-05 15:25
Ik heb het jaar-veld in de salaristabel als een integer ingevuld. Maar hoe kan ik die nu vergelijken met bijvoorbeeld Date() ?
Dat zou je denk ik toch met Year() kunnen oplossen. Als je
Year(Date) doet krijg je een int met waarde 2002. In je query wordt het dan iets van:

SELECT Salaris FROM SalarisTabel WHERE Jaar=Year(Date);
En is het mogelijk om een subform te verbergen/tonen naargelang een andere selectie?
Jazeker, een subform heeft een property Visible. Dus daar kan je iets mee doen, b.v. de waarde van een veld checken, en naar aanleiding daarvan je subform zichtbaar of niet maken:

if Me.veld1.Value = 1 then
Subform1.Visible = True
else
Subform1.Visible = False
endif

Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
Wederom bedankt, de moeilijkste horden zijn zo goed als allemaal genomen.

Enkel zou ik nog graag willen weten of het mogelijk is om bv in een textbox de waarde van een query kan worden gegeven, waarbij die query gebruikt maakt van een waarde van een andere textbox. Dus de query vraagt een variabele en die wordt in het aanroepen (via een expression ofzo) meegegeven, zodat hij er niet achter vraagt via een InputBox.

Iemand een idee? Dat is mijn allerlaatste vraag (hoop ik toch) :)

Acties:
  • 0 Henk 'm!

  • Kiff
  • Registratie: December 2000
  • Laatst online: 20-05 08:37
*schop*

En nog een klein vraagje. Ik heb dit onderstaande geprobeerd (zoals iemand hierboven had vermeld (sorry ben je naam vergeten)), maar dit werkt niet hij loopt hierop altijd vast (hij vindt iets niet met een | ) of als ik het anders probeer dan geeft hij geen fout maar past hij het ook niet toe. En waar zet ik deze code het beste? Heb al eens geprobeerd in de Load van de gewone form of deze van de subform.

if Me.veld1.Value = 1 then
Subform1.Visible = True
else
Subform1.Visible = False
endif
Pagina: 1