[Access 2000 - VBA] Subformulieren verversen

Pagina: 1
Acties:
  • 1.416 views sinds 30-01-2008
  • Reageer

  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
Ik heb in Microsoft Access 2000 een Formulier gemaakt met als taak het koppelen van gebruikers aan computers.
Dit formulier bevat twee subformulieren die elk hun waarden uit een gefilterde query halen.
In het hoofdformulier wordt uit een van de subformulieren in een lijst geselecteerd welke gebruiker men wil koppelen aan een computer en in de andere kan men de computer selecteren. Door middel van een koppelknop worden de waarden weggeschreven naar tabellen.
Afbeeldingslocatie: http://home.planet.nl/~kuik0191/pictures/accessformulier.jpg
Het probleem is alleen dat wanneer ik eerst de user aanklik en hierna de bijbehorende computer, alleen de computerlijst wordt ververst. (de net gekoppelde computer wordt verwijdert van de 'niet gekoppelde computer" - lijst)
Als ik eerst de computer selecteer en hierna de user, wordt alleen de userlijst ververst.
Het d.m.v. VB sluiten en weer openen van het formulier werkt niet. Handmatig werkt het wel.
Kan iemand me hiermee helpen? Ik heb nl niets hierover kunnen vinden.

Dell XPS 13 9343


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Misschien dat je met Requery je subform kan verversen?

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
ATS schreef op 23 maart 2004 @ 13:39:
Misschien dat je met Requery je subform kan verversen?
Het Requery commando helpt ook niet. Het probleem blijft zich voordoen.
Per Formulier heb ik ook geprobeerd de AfterUpdate en de OnDataChange in te stellen zodat de Formuliergegevens ververst worden. Ook dit had geen effect.

Dell XPS 13 9343


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Een requery op je hoofdformulier ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
farlane schreef op 23 maart 2004 @ 15:28:
Een requery op je hoofdformulier ?
Jammergenoeg werkt dit ook niet.
Ook heb ik geprobeerd de focus tussen de stappen door te verleggen naar de verschillende Formulieren en velden. Dit werkte niet.
Kan ik niet op een of andere manier simuleren dat er (na het verwerken van een van de subformulieren) nog een keer geklikt wordt op het andere subformulier? Het formulier dat geselecteerd is, wordt juist gerefresht.
Zoiets als dit: 'Me!Listbox.Selected(4) = True' werkt ook niet.

Dell XPS 13 9343


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

Weet je zeker dat wat er achter het formulier gebeurt, goed werkt? Anders zitten we hier naar een oplossing voor een niet-bestaand probleem te zoeken. :)
Subformulieren zijn hier trouwens niet voor bedoeld, hoewel je het vast aan de praat kunt krijgen. In dit geval zou ik met Listboxes werken, die zijn hier wél voor gemaakt.
Nog één opmerking:
--unknown-- schreef op 23 maart 2004 @ 13:07:
[...]
Door middel van een koppelknop worden de waarden weggeschreven naar tabellen.
[...]
Tabellen? Eén tabel toch, hoop ik?

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
KingRichard schreef op 23 maart 2004 @ 19:20:
Weet je zeker dat wat er achter het formulier gebeurt, goed werkt? Anders zitten we hier naar een oplossing voor een niet-bestaand probleem te zoeken. :)
Subformulieren zijn hier trouwens niet voor bedoeld, hoewel je het vast aan de praat kunt krijgen. In dit geval zou ik met Listboxes werken, die zijn hier wél voor gemaakt.
Nog één opmerking:
[...]
Tabellen? Eén tabel toch, hoop ik?
Het gaat hier om het combineren van gegevens die in eerste instantie niks met elkaar te maken hebben. We hebben een tabel met gegevens van computers en we hebben een tabel met gegevens van gebruikers. Door middel van de 'koppel-knop' worden de gegevens gelezen uit beide tabellen en geplaatst in een andere tabel. In de tabel met computers staat ook een veld waarin staat welke gebruiker aan de computer gekoppeld is (standaard is dit "geen"). In de gebruikerstabel staat weer welke computer er gekoppeld is aan de user. (standaard ook weer "geen") Dit zijn ook meteen de waarden waar de query op filterd. Er kunnen dus geen gebruikers of computers in het formulier voorkomen die al bezet zijn.
Ik gebruik dus twee subformulieren om toch alle waarden te kunnen weergeven. Als ik rechtstreeks de listboxes weergeef (ipv in de subforms) dan geeft het formulier geen waarden weer omdat hij geen vergelijkbare velden heb kunnen vinden.
Het enige wat de twee subformulieren doen is de listboxes weergeven, en aan de hand van wat er geselecteert is in de listboxes, de waardes opzoeken in de tabel en tegelijkertijd weergeven in de 'invisible' velden van de tabel.
Dit is de achterliggende code van het 'hoofdformulier':

Me![ComputerKoppeling].Value = Form!SubFormComputer! [Computernaam].Value
Me![UserKoppeling].Value = Form!SubFormUser![Username].Value
Form!SubFormComputer![Gebruiker].Value = Me![UserKoppeling].Value
Form!SubFormComputer![In Gebruik].Value = True
Form!SubFormUser![Computer].Value = Me![ComputerKoppeling].Value
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

De 'ComputerKoppeling' en de 'UserKoppeling' zijn velden in het 'hoofdformulier' en de tabel waarin alleen staat welke gebruiker met welke computer is verbonden.

De 'In Gebruik' waarde in het subformulier 'SubFormComputer' houdt in dat een computer aan een gebruiker gekoppelt is of niet.

De laatste regel:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
betekend dat het formulier opnieuw de gegevens gaat laden. Bij deze procedure haalt hij maar een van de twee gegevens binnen van een van de twee subformulieren (afhankelijk van welke de gebruiker eerst heeft geselecteerd).

Dell XPS 13 9343


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

Ik zou dit anders aanpakken:
tblGebruikerstblComputers
IDID
strNaamintUserID
strWerkplekintTypeID
strTelefoonnummerEtc...
Etc...
Zoals je ziet is er maar één koppeling, tblComputer -> intUserID. Het bijhouden van twee dezelfde koppelingen in verschillende tabellen is niet normaal. :+ Anyway, in de tabel Computer staat een veld intUserID. Als je wilt dat een gebruiker maar aan één computer gekoppeld kan worden, zet je de eigenschap index van dat veld op "Yes (no duplicates)".
Dan nu je formulier. Wat ik zou doen:
  • Formulier maken met een listboxes "lstGebruikers", een listbox "lstComputers" en een knop "Koppelen".
  • De query van lstGebruikers selecteert gebruikers die niet in tblComputers voorkomen.
  • De query van lstComputers selecteert Computers waarbij intUserID leeg is.
  • Achter de knop Koppelen zit VBA-code: zoek de geselecteerde Computer, pas het veld intUserID aan, Update, sluit de Recordset en doe voor beide listboxes een .Requery.
[hardlinermodus]
Bovenstaande is in mijn ogen een betere manier om met je data om te gaan. Het probleem uit je startpost is daarmee niet opgelost, sterker nog: ik ben vergelijkbare problemen tegengekomen met listboxes. Ik vermoed dat deze verschijnselen veroorzaakt worden doordat er constant een open Recordset is bij listboxes, subformulieren etc.
Hoe dan ook, wanneer ik een database bouw die iets meer moet doen dan bijvoorbeeld een adressenboek bijhouden, laat ik niets over aan Access. Ik gebruik geen relatie-, formulier- of querywizards en geen formulierfilters. In dit geval zou ik een Form_Load schrijven die zelf de listboxes vult en andere Events die data naar de tabellen schrijven.
[/hardlinermodus]

[ Voor 3% gewijzigd door KingRichard op 24-03-2004 15:40 . Reden: Maakt het uit? Ik bedoel, in een percentage? Ja? Hoeveel dan? ]

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
KingRichard schreef op 24 maart 2004 @ 15:36:
Ik zou dit anders aanpakken... en hierna volgt een heel intelligent antwoord.
[...]
Dit heb ik al geprobeerd.
Het probleem wat zich nu voordoet, is dat ik in de query alle mogelijkheden te zien krijg:

User1 Computer1
User2 Computer1
User3 Computer1
User1 Computer2
User2 Computer2
enz...

Dit is niet echt handig. Waarschijnlijk doe ik dan hier iets fout met de instellingen (en ja ik heb het veld in de tabel op yes, no duplicates gezet). Ik heb alleen geen flauw idee meer waar het dan precies fout gaat.
In iedergeval bedankt voor jouw antwoord, er staan een paar nuttige dingen in voor als je wil beginnen met je database. Ik zit nu al bij het einde van de database. Andere formulieren tabellen en query's heb ik al gemaakt en werken prima. Maar ja, ik ben een simpele amateur die drie weken geleden weer na 3 jaar met Access bezig ging, terwijl het nooit mijn sterkste punt geweest is.
Ik kan (als je dat wil) ook een link posten naar mijn access database zodat je in real life kan kijken of je er iets aan deze amateuristische database kunt doen?

Dell XPS 13 9343


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
--unknown-- schreef op 24 maart 2004 @ 13:29:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
Whoa, wat is er mis met [FormNaam].Requery ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

--unknown-- schreef op 24 maart 2004 @ 16:56:
[...]
Ik kan (als je dat wil) ook een link posten naar mijn access database zodat je in real life kan kijken of je er iets aan deze amateuristische database kunt doen?
Ik wil er best even naar kijken. Je mag de link (of de DB, mits niet belachelijk groot) ook mailen. Zie mijn profiel voor mijn adres.

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
farlane schreef op 24 maart 2004 @ 19:15:
[...]


Whoa, wat is er mis met [FormNaam].Requery ?
Het enige wat hier mis mee is is dat het niet werkt in mijn situatie.
Die regel die je gequote heb, is gewoon een moeilijke manier om het huidige formulier te verversen waardoor hij als het goed is ook de subformulieren ververst die erin aanwezig zijn. Dit is bij mij niet helemaal het geval.

Dell XPS 13 9343


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
Ik heb nu de velden 'Gebruiker' en 'In Gebruik' weggehaald uit de tabel 'TableComputers' en het veld 'Computer' uit de tabel 'TableUsers'.
Het enige waar nu de koppelingen in te zien zijn, is de tabel 'TableKoppelingen'.
Wat ik nu niet voor elkaar krijg is de filtering in de query. De huidige niet werkende filter is als volgt:
Afbeeldingslocatie: http://home.planet.nl/~kuik0191/pictures/filter_access.jpg
Wat doe ik hier nu weer fout?

Dell XPS 13 9343


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Wat je daar wil kan met de o zo mooie EXISTS instructie. Kijk ff in de help hoe die in elkaar zit.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
farlane schreef op 26 maart 2004 @ 11:58:
Wat je daar wil kan met de o zo mooie EXISTS instructie. Kijk ff in de help hoe die in elkaar zit.
Exists Method


Description

Returns True if a specified key exists in the Dictionary object; False if it does not.

Syntax

object.Exists(key)

The Exists method syntax has these parts:

Part Description
object Required. Always the name of a Dictionary object.
key Required. Key value being searched for in the Dictionary object.


En... hoe moet dit mij gaan helpen als ik vragen mag? Please verklaar nader?

Dell XPS 13 9343


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Ik bedoelde eigenlijk de SQL EXISTS instructie :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
KingRichard heeft me uit de brand geholpen met Access. D.m.v. uitleg en tips heeft hij ervoor gezorgd dat ik mijn fouten snap en ook nog meer kennis vergaard heb.

Simpel uitgelegd:
King Richard is a king which is worthy of the throne. I would be more then happy to serve under his command. :P

Dell XPS 13 9343


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Misschien is het voor de nakomelingen ook wel aardig om de oplossing hier ook te posten.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Ventrance
  • Registratie: Mei 2002
  • Laatst online: 13-03-2022
farlane schreef op 30 maart 2004 @ 14:04:
Misschien is het voor de nakomelingen ook wel aardig om de oplossing hier ook te posten.
Bij deze:


De klik op de 'Koppelknop':

Dim rst As Recordset

' Open een tijdelijke recordset
Set rst = CurrentDb.OpenRecordset("TableKoppelingen")

' Voeg een nieuw record toe
rst.AddNew

' Vul de velden van het nieuwe record met de waarden uit het formulier
rst![ComputerKoppeling] = Me.ComputerKoppeling
rst![UserKoppeling] = Me.UserKoppeling

' Schrijf het nieuwe record weg
rst.Update

' Ververs de lijsten op het formulier
Me.ComputerKoppeling.Requery
Me.UserKoppeling.Requery

' Maak het object rst leeg. Dit is niet per sé nodig, maar wel netjes.
'Bespaart een beetje geheugen.
Set rst = Nothing


Het formulier bestaat uit gewone lijsten die naar query's verwijzen i.p.v. subformulieren. Bij deze methode werkt de Requery wel, bij de subformulieren niet.

Dell XPS 13 9343


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

--unknown-- schreef op 30 maart 2004 @ 11:51:
KingRichard heeft me uit de brand geholpen met Access. D.m.v. uitleg en tips heeft hij ervoor gezorgd dat ik mijn fouten snap en ook nog meer kennis vergaard heb.

Simpel uitgelegd:
King Richard is a king which is worthy of the throne. I would be more then happy to serve under his command. :P
Nou ehmmm... Dankjewel! :D But be careful what you wish for...
Shakespeare schreef in 1593:
KING RICHARD: Give me thy hand.
[Here he ascendeth the throne. Sound]
Thus high, by thy advice
And thy assistance, is King Richard seated.
But shall we wear these glories for a day;
Or shall they last, and we rejoice in them?

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]

Pagina: 1