Avatar billede brunhoj Nybegynder
31. juli 2004 - 15:37 Der er 23 kommentarer og
1 løsning

Begræns cbo rækkekilde i fortløbende form

Kære eksperter

Mit problem er flg: I en fortløbende subform indeholdende en kombobox skal dennes rækkekilde afgrænse på, om værdien allerede er valgt i box'en "ovenfor" eller ej. Mao. det skal ikke være muligt at vælge den samme værdi (fx et PersonID) flere gange i subformen.

På forhånd tak
Avatar billede jensen363 Forsker
31. juli 2004 - 17:11 #1
Rækkekilden i din kombinationsboks for Subform skal se nogenlunde således ud :

  SELECT [Tabel].[Value]
  FROM Tabel
  WHERE ((([Tabel].[Value])<>Formularer!Form1!Kombinationsboks4));
Avatar billede jensen363 Forsker
31. juli 2004 - 17:14 #2
I ovennævnte eksempel er der 2 Formularer :

  Form1
  SubForm1

Begge kombinationsbokse ( i Form1 og SubForm1 ) får sine værdier fra Tabel
Avatar billede brunhoj Nybegynder
31. juli 2004 - 17:53 #3
Komboboksen i subformen skal ikke afgrænse på en værdi fra en komboboks i hovedformularen, men på (selvsamme) komboboks i subformen, der er fortløbende. Formålet er, at der ikke må indtastes dublerede værdier.
Avatar billede jensen363 Forsker
31. juli 2004 - 17:53 #4
SELECT [Tabel].[Value]
  FROM Tabel
  WHERE ((([Tabel].[Value])<>Kombinationsboks4));
Avatar billede jensen363 Forsker
31. juli 2004 - 18:04 #5
Dvs. i samme formular .... nogenlunde således :

Kombinationsboks2 =

SELECT Tabel.Value
FROM Tabel
WHERE (((Tabel.Value)<>[Formularer]![Form]![Kombinationsboks1]));

Kombilationsboks3 =

SELECT Tabel.Value
FROM Tabel
WHERE (((Tabel.Value)<>[Formularer]![Form]![Kombinationsboks1] And (Tabel.Value)<>[Formularer]![Form]![Kombinationsboks2]));
Avatar billede brunhoj Nybegynder
31. juli 2004 - 18:08 #6
Med denne rækkekilde returneres ingen værdier - uanset om jeg i WHERE udtrykket medtager <>Forms!frmNavn!cboNavn eller blot <>cboNavn
Avatar billede jensen363 Forsker
31. juli 2004 - 18:15 #7
Og du har valgt ( aktivt ) cboNavn først ?
Avatar billede brunhoj Nybegynder
31. juli 2004 - 18:21 #8
Mit svar skrev jeg inden jeg så din 18:04-besked ;o). Men jeg skal kun anvende én komboboks i min form. Ikke 2. Er det muligt.
Avatar billede jensen363 Forsker
31. juli 2004 - 18:24 #9
Det er vist ikke muligt ...
Avatar billede brunhoj Nybegynder
31. juli 2004 - 18:33 #10
Så, hvis man fx i en frmMain angiver oplysninger om et projekt i og i frmSub vil tildele personer til projektet, og ikke vil give bruger mulighed for at vælge samme PersonID to gange fra en komboboks, så kan det ikke lade sig gøre via afgrænsning i komboboks rækkekilde? Ejheller med VBA?
Avatar billede jensen363 Forsker
31. juli 2004 - 18:35 #11
Du har vel kun eksempelvis PersonID een gang i Komboboksen ?
Avatar billede jensen363 Forsker
31. juli 2004 - 18:38 #12
Jeg må stoppe for i dag ... håber du finder en løsning ...
Avatar billede mugs Novice
31. juli 2004 - 19:36 #13
"det skal ikke være muligt at vælge den samme værdi (fx et PersonID) flere gange i subformen."

I Så fald kan du bruge funktionen DCount. I combo'ens BeforeUpdate kan du indsætte flg.:

Dim a As Byte
a = Me.Personid
If DCount("*", "Tabel1", "[Personid] =" & a) > 0 Then
MsgBox "Der er allerede poster med denne værdi."
Me.Undo
End If

Tabelnavnet kan du blot udskifte med det aktuelle navn på tabellen eller forespørgslen
Avatar billede brunhoj Nybegynder
02. august 2004 - 19:17 #14
Udmærket med DCount. Dog får jeg ikke mulighed for at indtaste den første post i komboboksen, da udtrykket er > 0. Hvilket kriterium skal jeg anvende ved indtastning af den første post i formen?
Avatar billede mugs Novice
02. august 2004 - 19:42 #15
Du skriver i dit spørgsmål:

"det skal ikke være muligt at vælge den samme værdi (fx et PersonID) flere gange i subformen."


Og videre i din sidste kommentar:

"da udtrykket er > 0"

Så er det jo fordi posten eksisterer i forvejen.
Avatar billede brunhoj Nybegynder
02. august 2004 - 19:51 #16
Men selv med 0 poster i postkilden (ved første indtastning) - afspilles flg i BeforeUpdate():
MsgBox "Der er allerede poster med denne værdi."
Me.Undo
Avatar billede mugs Novice
02. august 2004 - 19:55 #17
Må jeg se din kode.
Avatar billede brunhoj Nybegynder
02. august 2004 - 19:58 #18
Private Sub cboValue_BeforeUpdate(Cancel As Integer)

Dim a As Integer

a = Me.cboValue
If DCount("*", "TabRus", "[RusID] =" & a) > 0 Then
MsgBox "Der er allerede poster med denne værdi."
Me.Undo
End If

End Sub

- TabRus og RusID er rækkekilde til cboValue
Avatar billede mugs Novice
02. august 2004 - 20:02 #19
Koden ser korrekt ud.

Du skriver, at der er tale om en underformular. Er du sikker på, at du ikke forsøger at oprette posten i en tabel der fungerer som postkilde til den formular, der er parent til underformularen.
Avatar billede brunhoj Nybegynder
02. august 2004 - 20:14 #20
I mit eksempel, hvor jeg har testet DCount, er komboboksen i en form, der ikke er en subform til en main (senere er det dog meningen, at koden skal bruges i en komboboks i en subform). Er problemet ikke, at a ikke har nogen værdi på det tidspunkt, hvor koden afspilles, så kriteriet bortfalder?
Avatar billede mugs Novice
02. august 2004 - 20:17 #21
Prøv at oprette en post direkte i tabellen. Afprøv herefter koden i formularen.
Avatar billede brunhoj Nybegynder
02. august 2004 - 20:24 #22
Uanset hvilken værdi jeg vælger på kombobosken får jeg:
MsgBox "Der er allerede poster med denne værdi."
Me.Undo
- også med eksempeldata indtastet i tabellen
Avatar billede mugs Novice
02. august 2004 - 20:27 #23
Kan du sende din db til:

mugs(a)mail.dk

som en zip fil
Avatar billede mugs Novice
02. august 2004 - 21:02 #24
Db er modtaget.

Combo'en slår op i en tabel med et autonummereringsfelt, d.v.s at når der vælges en værdi eksisterer denne i forvejen. Samtidig er combo'ens egenskab 2BegrænsTilListe" sat til ja, så der er ikke mulighed for at vælge andre værdier end dem, der eksisterer i forvejen. derfor vil koden træde i kraft.

Koden er korrekt, men db er forkert skruet sammen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester