Record aanpassen of niet ...

KarenKaren Member Posts: 79
edited 2005-04-29 in NAV Dutch speaking only
1) Als een bepaald veld (in de heading) ingevuld is op het form, dan mogen de records in het subform niet meer aangepast worden.

2) In de subform: als een veld een bepaalde waarde heeft dan moet een ander veld (geen primary key) verplicht ingevuld worden.


Hoe kan ik dit het beste oplossen?

Alvast bedankt!!!

Comments

  • PEzechielsPEzechiels Member Posts: 83
    1 Op het moment dat het veld in de heading gevuld wordt kan je d.m.v een script je subform op niet editable zetten(currform.subformname.editable(false))
    Je kan het in de OnAfterValidate() van het veld zetten of op het moment wanneer je je check wil laten uitvoeren.V.b.
    IF veld <> ' ' then
    CurrForm.Subformname.editable(false)
    else
    Currform.Subformname.editable(true);
    Deze script moet je dan ook in de onaftergetrecord trigger van het form zetten.


    2 In de Onactivate van de velden die volgen na het geconditioneerd verplicht veld zet je dan
    IF veldA = 'X' and verplichtveld = ' ' then
    Message('Verplicht veld moet worden ingevuld als veldA de waarde X heeft')

    Je kan die script ook zetten in de OnAfterGetRecord van het form .Je krijgt dan die message zodra het record wordt opgehaald.
    Error kan ook gebruikt worden ,alleen wordt je dan uit de form gesmeten


    Hopelijk helpt dit je op weg.
  • KarenKaren Member Posts: 79
    Puntje 1 werkt nu perfect

    Maar voor puntje 2: Als je een message zet gaat hij toch nog door naar het volgende record en word er een verkeerde record geinsert. Hoe kan je ervoor zorgen dat die dan in het huidige en foute record blijft?
  • PEzechielsPEzechiels Member Posts: 83
    Probeer dit:
    Plaats deze code binnen de tabel binnen de trigger OnInsert()

    IF (VeldA <> '' ) AND ( Verplichtveld = ' ' ) THEN
    ERROR('Verplicht veld moet worden ingevuld als veldA de waarde X heeft');
  • PEzechielsPEzechiels Member Posts: 83
    ik bedoel
    if (veldA = 'X' )and (verplichtveld = ' ' )
    waarbij X natuurlijk de specifieke waarde is waarvoor er geen lege waarde in het ander veld mag zijn


    gr,

    Patrick
  • KarenKaren Member Posts: 79
    Bedankt, het werkt

    :)
  • KarenKaren Member Posts: 79
    Heb nog een vraagje:

    Sommige velden in het subform moeten verplicht ingegeven worden
    Als ik in de tabel zelf aanduid dat deze NotBlank zijn dan wordt er een foutmelding gegeven en vlieg ik er gewoon uit.

    Als ik NotBlank af zet en bij
    OnInsert()
    IF (VeldA = '') THEN
    ERROR(....)

    Dan vlieg ik er ook uit.

    Bij een ander veld lukt dit wel met ERROR(...)

    Heeft dit te maken met de primary key. Het veld waar het niet lukt behoort tot een samengestelde primary key, terwijl het veld waar het lukt geen primary key is.
  • PEzechielsPEzechiels Member Posts: 83
    Ja ik denk dat dit te maken heeft met je Samengestelde primary key.

    Die NotBlank Property heeft pas effect nadat de waarde in het veld gevalideerd is m.a.w. je moet eerst in het veld geweest zijn dus dat is niet echt een verplichting want men hoef niet in het veld te klikken.
  • KarenKaren Member Posts: 79
    Wat is dan een mogelijke oplossing om een message te geven als een veld - dat in de primary key zit - niet ingevuld is?

    Ik heb op het forum volgende oplossing gevonden:

    op tabelniveau:
    onInsert() + onModify() trigger:
    TESTFIELD(verplichte veld);
    Bij props van verplichte veld:
    NotBlank = Yes

    op formniveau:
    DelayedInsert = Yes


    Maar ook dit werkt niet!!!
  • PEzechielsPEzechiels Member Posts: 83
    Waar zou je die melding precies willen hebben? Bij het verlaten van het scherm?Bij het gaan naar het volgende record? Bij het aanmaken van een nieuw record?Bij modify van een record? Bij het activeren van een veld?
    Er kan namelijk wanneer jij dan ook maar wilt een check worden gedaan op de inhoud van velden.
    De functie MESSAGE geeft een melding maar je kan dan verder gaan(niet verplicht)
    De Functie ERROR op Form niveau geeft je een melding maar gooit je uit het scherm.
    De Functie ERROR op Tabel niveau geeft je een melding maar gooit je niet uit het scherm.
    En de Property Notblank verplicht je een veld in te vullen alleen als je daarna een testfield doet.
    Je testfield kan worden aangeroepen bij de onactivate trigger van de daarna volgende velden of bij de oninsert trigger van de tabel.
    Het probleem echter is dat als de melding verschijnt het een beetje onduidelijk kan zijn voor de gebruiker maar probeer dit:
    Zet NotBlank op Yes van verplicht veld.
    Zet Testfield (Verplicht veld)in Onactivate trigger van volgende velden
    Zet Testfield (Verplicht veld)in OnInsert van tabel.
    Het zou ook moeten werken voor velden in een samengestelde PK
  • KarenKaren Member Posts: 79
    Mijn bedoeling is een melding te geven op het moment dat het record zou geinsert moeten worden. Als er een fout is (dus een verplicht veld niet ingevuld is) mag dit natuurlijk niet gebeuren.

    - Heb dus prop NotBlank van veldA op yes gezet
    - Onactivate van de volgende velden: TESTFIELD(veldA);
    - OnInsert van tabel: TESTFIELD(veldA);

    Run

    Krijg dan de volgende melding:
    You must specify <veldA> in <tabelnaam>...

    En dan vlieg ik eruit
  • KarenKaren Member Posts: 79
    Heb zelf een oplossing gevonden:

    Notblank bij alle velden op no

    Dan een functie aangemaakt bij de tabel zelf. Deze voert een controle uit op het veld en geeft dan de waarde true of false terug

    Bij OnInsert() van tabel gaan we dan deze functie oproepen voor dat veld en afhankelijk van de waarde die hij terug geeft wordt er een ERROR getoond.

    En dan gaat het bij mij wel.

    Toch bedankt voor de hulp
  • KarenKaren Member Posts: 79
    Mijn oplossing werkte 1 dag.
    Wordt er nu weer elke keer uit gegooid bij het gebruik van ERROR of TESTFIELD!!!
    Wat moet ik doen?
  • KarenKaren Member Posts: 79
    En nu gaat het weer wel :-k :-k

    Ik denk da ik de oorzaak heb gevonden. Ik doe tussen door een update van mijn form om een veld editable(false) te maken. Als ik dit verwijder dan werkt het wel naar behoren. Hoe moet ik da dan oplossen met mijn veld dat editable/niet editable moet gemaakt worden?
    Iemand een idee? :?: :?: :?:
Sign In or Register to comment.