Toon posts:

[acces] velden uit rapport filteren

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

Verwijderd

Topicstarter
Ik heb in acces een rapport gemaakt op basis van een query. Nu wil ik het eigenlijk zo hebben dat niet alle velden uit die query op het rapport weergegeven gaan worden. Sommige velden kunnen namelijk een null-waarde hebben, en die zijn niet van belang op het rapport.

De lay-out van het rapport moet zo compact mogelijk blijven, dus velden die niet weergegeven worden mogen niet gewoon invisible zijn, want dan nemen ze nog steeds ruimte in beslag. Ik heb geprobeerd om het aan te passen in de query, maar dat lukte niet. Weet iemand hoe ik dit moet aanpakken?

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 12:10
hint: "Is Not Null"

en dit is gelijk het volledige antwoord ;)

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Verwijderd

Topicstarter
ok, daar kan ik zelf ook nog wel op komen, maar waar moet ik dat gaan invullen dan? In die query? Dan hou ik nog steeds lege velden over op mijn rapport.

  • bazs2000
  • Registratie: November 2000
  • Laatst online: 31-07 08:16

bazs2000

Pixels zo groot als een atoom

Verwijderd schreef op 02 augustus 2002 @ 12:54:
ok, daar kan ik zelf ook nog wel op komen, maar waar moet ik dat gaan invullen dan? In die query? Dan hou ik nog steeds lege velden over op mijn rapport.
Je vult het gewoon in het veld van de query waarvan je niet wilt dat deze de nullwaardes laat zien. :)

Lege velden kun je krijgen wanneer het op een bepaalde manier gesorteerd wordt.
Sorteer daarom op de kolom waar je "Is Not Null" hebt gebruikt, dan zul je geen last meer hebben van de lege velden. :).

Krankzinnige muziek vind je hier.


  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 23-08 12:03

[ash]

Cookies :9

Als het volledige veld niet van toepassing is, verwijder dan het veld van je opmaak ;)

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

Boss

+1 Overgewaardeerd

Die velden op een rapport hebben een eigenschap, namelijk 'te verkleinen' en 'te vergroten'. Ik denk dat je daar wel wat mee kan doen.
(zet de eigenschap: 'te verkleinen' op 'nee' of maak de velden allemaal heel klein en zet de eigenschap 'te vergrote' op 'ja'.)

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.


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 12:10
hmmm ja een kleine spraakverwarring

wil je complete records die een veld met een nullwaarde bevatten niet weergeven: geen bij criterium op "is not null" bij het betreffende veld in de query

wil je alleen de velden die null zijn niet weergeven... ummm.. leg dan even verder uit
die nullwaarde is namelijk al niet zichtbaar.. wil je dat de caption ook niet wordt weergeven? dan zou ik van die caption een field maken met iets dergelijks als

=Iif([veld] is null;"";"Captoin")

maar zoals ik al zei.. leg het even iets duidelijker uit

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Verwijderd

Topicstarter
Ok, sorry als ik het niet helamaal duidelijk heb uitgelegd. Ik zal nu even bij het begin beginnen.

Ik ben een kleine MSAcces-applicatie (als je het al zo mag noemen ;)) aan het bouwen voor mijn stagebedrijf. Ik zeg er meteen even bij dat ik absoluut geen ster ben in VBA, ik heb op school eigenlijk alleen de basis maar gehad. Ik zal even kort uitleggen wat ik nu precies gemaakt heb.

Mijn stage is een productiebedrijf. Er wordt in ploegen gewerkt, en iedere ploegleider heeft aan de hand van het aantal uren dat hij per dag ter beschikking heeft (en nog een paar andere kleine factoren) een target die gehaald moet worden. Haalt de ploegleider deze target niet dan moet hij of zij specificeren waarom de target niet behaald is. Hiervoor kan gekozen worden uit ongeveer 39 verschillende opties.

Op dit moment is er totaal geen overzicht van de directie op de vloer, en mijn acces-prutsel moet dat op gaan lossen. :*)

Tot nu toe is alles (mede dankzij een beetje hulp van jullie) eigenlijk helemaal vlekkeloos verlopen. De database functioneert goed, de formulieren zijn prima in orde, en de applicatie draait gewoon goed.

Ik heb dus alleen nog problemen met die rapporten. Ik kan wel rapporten uit laten draaien aan de hand van een datum, of een periode, maar dan krijg ik meteen alle velden erop, en aangezien dat er dus 39 per record zijn, en er hier in 3 ploegen per dag gewerkt wordt op 3 lijnen worden die rapporten veel te lang als ik al die null-velden ook mee zou moeten printen.

Er moet dus eigenlijk per dag kort een overzicht uitgedraaid worden per shift, met daarop een aantal vaste velden zoals Ploegleider, datum, volgnummer, target, etc, en dan alleen als de target niet behaald is een specificatie.

Mijn vraag is dan ook hoe ik die null-velden er op een rapport tussenuit zou kunnen filteren, en waar ik dat precies op moet geven in de query of in het rapport.

Ik hoop dat ik het nu een beetje verduidelijkt heb...

Verwijderd

Wat je zou kunnen doen is een crosstable query bouwen en dan in de report open door je velden van de recordset kunnen lopen. Op dat moment maak je de controls aan op je rapport en koppel je de query even aan je recordsource van rapport en hopsakiedee dat zou moeten werken.

Succes...

Oh ja eenvoudig is het niet, maar dan heb je wat doen op je stage :)

Verwijderd

Topicstarter
Ok, bedankt, maar dit gaat me dus nooit lukken... :'( Is dit echt de enige manier?

Verwijderd

Tuurlijk gaat je dit wel lukken.

Stap 1. Maak een crosstable query met de wizard en zorg dat je velden terugkrijgt. Dit moet toch lukken lijkt me. Met een crosstable kan je juist mooi berekeningen doen en sommaties. Leuk spul maar lastig in het begin.

Stap 2 Maak een rapport en in Report_Open() event plaats iets als deze code

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dim db as dao.database
dim rs as dao.recordset
dim qdef as dao.querydef
dim fld as dao.field
Dim intCnt as Integer

   set db = currentdb()
   set qdef = db.querydefs("Naam van de query")
   set rs = querydefs.openrecordset()

   with rs
       if not .eof then
           for each fld in .Fields
                load lblName(intCnt)
                lblName1(intCnt).rowsource = .fld (ofzo iets)
                intCnt = intCnt + 1
           next fld
       end if
   end rs
   Me.Recordsource = qdef.sql


Zoiets zou het moeten zijn. Misschien dat je de controls/report pas bound kan maken in het ActivateEvent van het rapport, maar dat is een typisch geval van zoek het lekker zelluf effe op :9

Stap 3. Wees blij en drink een biertje 8)

Verwijderd

Topicstarter
Ok, ik ga het proberen!

Verwijderd

Topicstarter
20 bakken koffie en een heleboel frustratie later

*zucht*

Ik ben er de hele dag aan bezig geweest, maar ik snap er steeds minder van. Weet iemand misschien een goed boek waarin ik onder andere dit soort dingen kan vinden? Of een site met een tutorial ofzo... Ik wil het namelijk toch best wel graag leren eigenlijk.

Verwijderd

waarom heb je niet een reden veld opgenomen ipv 39 velden voor elke reden eentje
da's een beetje omslachtig.

nog mooier een een reden id en een tabel waar per id de omschrijving instaat

op je rapport heb je dan altijd te maken met maar 1 veld

Verwijderd

Topicstarter
Een ploegchef moet een bepaalde target halen, en haalt hij deze niet dan moet hij aangeven hoeveel "charges" hij kwijt is geraakt aan een bepaald probleem. Ik zal even wat screenshotjes uploaden om het te verduidelijken.

scherm 1: Inloggen
spreekt voor zich denk ik

Afbeeldingslocatie: http://picserver.student.utwente.nl/getpicture.php?id=3956

scherm 2 : verantwoording
Wanneer een ploegleider zijn target wel heeft gehaald krijgt hij een felicitatie en stopt de applicatie na dit scherm. Voor dit voorbeeld heb ik alles even zo ingevuld dat de target niet is behaald.

Afbeeldingslocatie: http://picserver.student.utwente.nl/getpicture.php?id=3957

scherm 3 : directiekamer
Heeft een chef zijn target behaald, dan wordt hij door de directeur bedankt. Is een target niet gehaald dan krijgt hij de boodschap zoals hieronder. Dit scherm is eigenlijk mee een geintje dan dat het echt functioneel is, en de directeur kon er eigenlijk ook niet zo hard om lachen als ik, dus ik denk dat het er binnenkort helaas uit moet...

Afbeeldingslocatie: http://picserver.student.utwente.nl/getpicture.php?id=3961

scherm 4 : specificatie
Hier vult een ploegleider zijn specificatie in (als de target niet behaald is). Rechts bovenin beeld is te zien hoeveel charges er nog verantwoord moeten worden. Achter iedere reden kan ingevuld worden hoeveel charges deze heeft gekost, wat dan automatisch wordt doorgerekend in het gele vakje "nog te verantwoorden charges" boven in beeld.

Afbeeldingslocatie: http://picserver.student.utwente.nl/getpicture.php?id=3963

en nu is het dus de bedoeling dat er dagelijks of maandelijks, of voor een ingegeven periode een rapport uitgedraaid kan worden met daarop de shift, de ploegleider, en natuurlijk of de target behaald is, en zo niet waarom niet. Hier hoeven echter niet alle mogelijke redenen bij, alleen maar diegenen die al waarde 1 of hoger hebben.

Ik ben er zoals jullie misschien al wel doorhadden nog steeds niet aan uit, dus suggesties zijn altijd welkom. Ik heb er al best wel wat tijd in gestopt en ik zou het wel jammer vinden als ik hier nou helemaal op klem zou lopen.

Verwijderd

ik ben ook bezig met zo'n soort database, en ben het probleem van jou ook al eens tegen gekomen.

Wat ik gedaan heb is een tabel maken met behulp van een sqlquery in VBA. In deze tabel zouden dan in jouw geval alle gemiste charges, met daarbij een of meerdere redenen.

Ik kan ongeveer wel aangeven hoe ie eruit zien.

[code]

Private Sub Bereken_Click()

'laat de query runnen die alle records in de tabel "Foutcode_Per_Record" wist
DoCmd.SetWarnings False
DoCmd.OpenQuery "Analyse - Pareto van foutcodes, Wis_records"
DoCmd.SetWarnings True

'Zet nieuwe waarden in de tabel
Dim letter, cijfer
Dim Db As Database
Dim Rs As Recordset
Set Db = CurrentDb()
Dim SQL As String

'zoek mbv SQL de betreffende record op voor de gekozen print
SQL = "SELECT ID_Nummer,E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11,E12,E13,E14 " & _
"FROM [Fout_Ass_Tot]WHERE Fout_Ass_Tot.ID_Nummer= " & Me.ID_Nummer.Value & ";"

Set Rs = Db.OpenRecordset(SQL, dbOpenDynaset)

'de oude records die nu gewist zijn staan nog en de invoervelden, requiry om te voorkomen dat hij gewiste records ziet!!!
Me.Requery

'deze functie bekijkt of de foutcode een waarde bevat, zo ja, dan wordt deze als record toegevoegd.
For cijfer = 1 To 14
If Rs.Fields((Chr(69)) & cijfer).Value <> 0 Then
'sla de foutcode en het aantal fouten op in een record
Me.Foutcode.Value = ((Chr(69)) & cijfer)
Me.Aantal.Value = Rs.Fields((Chr(69)) & cijfer).Value
'ga naar een nieuw record
DoCmd.RunCommand acCmdRecordsGoToNew
End If
Next cijfer

'sluit het form en open de grafiek
DoCmd.Close
DoCmd.OpenForm "Analyse - Pareto van Assemblagefouten, grafiek"

End Sub


[code\]

Het is niet zo'n heel moeilijk ding, maar je moet er wel ff op je gemak naar kijken. :Z

Ik heb het opgelost door info in te laten vullen op een speciaal form (eis van de gebruikers :? ) maar het kan natuurlijk ook direct in een tabel

Het is misschien al wel duidelijk dat ik 14 foutcodes heb, waar jij er zoals ik het begrijp 39 hebt. Ik heb dezelfde keuze gemaakt als jij door in een record 14 verschillende foutcodes op te nemen. Dit ivm verschillende redenen, voornamelijk het gebruikersgemak (tabben door de foutcodes), en het beschikbaar hebben van alle gegevens in EEN record.

mbv deze bva code kan je dus alleen de ingevulde codes van EEN RECORD zichtbaar maken, ipv alle foutocodes.

ik hoop dat je wat aan al dit geblaat hebt :)

wel een vette lay-out trouwens, die van mij is dan maar saai grijs :O

Verwijderd

Gaaf design, is weer eens wat anders. Maar misschien wil je Bas nog even inlichten dat je zijn software hier showt :) :) :)

Verwijderd

Topicstarter
Ok, thanx! Ik ga eens met die sql aan de gang.

En boschpj... Ik ben Bas :) En bedankt voor het compliment!

Verwijderd

Ik weet dat je null velden weg kan laten met door in het formulier trim voor het item te zetten... Bijv: een adresetiket

naam bedrijf
trim: tav. [contactpersoon]
adres

Zo geeft hij alleen contactpersoon weer als hij ook in de database is ingevuld.. Ik weet niet of je hier iets mee kan..maar wie weet...

  • jantje_20
  • Registratie: Augustus 2000
  • Laatst online: 05-02 23:00
Ik zou wel eens willen weten hoe de databasestructuur in elkaar zit (laat een schermschot van de relaties tussen de tabalelen zien). Ik heb namelijk een tijdje geleden met hetzelfde probleem gezeten dat ik waarden uit een rapport wilde filteren. Daarbij was een ontwerpfout gemaakt in de databasestructuur. Ik ben er toen wel uitgekomen maar via een omweg (thuis heb ik het programma nog dus voor de oplossing die ik heb gebruikt kijk ik vanavond nog even).

Je kunt waarschijnijk het beste je database gedeeltelijk opnieuw ontwerpen. Uit eerder post heb ik namelijk begrepen dat je een tabel heb waarin 39 'kolommen' staan waarvan er bijvoorbeeld maar 1 gevuld is en de rest de waarde 'Null' heeft. Zoveel Null waardenin een table wil je sowieso niet en dat probleem los je op de deze manier ook op.

Oplossing: Maak een tabel met een veld 'id' en een veld 'reden' (ofzoiets) en misschien een veld 'omschrijving' (handig in rapporten en bij onderhoud van de redenen), maak ook nog een 'tussentabel' waarin de relatie wordt gelegd tussen targets en redenen waarom de target niet is gehaald met de naam 'targets_reden' (ofzo). Deze heeft de velden 'targetid' (vreemde sleutel naar tabel 'target') en 'redenid' (vreemde sleutel naar tabel 'reden'). De tussentabel 'targets_reden' vul je in als er een reden is als een target niet is gehaald.
Op deze manier heb je geen Null-waarden meer in de database en lijkt het me (bijna) onmogelijk om deze in de rapporten te zien te krijgen.

Verwijderd

Echt een nette oplossing is het niet maar het zou moeten werken:
Plaats al je standaard velden en daaronder 1 veld waarin je je reden wilt plaatsen.
Zet de volgende tekst als controlsource: =iif([veldnaam] is null;;"Te weinig personeel: " & [veldnaam] & chr(13) & chr(10)) & iif([veldnaam2] is null;;"volgende reden: " & [velnaam2] & chr(13) & chr(10))
is een veld leeg dan verschijnt ie ook niet.

/edit
Zo plaats je dan alle 39 velden in 1 control. Het word wel een beetje lang ...
Pagina: 1