Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: dubbele invoer vermijden via foutmelding (op basis van 2 velden)  (gelezen 5543 keer)

0 leden en 1 gast bekijken dit topic.

Offline knopperke

  • Lid
  • *
  • Berichten: 69
  • Oplossing.be
Ik heb een bestand waarbij ik reeds enkele velden ingevuld heb, maar ik wil voorkomen dat ik, bij het invullen van nieuwe records,  dezelfde gegevens invul. Ik wil dus dubbele invoer vermijden via een berichtvenster, en dat me dan de kans heeft opnieuw te beginnen. Ik krijg wel een vreemde foutmelding zodra ik het eerste veld ingevuld heb.

Doe ik het best met dlookup in ene macro, of via vba. Ik wil wel hebben dat er gebaseerd wordt op 2 ingevulde velden, dus  ItemNummer en ItemDatum.

Wie kan mij  helpen? Het bestandje, in Access 2007 formaat, zit hierbij.
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline Firebirdy

  • Ambassadeur
  • *****
  • Berichten: 2.408
  • Geslacht: Man
Re: dubbele invoer vermijden via foutmelding (op basis van 2 velden)
« Reactie #1 Gepost op: 27 mei 2011, 17:27:09 »
Hallo Knopperke,

ik ga even doen alsof ik niet gezien heb dat de bestandsnaam Oefening dlookup en duplicate entries is ;D :P.

Ik ken niet zoveel van Access, maar ik vond denk'k wel twee foutjes:
1) DLookup verwacht als argumenten tekenreeksen (strings). Jij had DLookUp([ItemDatum];... ipv DLookUp("[ItemDatum]";... . Dat verklaart de 'vreemde' fout die je kreeg. Het is in zo'n geval altijd handig om eens de functie op te zoeken om te kijken of je die qua syntax wel correct gebruikt.

2) DLookup wordt volgens mij verkeerd gebruikt.
Wat jij had als voorwaarde: DLookUp("[ItemNummer]";"tblGegevens";"[ItemNummer]>0") And ... .

Dat zoekt volgens mij gewoon de eerste waarde op in de tabel tblGegevens waarbij ItemNummer > 0. Er staat nergens bij dat er moet gezocht worden naar een specifiek nummer, namelijk het nummer dat je ingevuld hebt :).

Daarom dit:
Citaat
DLookUp("[ItemNummer]"; "tblGegevens"; "[ItemNummer] > 0
and [ItemNummer] = " & CLng([Forms]![frmGegevensinvoer]![ItemNummer])) Is Not Null

Nu wordt er gezocht naar een record met hetzelfde ItemNummer. CLng converteert de tekst (ItemNummer is op de form een tekstvak) naar een geheel getal van type Long.

Ten slotte heb ik nog 'Is Not Null' bij de voorwaarde gezet, omdat DLookup null teruggeeft wanneer er niets gevonden is. Op die manier wordt er geëvalueerd naar een true/false waarde.

Nu hoop ik juist dat de Access experts hier nog iets heel laten van m'n redenering :).

Offline knopperke

  • Lid
  • *
  • Berichten: 69
  • Oplossing.be
Re: dubbele invoer vermijden via foutmelding (op basis van 2 velden)
« Reactie #2 Gepost op: 27 mei 2011, 20:10:07 »
Het is wel degelijk een probleem voor mij, geen oefening. Het is een variant van een database dat ik gebruik voor mijn werk. En die datum.

Ik had wel die twee velden tegelijk gekozen vooraleer ik "voor bijwerken" koos, zodanig dat in de 2 velden, dezelfde macro stond. Kan dat ook de oorzaak zijn? Of een ervan? Een dubbele invoer vermijden, wil ik zeker vermijden bij mijn collega's, zodra ik de passende databank gemaakt heb voor het invoeren van facturen, op basis van de velden factuurdatum en factuurnaam, mijn eigenlijk projekt.
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

Offline Firebirdy

  • Ambassadeur
  • *****
  • Berichten: 2.408
  • Geslacht: Man
Re: dubbele invoer vermijden via foutmelding (op basis van 2 velden)
« Reactie #3 Gepost op: 27 mei 2011, 20:14:40 »
Citaat
Ik had wel die twee velden tegelijk gekozen vooraleer ik "voor bijwerken" koos, zodanig dat in de 2 velden, dezelfde macro stond. Kan dat ook de oorzaak zijn? Of een ervan?
Oorzaak van wat, van die fout? Kan je misschien eens de exacte foutmelding geven die jij krijgt? Degene die ik krijg bij de database zoals ze in bijlage toegevoegd is, werd zoals gezegd verholpen door de dubbele aanhalingstekens te gebruiken bij het eerste argument van DLookup() :).

Offline Stegisoft

  • Ambassadeur
  • *****
  • Berichten: 2.342
  • Geslacht: Man
Re: dubbele invoer vermijden via foutmelding (op basis van 2 velden)
« Reactie #4 Gepost op: 28 mei 2011, 00:15:34 »
Goedendag knopperke,

Uw denkpiste is verkeerd. (Denk ik)
Je maakt ID in de tabel en dus is ID uniek volgens jou.
Maar je kan beter factuurnummer als uniek zetten zodat je geen twee keer dezelfde factuur kunnen maken.
Het zou nog beter zijn dat je zelf de factuurnummer automatisch bijwerkt bij nieuwe record.
Met een kleine aanpassing kunnen ze zelf niet eens wijzigen.
Voor zoiets hoeft je maar een kleine wijzigen invoeren in vb.

Bedoeld je zoiets?
Dan kan ik wel zoiets in mekaar steken want dat systeem gebruik ik ook.

Als ItemID gekoppelt is aan andere tabel kan ik ook zoals boven doen.

Ik weet niet of je een database model hebt gemaakt alvorens te programmeren.
Zo te zien maakt je per bestelling 1 factuur
Dus maakt je geen gebruikt van bestelbon?

Je kan 1 factuur maken per bestelling uitvoeren.
Maar je kan ook meerdere bestelling bij 1 factuur zetten.
Een voorbeeld:
Een klant besteld bij u regelmatig dan kan je beter 1 factuur maken voor meerdere bestelling.
Het is kostelijk om een factuur te maken als een klant even bij u binnen springt om een paar producten af te halen en daarna betalen want morgen komt hij nog eens terug.


Groetjes

Stegisoft
Linux Mint 19.3 64 bits sinds 4/2019
Intel Core i7 5820K @ 3.30GHz
16,0GB Dual-Kanaal Onbekend @ 1197MHz
EVGA INTERNATIONAL CO.LTD 131-HE-E095
NVIDIA GeForce GTX 960
238GB NVMe Samsung SSD 950 (M2 SSD)
ASUS BC-12D2HT (Blu-ray - DVD-RW)
ASUS Essence STX II Audio Device
Waterkoeling Corsair Hydro Series H100i V2

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: dubbele invoer vermijden via foutmelding (op basis van 2 velden)
« Reactie #5 Gepost op: 28 mei 2011, 08:35:40 »
Ik zou een Dcount gebruiken omdat dit altijd een getal teruggeeft.
Dlookup geeft NULL terug als er niets gevonden wordt.

En ook zoals andere het al zeiden. Als Itemnummer een uniek veld is, waarom maak je 'dat' als sleutelveld niet? Een sleutelveld hoeft zeker geen autonummeringveld te zijn.

Ik zou ook in geen geval het formulier koppelen aan tblGegevens maar de velden laten invullen en bij klikken op de knop pas de gegevens wegschrijven.

Private Sub ItemNummer_BeforeUpdate(Cancel As Integer)
   
    'Gebruik een Dcount ipv Dlookup
    'Dcount geeft bij geen gevonden 0 terug
    'Dlookup geeft als waarde null terug --> als je dat ergens probeert in te stoppen krijg je een error die je moet opvangen
    Dim AanTalVanDitItemnummer As Byte
   
    AanTalVanDitItemnummer = DCount("ItemNummer", "tblGegevens", "Itemnummer=" & Me.ItemNummer)
    If AanTalVanDitItemnummer > 0 Then
        'Geef een boodschap dat nummer al bestaat
        MsgBox "Sorry dit nummer is al in gebruik", vbCritical

        'Verlaat de sub
        Exit Sub
    End If
End Sub
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.345
  • I've Upped my standards,now,up yours!
Re: dubbele invoer vermijden via foutmelding (op basis van 2 velden)
« Reactie #6 Gepost op: 28 mei 2011, 09:52:49 »
inbijlage een vbtje
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

 


www.combell.com