Numeriek Field van een recordset leeg maken

Status
Niet open voor verdere reacties.

Mvermeulen

Gebruiker
Lid geworden
5 feb 2013
Berichten
6
Hallo,

Ik zit met het volgende probleem...

Ik heb een bruikleen database welke gebruikt wordt om radio's uit te lenen. Deze bestaat uit twee tabellen.
"tbl Bruikleen" en "tbl Radio"

Nu heb ik in "tbl Radio" een numeriek veld "Bruikleen-ID" welke gerelateerd is aan het autonummerinsgveld ID in de tabel "tbl Bruikleen"

Als ik nu een bestaande bruikleen wil wijzigen, dan kan ik de gevraagde bruikleen openen in een formulier met daarin een subformulier waarin de gegevens uit de "tbl Radio" staan, corresponderend met het ID veld van de bruikleen tabel.
Ik kan middels een routine extra radio's aan het huidige bruikleen toevoegen...

Wat ik echter niet kan is een bepaalde radio uit de huidige bruikleen verwijderen.

Dit is de code wat ik geprobeerd heb werkend te krijgen:
Code:
Dim rst2 As Recordset
Set rst2 = CurrentDb.OpenRecordset("Qry Huidige Bruikleen")

Do While Not rst2.EOF
   If rst2.Fields("Selecteren2") = -1 Then
   rst2.Edit
   rst2.Fields("Bruikleen-ID").Value = Null
   rst2.Fields("Selecteren2").Value = 0
   rst2.Update
   End If
   rst2.MoveNext
Loop

rst2.close

Het "Selecteren2" veld is een selectievakje wat ik gebruik om de desbetreffende radio, welke ik uit de bruikleen wil verwijderen, te selecteren.
Vervolgens laat ik de recordset doorlopen om naar het juiste record te gaan.

dan probeer ik met
Code:
rst2.Fields("Bruikleen-ID").Value = Null
het "Bruikleen-ID" veld leeg te maken, alleen daar gaat het fout.

Ik krijg dan de foutmelding: "U probeert een Null-waarde toe te wijzen aan een variabele die niet van het gegevenstype Variant is"

Ik heb het ook probeert door Null te vervangen door "", maar dat werkt ook niet, omdat ik geen spatie in een numeriek veld mag zetten.

Als ik het veld "Bruikleen-ID" vervang door een tekstveld "Bijzonderheden" dan kan ik dat veld middels bovenstaande code wel leeg maken.
Maar ik kan er geen tekstvak van maken omdat het veld gerelateerd is aan een autonummeringsveld :(

Handmatig kan ik in de tabel "tbl Radio" het "Bruikleen-ID" veld wel leeg maken....

Heeft iemand enig idee hoe ik dit voor elkaar kan krijgen?

Met vriendelijke groet,

Marcel
 
Ik snap je constructie niet helemaal; volgens mij is hij ook niet correct. In de tabel [tbl Radio] sla je normaliter namelijk helemaal geen bruikleenID op. Dat doe je wèl in de tabel [tbl Bruikleen]. Er zou dan ook een één-op-veel relatie moeten zijn tussen [tbl Radio] en [tbl Bruikleen]. Hierbij maak je één uitleenrecord, met één uitleenitem.

Je geeft echter aan dat er per uitleen meerdere apparaten geleend kunnen worden. En dat vereist dan weer een aparte tabel, [tbl_Uitleen_Details] bijvoorbeeld. En deze is dan gekoppeld aan [tbl Radio] en [tbl Bruikleen]. Je krijgt dan een één-op-veel relatie tussen [tbl Radio] en [tbl Bruikleen_Details], en een één-op-veel relatie tussen [tbl Uitleen] en [tbl Bruikleen_Details].
Met zo'n constructie kun je alle kanten uit, en verdwijnt je probleem als sneeuw voor de zon... Overigens krijg je dan velden in tblRadio die de status bijhoudt (<in magazijn> of <UItgeleend> bijvoorbeeld), en in [tbl Bruikleen_Details] en datumveld [Retourdatum].
 
Bedankt voor je reactie!
Alleen nu volg ik jou niet helemaal :)

Waarom zou je in een radio tabel geen bruikleen_ID opslaan maar wel een veld opnemen die de status bij houdt?
En wat is het voordeel om de gegevens via een aparte tabel te koppelen?

Ik heb voor de duidelijkheid een paar screenshots toe gevoegd van hoe ik het nu heb...

- Een formulier wat ik nu gebruik om alle openstaande bruikleen weer te geven. Het bovenste subformulier geeft de data weer uit tbl Bruikleen en het onderste subformulier geeft de data weer uit tbl MOPO waarvan het Bruikleen-ID veld overeenkomt met het geselecteerde record uit de bruikleen tabel. Zoals in het screenshot te zien is, zitten momenteel in Bruikleennummer 26, 4 radio's.
als ik op een bruikleen record dubbelklik opent hij het formulier om een bruikleen te wijzigen.

- Het main form bevat de gegevens uit de tbl Bruikleen. En daaronder in het subformulier, in het huidige tabblad, zie je wederom de data uit tbl MOPO waarvan het bruikleen-ID veld correspondeert met het ID veld van de bruikleen tabel.
Het tweede tabblad bevat alle radio's die nog niet uitgeleend zijn.

- En dan nog twee screenshots van hoe ik mijn tabel momenteel heb opgebouwd.

Ik gebruik overigens voor de subformulieren query's om de juiste gegevens op te halen.

Als ik nu in het Bruikleen Wijzigen formulier, op het tweede tabblad, een vinkje zet bij een radio die ik wil toevoegen aan de huidige bruikleen, en ik druk op de knop Bruikleen Opslaan, dan zet hij de waarde van het ID veld in de tabel bruikleen in het record van de radio waar het vinkje staat. (En hij haalt vervolgens het vinkje weer weg)

Nu kan in in tbl Bruikleen, gewoon het veld Bruikleen-ID handmatig leeg maken, dat is geen enkel probleem. Hij is ook niet required, dus hij mag leeg zijn.
Maar als ik dezelfde code gebruik die ik ook gebruik om een waarde in het "bruikleen-ID" veld te zetten, maar dan ipv de waarde van het ID veld er een Null-waarde in wil zetten dan pikt hij dat niet.
Terwijl als ik het Bruikleen-ID in de code vervang door bijvoorbeeld het "UNIT ID" veld, ik deze wel leeg kan maken middels een Null-waarde.

Wat ik dus niet snap, ongeacht of de constructie niet helemaal juist zou zijn is waarom ik het veld wel handmatig in de tabel leeg mag maken, maar het niet lukt middels het stukje code wat ik in de eerste post heb neergezet.

Een optie die wel zou werken op deze manier is om een record uit de bruikleen tabel te misbruiken en alle radio's die in het magazijn liggen bijvoorbeeld een bruikleen-ID "1" mee te geven.
Want ik kan wel het bruikleen-ID veld wijzigen in een andere numerieke waarde. En dan dit record weg te filteren uit het overzicht. Maarja dat is niet echt wenselijk...
 

Bijlagen

  • bruikleen_overzicht.jpg
    bruikleen_overzicht.jpg
    95,8 KB · Weergaven: 58
  • bruikleen_tabel.jpg
    bruikleen_tabel.jpg
    95,4 KB · Weergaven: 47
  • bruikleen_wijzigen.jpg
    bruikleen_wijzigen.jpg
    92,8 KB · Weergaven: 58
  • radio_tabel.jpg
    radio_tabel.jpg
    101,2 KB · Weergaven: 48
Waarom zou je in een radio tabel geen bruikleen_ID opslaan maar wel een veld opnemen die de status bij houdt?
Als je dit soort wedervragen gaat stellen, heb je vermoedelijk nog nooit van normaliseren gehoord. Een aanname van mij die onderschreven wordt als ik naar je tabellenstructuur kijk. Over je plaatjes: ik zou ze alle vier dolgraag inruilen voor één plaatje van je Relaties, want daar moet een behoorlijk probleem liggen.
Pak een willekeurige uitleen database er bij, en je zult zien dat je de tabel MoPo aan de tabel Bruikleen koppelt op basis van een één-op-veel relatie van het veld UnID. Opzet hiervan: één artikel kan meerdere keren uitgeleend worden. Dat doe je door de (unieke) UnID van MoPo in de tabel Bruikleen vaker te kunnen invoeren, waarbij elk record dan een uniek BruikleenID krijgt. In jouw geval heb je één record voor een radio, en dus ook maar één mogelijkheid om een BruikleenID vast te leggen. Na de uitleen wordt de waarde gewist of vervangen door een volgende BruikleenID, en dan weet je dus nooit meer welke bruiklenen er zijn geweest. Je hebt alleen maar een overzicht van de laatste status. Lijkt mij een uiterst onwenselijke situatie...
 
Nee, had ik idd nog nooit van gehoord :-)

Ik snap wat je bedoelt... Zal me er eens over buigen om het op die manier aan de gang te krijgen.
Geen history was idd een groot nadeel.

Relaties had ik niet, behalve in een query en dan lag hij tussen het ID en het Bruikleen-ID veld.

Gr. Marcel
 
Kijk vooral de Access cursus er eens op na (in de Handleidingen sectie) waarin ik begin met het opzetten van een database, en normaliseren. In een slecht opgezette database (en die van jou is dat nu eenmaal) loop je vroeg op laat tegen de grootst mogelijke problemen op. In jouw geval: vroeg ;)
De logische stap is: eerst goed uitwerken wat de database moet kunnen (goed ontwerp maken dus), dan tabellen maken, relaties leggen, en dan pas formulieren. Jij bent in mijn ogen véél te vroeg met je formulieren begonnen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan