slechts 1 record mag een 1 bevatten

Status
Niet open voor verdere reacties.

manueld

Gebruiker
Lid geworden
12 feb 2012
Berichten
216
ik heb een tabel met gegevens. ik wil adhv een veld aangeven welke recor de aktieve is. dit betekend dat alle records een 0 moeten bevatten en er altijd maar 1 een 1. hoe kan ik dit in MSSQL regelen evt met behulp van VBA aangezien ik het record alleen via Acces zal aanpassen vanaf hetzelfde werkstation
 
Misschien is dit topic beter het access forum?

Maar je vraagstelling is ook niet helemaal duidelijk. is het puur een visuale aanpassing van je dataset op het scherm, of wil je ook werkelijk een kolom met actief? En zo ja, hoe moet dat dan helpen bij de verdere bewerking van de data?
 
wat ik wil is dat zodra de kolom voor de 2e keer gevuld wordt met een 1 hij dat niet accepteerd. dit kan op diverse nivo's geregeld worden. dat kan in vba maar volgensmij kan het ook dieper en dus in sql. vandaar mijn vraag hier. als het niet op sql nivo kan zal het via vba moeten.
 
Als het sequentiele updates zijn kun je met een "MAX" statement of iets dergelijks werken? Over het algemeen zijn er betere oplossingen in inderdaad de front-end dan je data in de database "Vervuilen". Dus dan kun je vaak beter voor een macro gaan.
 
dan moet ik het idd in vba gaan zoeken. kan een moderator dit topic verplaatsten naar het vba forum? anders moet ik hem opnieuw aanmaken
 
Verplaatst naar VBA :)
 
Waarom een getalveld? Je kunt volgens mij ook een Ja/Nee veld gebruiken. En als antwoord krijg je dan, er vanuit gaande dat je de check op een formulier doet: ik zou bij de gebeurtenins <Bij aanwijzen> van je formulier een query laten draaien die het aantal velden telt dat TRUE is.
1. Is dat 1 (er is dus een record waar het selectievakje actief is), en is de waarde van het actuele record FALSE, dan zet je het selectievakje uit (Enabled=False)
2. Is dat nog steeds 1 en zit je in het betreffende record, dan neem ik aan dat je het selectievakje moet kunnen gebruiken om de selectie op te heffen. Je kunt dat selectievakje dan uitvinken of niet.
3. Is de telling 0, dan is er niks geselecteerd en staat het selectievakje aan (Enabled=True). Dit geldt dan voor alle records.
4. Klik je, bij telling 0, in een record op het selectievakje, dan gaat de telling naar 1 als je gaat bladeren, en treedt optie 1 weer in werking.
 
het gaat hier om een transact sql database en die kent geen boolean. daarvoor moet je een integer veld gebruiken. vervolgens kun je hem in access/vba als boolean declareren.

overigens zou het mooiste zijn dat als je een record met een 1 vuld (en dus actief maakt) dat hij automatisch de oude op 0(inactief) zet
 
zit nu zelf te denken dat dit idd heel makkelijk kan. als ik het formulier waarin ik d records kan bewerken een "maak aktief" knop maak kan ik daar een query achter hangen die alle records op "0"zet en vervolgens de huidge record op 1 zet. dan hoef ik geen check te doen omdat ik hem toch reset.
 
Kan ook met een getalveld natuurlijk. Alleen moet je dan niet filteren op TRUE en FALSE, maar op dat specifieke getal. En je hebt minder controle over wat er wordt ingevoerd. Een positief getal (1) kan nooit een Boolean zijn in Access, want die gebruikt -1 en 0 als getallen. Maar je kunt van 1 uiteraard wel simpel een -1 maken bij het bladeren, en dan heb je alsnog een boolean. Mij lijkt dat een betere oplossing, omdat je dus van de mogelijkheid van een aangepast getal af bent. Wat je wilt.
Als je elk veld wilt kunnen gebruiken om te switchen, moet je met een aparte update query werken. In eerste instantie moet je dan het ID veld van het oorspronkelijke waardeveld opzoeken, daarna zet je de waarde van het actieve record om, en daarna voer je een update query uit die op basis van het opgehaalde ID het veld de waarde 0 geeft.
 
jou oplossing is netter maar de mijne werkt ook. het eindresultaat moet zijn dat er slechts een record een 1 bevat. ik hoef dan ook niet te zoeken naar het record dat de 1 bevat. ik kan simpel alle records op 0 zetten omdat er als het goed is maar 1 op 1 staat. als er door omstandigheden toch 2 op 1 staan zal mijn methode dat corrigeren door eerst alles op 0 te zetten. vervolgens het huidige record op 1 dan ben ik klaar.

(overigens heeft access geen probleem met een positief getal als boolean maar schijft zelf een negatief getal)
 
Ik weet niet of jouw methode of mijn methode sneller is als het om een hele grote database gaat. Maar dat kun je zelf wel beoordelen :).
 
het gaat in dit geval om een grote database maar deze tabel is klein. het gaat om een settings tabel. ik wil makkelijk kunnen kiezen tussen settings en dit op een soort profiel maken. het systeem zal dan uit de tabel settings halen uit het aktieve reccord. op deze manier kun je snel en makkelijk je settings veranderen en profielen aanmaken. het aktieve profiel wordt gemarkeerd met een 1 (of -1)

aangezien er hooguit 10 profielen zullen worden aangemaakt en het gaat om max 20 settings is het een kleine tabel en is mijn oplossing een goede. als het gaat om een grote tabel is je oplossing zeker het overwegen waard. ik heb mijn oplossing. bedankt allemaal
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan