Variabele tekst op rapport krijgen

Status
Niet open voor verdere reacties.

FrankinZwolle

Gebruiker
Lid geworden
29 sep 2014
Berichten
41
In een topic van 5 februari 2015 wordt er gesproken over tekst invullen op een formulier wat dan op de afdruk van een rapport terecht kan komen.

Ik kom er niet achter hoe ik dit voor elkaar krijg. :confused:

In de bijlage een database met hierin een formulier Selectie. Op dit formulier wil ik een veld maken waarin de gebruiker tekst kan typen. Dit kan iedere keer andere tekst zijn. De ingevoerde tekst hoeft ook niet opgeslagen te worden. Na printen rapport wordt formulier gesloten en dan kan de tekst ook weg. Graag in een paar stappen wat voor veld ik op het formulier moet toevoegen en hoe ik dit veld op het rapport krijg.

BVD
Frank
Bekijk bijlage Playground.zip
 
En hoe moet ik jouw vraag terug zien in een rapport? Ik neem aan dat je het over het rapport [Report_Morphine] hebt, want die open je met je knop. Al snap ik dan weer niet waarom daar een Tabelmaak query bij zit, maar dat is hopelijk geen probleem i.v.m. je vraag.
 
Klopt: tekst moet op Report_morphine terecht komen. In plaats waar nu op het report de statische tekst staat.

En je verder niet al te veel van de tabelmaak query aantrekken. Zoals de naam van de db als zegt is dit een probeer db waar ik dingen uit probeer te goochelen voordat ik het in een echt systeem doorvoer,
 
Laatst bewerkt:
Ik zie alleen een tekstvak10, en dat is leeg. Wil je dat gevuld hebben?
En je verder niet al te veel van de tabelmaak query aantrekken.
Te laat :). Ik kan niet zo goed tegen databases waar verkeerde tabellen en queries in staan, dus die heb ik al verbeterd :D.
 
Ik heb je voorbeeldje zodanig aangepast dat je de tabelmaakquery niet meer nodig hebt. Het rapport gebruikt nu een query die door het formulier wordt aangepast. De query hangt dus vast onder het rapport. Daarnaast heb ik toch maar alle overbodige rotzooi uit je tabel verwijderd, zoals de velden Year, Month, Quarter, MonthName en die velden vervangen door één datumveld. Onthoud: data die je kan afleiden uit een veld in de tabel, sla je nooit op in een tabel, maar bereken je via een query.
Op het formulier staat nu een tekstveld waarin je losse tekst kunt typen. Als je het rapport opent, wordt de tekst op het rapport gezet.
Volgens mij is dit ongeveer wat je bedoelt...
Zoals de naam van de db als zegt is dit een probeer db waar ik dingen uit probeer te goochelen voordat ik het in een echt systeem doorvoer,
Prima dat je dingen uitprobeert, maar beperkt dat dan tot zaken die nuttig zijn voor je database :D.
 
Hier :). Bijlage vergeten :o
 

Bijlagen

Hallo OctaFish, jij bent goed.
Stel ik een vraag krijg ik antwoord en als extraatje ook antwoord op vragen die ik nog niet gesteld had maar waarmee ik een aantal nog openstaande wensen van de gebruikers zeker kan kan inwilligen. TOP!!

Ben aan het puzzelen geweest in je db. Even voor mij juiste beeldvorming dat ik het begrijp (en dus ook kan gaan inzetten in de echte database).
Ik heb een Test_source tabel
Ik heb een qReport_morphine selectie query.
Ik heb een formulier waarin ik een maandnummer en een jaar invul.
Als ik in dit formulier op [Print] druk gaat er in vb een procedure lopen die een selectie maakt van regels uit de Test_source tabel, met het maandnummer en het jaar als WHERE.
Het resultaat van deze query wordt weggeschreven in de qReport_morphine query.
Om tot slot van de procedure het report te openen.

Klopt dit of mis ik ergens iets?

Tevens loop ik nog tegen 3 issues aan:
1. als er geen tekst is ingevuld in het vrije tekstveld op het formulier (hetgeen kan gebeuren want niet altijd hoeft er extra informatie meegestuurd te worden) dan komt er een foutmelding. Leeg maar blijkbaar niet. Hoe dat op te lossen.
2. Als de query geen resultaat geeft komt er een niet gebruikersvriendelijke melding over foutopsporing, bijvoorbeeld bij maand 6, jaar 2015. Is er een optie dat hier een nette melding komt. Iets van "No data found in the selected period". Dan op een OK knop klikken en je hebt het selectie formulier nog in beeld.
3. een probleem met de kruistabel_consult: zoals te zien kunnen er in de test_source tabel twee soorten productnamen voorkomen. Alleen gebeurt het wel dat niet beide producten in een geselecteerde maand voorkomen. Bijvoorbeeld maand 7, 2014. Ook dan komt er een foutmelding. Kijk je in de qReport_morphine query dan zie je wel regels staan alleen van 1 productnaam. Hoe toch een report te krijgen waarin de gegevens voor de productnaam die er niet is gewoon leeg zijn (aantal 0 of blanc) en de gegevens voor het product wat wel voorkomt gevuld?

Hoop dat ik niet te veel vraag, zou geweldig zijn als dit opgelost zou kunnen worden.

BVD
Frank
 
Klopt dit of mis ik ergens iets?
Helemaal juist!
Wat de procedure doet (en dat is eigenlijk tegenwoordig mijn vaste werkwijze) is de query maken d.m.v. het letterlijk wegschrijven van de gefilterde waarden. Het maken van die SQL string is niet zo moeilijk: ik maak eerst de query inclusief de filters, zoals je 'm zelf ook maakt. Vervolgens kopieer ik de SQL uit die query, en die plak ik dan in de procedure. Krijg je gelijk allerlei fouten, maar dat boeit op dat moment niet, want de tekst die je plakt moet je toch eerst opschonen. Als je de tekst uit strSQL in een Inutbox zou zetten en je plakt die in een nieuwe query, krijg je dus een complete normale query te zien. En dat is ook één van de redenen om het zo te doen, want je kunt het resultaat heel makkelijk controleren op fouten.
De opgebouwde string wordt daarna in de bestaande query geplakt. Dat gebeurt doordat je de query uit de querydefs collectie kunt opvragen. Je vervangt dus de oude query door de nieuwe. En meer is het eigenlijk niet :).

Vraag 1: je kunt die fout simpel ondervangen door de code uit te breiden:
Code:
OpenArgs:=Me.txtVrijeTekst & ""

Vraag 2:
Een rapport heeft de eigenschap <Bij geen gegevens>, en die is daar uiteraard voor bedoeld.
Code:
Private Sub Report_NoData(Cancel As Integer)
    MsgBox "Geen data in het rapport"
    Cancel = True
End Sub
Dan loop je nog tegen de foutmelding aan die het openen van het rapport oppevert, en daar kun je ook nog omheen:
Code:
    On Error Resume Next
    DoCmd.OpenReport "Report_morphine", acViewPreview, OpenArgs:=Me.txtVrijeTekst & ""

Vraag 3: snap ik niet :)
 
Natuurlijk weer bedankt voor je duidelijke uitleg. Had ik het dus goed begrepen. Ga ik mee verder.

Je begrijpt vraag 3 niet: Dan moet ik de vraag beter uitleggen.
Op het Report_morphine worden twee subreports gebruikt. Een ervan is het subreport_consult. Dit report is opgebouwd met de data uit de kruistabel_consult. De kolomgegevens bestaat uit een paar rijen en 2 verschillende kolommen met de productnamen Morphine 5mg/5ml en Morphine 50mg/5ml. Zolang er in een geselecteerde periode beide producten voorkomen heb je dus een subreport met een kolom per product. En dan ook nog een totaal kolom maar dat is in deze niet zo belangrijk. Maar als er nu een maand is waarin een van de twee producten niet uitgegeven is dan geeft het report een fout. Is wel met bovenstaande code te voorkomen maar dan wordt er dus niets afgedrukt Ook niet 1 kolom met de data van het wel voorgeschreven product.

Goed voorbeeld is maand 7 - 2014. Daarin is alleen Morphine 5mg/5ml voorgeschreven en niet de Morphine 50mg/5ml. En dat geeft dus geen enkel data in het report. Ik zou eigenlijk willen dat beide kolommen er altijd zijn of er nu iets voorgeschreven is in de geselecteerde periode of niet.
 
En dat geeft dus geen enkel data in het report.
Zo logisch is je 'dus' niet, want als je de kruistabel uitvoert zit de data er gewoon in. Met dus maar één kolom i.p.v. 2. En daar gaat je rapport dan de teil in, want er is geen tweede kolom in de query, en je rapport verwacht 'm wel. De oplossing is, als je de voorgaande zin leest, dus heel erg simpel: zorg er voor dat er nooit minder kolommen in de kruistabel zitten! Oftewel, om met een groot detective te spreken: als alle logische mogelijkheden niet de oplossing zijn, dan is de oplossing een onmogelijke :). Maar dat valt hier dus heel erg mee, want je hoeft er alleen maar voor te zorgen dat de kolommen altijd bestaan, en dat doe je door de velden die je altijd wilt zien als kolomkop vast te leggen. In de eigenschap Kolomkoptekst van het betreffende veld (uiteraard het veld dat je voor de kolomkop gebruikt) zet je derhalve:
Code:
"Morphine 5mg/5ml";"Morphine 50mg/5mg"
 
Al eerder geroepen maar doe het nog een keer: TOP!
Alles beantwoord, hoop dat iemand anders er ook nog iets aan heeft gehad. Ik in ieder geval wel. Veel geleerd wat ik zeker in de nabij toekomst goed kan gebruiken.
Ik ben er blij mee maar ook zeker de mensen in Oeganda die het programma gebruiken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan