memo-veld invullen

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.682
Hallo
Ik heb per record een memoveld
Hier wil ik nota's in kwijt die op datum ingegeven worden
De meest recente datum wil ik bovenaan in het memoveld
Zou het mogelijk zijn om op het record een knop te maken die bij klikken, automatisch VOORAAN in het memoveld, de datum (vet en onderlijnd) invult en vervolgens de cursor naar een lege lijn onder deze datum brengt?
Dus, alles wat al in het memoveld stond moet zakken om bovenstaande gegevens toe te laten. (maw je zou dus eigenlijk al moeten starten met een "return" om hier de datum weg te schrijven)

MErci
JP
 
jouw aanpak niet logisch

Eh.....als het gaat om een database, is wat jij beschrijft niet heel erg logisch.

Het idee dat je meerdere nota's gaat opslaan per record gaat in tegen het concept van 'normalisatie'

Alleen al het probleem dat je zelf omschrijft (lege regel creëren bovenin memoveld om iets nieuws toe te voegen) geeft al aan dat jouw manier van inrichting van de database cq tabel, niet praktisch is.

Vraag:
Waarom heb je voor deze oplossing gekozen, in plaats van één record voor één nota?
 
@tecsman: wat TS wil druist niet in tegen de normalisatieregels. TS wil (als ik hem goed begrijp) in een memoveld bijhouden welke facturen er naar een klant zijn gestuurd. Als een overzichtje dus dat in het klantrecord staat. Die facturen zelf staan in een eigen tabel.
@JP: dat kan prima; ik zal je de code geven maar moet hem nog even opzoeken.
 
@Octafish OK, als jij mogelijkheden ziet om aan de wens van JP tegemoet te komen, is dat natuurlijk prima.

For the sake of discussion
je doet twee aannames die ik niet onderbouwd zie in de vraag van JP:
  • dat het om een klant-record gaat en
  • dat de nota's (cq facturen) ook nog in een eigen tabel staan.

Ik zou me ook nog kunnen voorstellen dat het om persoons-records gaat,
en dat die personen beleids-nota's hebben geschreven. :)
 
Laatst bewerkt:
@tecsman: ik heb de echte db van Jean-Paul gekregen, dus ik weet toevallig wat er zoal bedoeld wordt. Vandaar dat ik wat makkelijker kan antwoorden :)
 
Waarmee ik nog geen antwoord gekregen heb op mijn vraag... het betreft het bijhouden van een patientendossier met oa klinische bevindingen
 
Waarmee ik nog geen antwoord gekregen heb op mijn vraag...
Ongeduldig... :). Maar ik moest het voorbeeld uit een db op het werk halen, en dat kon pas vandaag. Dit is hoe ik het doe:
Ik heb een apart popup formulier voor de memovelden, waarop een groot tekst staat. En een knop <Opslaan>. Dat formulier wordt vanuit verschillende memovelden bij mij gebruikt, daarom is het geheel generiek gemaakt met een functie die in een losse module staat. Als het veld nog leeg is krijg je de vraag of je een nieuwe tekst wilt toevoegen (zie je zo wel), anders wordt het formulier geopend met de huidige tekst. De aanroep van die module ziet er zo uit:
Code:
=NotitieBewerken([reden_afsluiting_toelichting])

En die code wordt gestart bij de gebeurtenis <Bij klikken>. Daar staat bovenstaande opdracht dus letterlijk in. In jouw geval zul je de naam van het veld (tussen de haken) moeten aanpassen.
In mijn geval wordt het veld [reden_afsluiting_toelichting] dus ingelezen in het formulier fNotitie. Dat formulier is dus van het type Pop-Up, bevat één tekstvak (<Notitie>) en een knop om te sluiten. Dat formulier wordt geopend met deze functie:
Code:
Function NotitieBewerken(ctl As Control)
Dim bC As Integer
    On Error GoTo Hell
    Application.TempVars.Remove "varNotitie"
    If ctl.Text & "" = vbNullString Then
        bC = MsgBox("Wil je nieuwe tekst invoegen?", vbYesNo, "Nieuwe notitie")
        If bC = vbYes Then
            Application.TempVars.Add "varNotitie", ""
            DoCmd.OpenForm "fNotitie", WindowMode:=acDialog, OpenArgs:=TempVars("varNotitie")
        Else
            Exit Function
        End If
    Else
        Application.TempVars.Add "varNotitie", ctl.Value  
        DoCmd.OpenForm "fNotitie", WindowMode:=acDialog 
    End If
    ctl.Value = TempVars("varNotitie") & ""

Hell:
End Function

In de functie wordt een Tempvar aangemaakt (varNotitie) en die wordt dan op het notitieformulier weer uitgelezen. Hier zit dus ook de check in of het tekstveld leeg is of niet; bij abuis klikken in het (lege) veld wil je natuurlijk niet dat er wat wordt weggeschreven.

Op het formulier krijg je dan deze code die wordt uitgevoerd bij het laden van het formulier:
Code:
Private Sub Form_Load()
Dim tmpD As Variant
    
    tmpD = Now
    If Len(TempVars("varNotitie")) > 0 Then
        With Me.notitie
            .SetFocus
            .Value = tmpD & vbCrLf & vbCrLf & TempVars("varNotitie")
            .SelStart = Len(tmpD & vbCrLf)
        End With
    End If
    If Len(TempVars("varNotitie")) > 2000 Then
        Me.notitie.ScrollBars = 2
        Me.Repaint
    Else
        Me.notitie.ScrollBars = 0
    End If
End Sub

Deze code zet eerst de datum+tijd in een variabele, en vervolgens wordt deze variabele in het tekstvak gezet samen met de bestaande tekst, die uit de Tempvar komt. In de code zitten twee <Enters>, en de cursor wordt na de eerste gezet, dus op de nieuwe lege regel. Volgens mij is dat wat je wilt. Er zit verder geen check in of je ook daadwerkelijk wat intypt; ik kan mij voorstellen dat je, als je nikst typt om wat voor reden dan ook, dat je eigenlijk de waarde niet wilt opslaan. Maar die code zit er nu dus niet in.
Bij het sluiten van het formulier wordt de Tempvar gevuld met de nieuwe inhoud, zodat die in het formulierveld kan worden ingevuld.
Code:
Private Sub cmdSluiten_Click()
    TempVars("varNotitie").Value = Me.notitie.Value
    DoCmd.Close acForm, Me.Form.Name
End Sub

Dat bijwerken gebeurt dus in de laatste regel van de functie:
Code:
    ctl.Value = TempVars("varNotitie") & ""

Kijk maar eens of je dit kan bouwen.
 
Bedankt voor je uitleg en het ziet er allemaal heel indrukwekkend uit... ;)
De knop die ik nu aanmaakte gebruikt volgende code
Private Sub Memoveld_Click()
Me.TxtOpmerkingen = Date & vbCrLf & TxtOpmerkingen
End Sub
doet dus wel wat ik wil nl een datum invullen in het memoveld en de rest van de tekst naar onder verplaatsen
de enige vraag was of ik de datum in het memoveld ook onderlijnd en vet kon maken zodat een onderscheid duidelijker is
Ik probeerde:
Me.TxtOpmerkingen = <div><strong><u> date </u></strong></div><div> Me.TxtOpmerkingen</div>
maar dat gaf een compilatiefout

Dus graag een oplossing hiervoor
JP
 
Volgens mij is jouw oplossing niet volledig omdat je de cursor niet onder de datum zet. Kan zo ook niet. Mijn oplossing werkt ook vele malen beter voor een gebuiker, omdat als veel overzichtelijker is en logischer werkt.
Dat onderstrepen kan alleen als je de veldeigenschappen goed instelt. Staat nu dus niet goed denk ik.
 
als mijn veldeigenschappen het probleem zouden zijn dan zou ik toch op die bewuste lijn geen compileerfout mogen krijgen?
en waar, in jouw code, zie ik een commando om een datum vet en onderlijnd te krijgen?

JP
 
Die heb ik niet :). Overigens is dat ook een HTML tag, want dat is de enige manier
 
en dat was nu net de initiële bedoeling
dus HTML gedoe geeft een compileringsfout... wat is dan het alternatief? of KAN het gewoon niet
 
Het helpt als je de goede tags gebruikt. DIV hoort daar niet bij :) en strong ook niet. Je wilt toch onderstrepen? <u> .. </>
 
als ik het volgende schrijf:

Me.TxtOpmerkingen = <u> Date </u> & vbCrLf & TxtOpmerkingen

krijg ik een foutmelding: "Verwacht expressie" compileerfout... ben er dus NOG niet

pfff... wordt er wat moedeloos van (beetje maar)
 
Nogmaals: staat het veld wel goed ingesteld? Bij mij werkt het prima.
 
Wanneer is het veld “goed ingesteld” wat zijn de settings die dit veld moet hebben dan?
 
Het memoveld moet zijn opgemaakt met de optie <Tekst met opmaak>. En dan kun je de opmaak al gelijk testen in het veld, als je bijvoorbeeld de zoomfunctie gebruikt.
 
Ik verander de opmaak naar “tekst met opmaak” zelfde foutmelding... code werkt niet en die zoomfunctie.. sorry maar ik weet echt niet waar je het over hebt...
 
Ik heb mijn code aangepast zodat hij nu ook in een tekstvak werkt met opmaak. Je moet dan ook de tekstvakken in de formulieren opmaken met <Tekst met opmaak>, omdat je anders gestoord wordt van de HTML codes, maar als je daar doorheen kan lezen, is dat natuurlijk prima verder.
Code:
Private Sub Form_Load()
Dim tmpD As Variant
    
    tmpD = Now
    If Len(TempVars("varNotitie")) > 2000 Then
        Me.notitie.ScrollBars = 2
        Me.Repaint
    Else
        Me.notitie.ScrollBars = 0
    End If
    If Len(TempVars("varNotitie")) > 0 Then
        With Me.notitie
            .SetFocus
            .Value = "<b><u>" & tmpD & "</b></u>" & "<br><br>" & TempVars("varNotitie")
            .SelStart = Len(tmpD & vbLf)
        End With
    End If
End Sub

Het Zoomvenster krijg je trouwens als je in een veld staat, en je drukt op <Shift>+<F2>.
En deze code doet het toch echt prima.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan