Toon posts:

[ACCESS] updaten veld met van recourdsource met innerjoin

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb twee tabellen tbv een gebruikerssysteempje: (cursief is sleutel)

Gebruikersgroepsfuncties:
GebruikersgroepID (text)
Functienaam (text)
Toegestaan (true/false)

Functies:
Functienaam (text)
Omschrijving (text)

Er is in de app een relatie aanwezig tussen Gebruikergroepsfuncties.Functienaam en Functies.Functienaam. Hierbij is geen referentiele integriteit afgedwongen omdat er records in de tabel functies aanwezig kunnen zijn die niet voorkomen in de tabel gebruikersgroepsfuncties.

Nu wil ik voor de gebruikersgroepen aangeven of ze gebruik kunnen maken van een bepaalde functie. als eerste voeg ik alle mogelijk combinaties van Gebruikersgroepen en functies toe (er is ook een tabel met gebruikersgroepen), en daarna kan door het veld toegestaan op true of false te zetten aangegeven worden of een gebruikersgroep gebruik mag maken van deze functie. Tenslotte wis ik alle records waar toegestaan false is, en hou ik de records over met de toegestane combinaties!

Alles werkt, behalve dat ik in het formulier ook de omschrijving wil tonen van de functie. De recourdsource van de form wordt dan als volgt:

code:
1
2
3
4
5
SELECT Gebruikersgroep_Functies.GebruikersgroepID, 
gebruikersgroep_Functies.Functienaam, Functies.Omschrijving, 
Gebruikersgroep_Functies.Toegestaan
FROM Gebruikersgroep_Functies INNER JOIN Functies ON 
Gebruikersgroep_Functies.Functienaam = Functies.Functienaam;


Maar hiermee is de recordset niet meer updatable...... Ik heb al geprobeert om een subquiry in de recourdscource te zetten, of geen relatie aan te leggen, en een extra criteria "Gebruikersgroep_functies.Functienaam=Functies.Functienaam", maar dit mocht niet baten..... :( Wie heeft een mogelijk oplossing??? :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Je gegevens updaten dmv een UPDATE query. (Vind ik trouwens altijd veel duidelijker en mooier dan gebruik te maken van eeen updateable recordset)

https://fgheysels.github.io/


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Whoami, je gebruikt niet Access om vervolgens overal zelf je code voor te gaan maken he :)

Skyper, wat je kan proberen is op andere velden te gaan koppelen en je indexen goed te zetten. Maak in de tabel Functies een veld FunctieID aan van het type autonummering. Zorg er ook voor dat dit de primaire index is.
In de tabel Gebruikergroep_Functies maak je van het veld Functienaam ook FunctieID, type numeriek, integer.
Maak hier de koppeling op, en je hebt een redelijke kans dat het zal werken.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Boss schreef op 13 June 2003 @ 09:47:

Skyper, wat je kan proberen is op andere velden te gaan koppelen en je indexen goed te zetten. Maak in de tabel Functies een veld FunctieID aan van het type autonummering. Zorg er ook voor dat dit de primaire index is.
In de tabel Gebruikergroep_Functies maak je van het veld Functienaam ook FunctieID, type numeriek, integer.
Maak hier de koppeling op, en je hebt een redelijke kans dat het zal werken.
Je hebt wel gelijk ivm die indexen. 'k Had nog niet gezien hoe de TS zijn relaties legde.

Echter, ik denk dat een recordset die gegevens bevat van 2 of meer tabellen niet update-able is.

https://fgheysels.github.io/


Verwijderd

Verwijderd schreef op 13 June 2003 @ 08:38:
Er is in de app een relatie aanwezig tussen Gebruikergroepsfuncties.Functienaam en Functies.Functienaam. Hierbij is geen referentiele integriteit afgedwongen omdat er records in de tabel functies aanwezig kunnen zijn die niet voorkomen in de tabel gebruikersgroepsfuncties.
(...)
code:
1
2
3
4
5
SELECT Gebruikersgroep_Functies.GebruikersgroepID, 
gebruikersgroep_Functies.Functienaam, Functies.Omschrijving, 
Gebruikersgroep_Functies.Toegestaan
FROM Gebruikersgroep_Functies INNER JOIN Functies ON 
Gebruikersgroep_Functies.Functienaam = Functies.Functienaam;
Moet je dan niet een LEFT of RIGHT JOIN gebruiken? Dit kan je trouwens ook al als eigenschap van je relatie opgeven.

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Een left of een right join is een OUTER join. Als je dat niet nodig hebt, moet je het ook niet gaan gebruiken.

https://fgheysels.github.io/


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 23:10
Soms werkt het door je inner join te vervangen door een outer join, echter access heeft ook het recordset-type Dynaset (Inconsistent Updates). Door die in te schakelen (kan iig bij properties van formulier) is het vaak mogelijk om gegevens in een query met inner join bij te werken, maar let er wel op dat je gebruiker weet wat ie doet en dat je niet teveel velden laat zien (Id velden iig weglaten).

Iets anders. Je kunt ook alleen de tabel Gebruikersgroepsfuncties laten zien en in de eigenschappen bij het veld Functienaam aangeven dat ie deze moet opzoeken (combobox) in de tabel functies, waarbij die gebonden is aan kolom 1 en hij 2 kolommen weergeeft, waarvan de eerste 0cm breed is

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Het moet wel kunnen, ik heb zelf een aantal DB's gemaakt die dit doen, die maken gebruik van een INNER JOIN.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
:P :9 _/-\o_ Zozo, ik ben even weggeweest en er zijn veel reacties gekomen. Ik lees het pas net, dus ik ga nu eea snel proberen!

Een combinatie van de gegeven tips lijkt me een goede oplossing, maar ik past het resultaat zodra het gelukt is :)

Verwijderd

Topicstarter
nescafe schreef op 13 juni 2003 @ 11:04:
............ echter access heeft ook het recordset-type Dynaset (Inconsistent Updates). Door die in te schakelen (kan iig bij properties van formulier) is het vaak mogelijk om gegevens in een query met inner join bij te werken, maar let er wel op dat je gebruiker weet wat ie doet en dat je niet teveel velden laat zien (Id velden iig weglaten)..........
Dat is wel heel erg makkelijk! Bedankt! het werkt naar behoren :)
Pagina: 1