Probleem met het toepassen van funktie "Select" in Query

Status
Niet open voor verdere reacties.

Vuurbok

Gebruiker
Lid geworden
20 feb 2010
Berichten
65
Hoi mensen,

Misschien kunnen jullie me helpen met mijn probleem. Ik heb een checkbox “chk_Patient_The_Color_Purple_Has_Been_Missed” en een tabel “tbl_Patients_Colors” met daarin een kolom “Colors” (Yellow, Blue, Grey, Red, Purple) aangemaakt. Met de onderstaande code als criterium probeer ik een query aan te maken die ervoor zorgt dat als die bovengenoemde checkbox aangevinkt staat, er geen kleur “Purple” te zien is in een keuzelijst. En als die checkbox uit staat, moeten alle kleuren te zien zijn, tenzij die al gekozen zijn. Maar de code werkt niet. Weten jullie misschien wat een knelpunt is? :confused:

Code:
IIf([Forms]![frm_D_MRD]![fsub_Patients].[Form]![chk_Patient_The_Color_Purple_Has_Been_Missed]=Waar;Not In (SELECT [Colors] FROM [tbl_Patients_Colors] [I][B]AND “Purple”[/B] [/I]WHERE [Patient_Number]=Forms![frm_D_MRD]![fsub_Patients].Form![Patient_Number]); Not In (SELECT [Colors] FROM [tbl_Patients_Colors] WHERE [Patient_Number]=Forms![frm_D_MRD]![fsub_Patients].Form![Patient_Number]))
 
Laatst bewerkt:
Je hebt een beetje ongelukkige formule gemaakt; ik neem aan dat het een criterium is? En dat je records wilt uitsluiten (Not In)? Dan moet je in ieder geval beginnen met Not In:
Code:
Not In(
     IIf([Forms]![frm_D_MRD]![fsub_Patients].[Form]![chk_Patient_The_Color_Purple_Has_Been_Missed]=Waar;
    (SELECT [Colors] FROM [tbl_Patients_Colors] AND "Purple" WHERE [Patient_Number]=Forms![frm_D_MRD]![fsub_Patients].Form![Patient_Number]);
    (SELECT [Colors] FROM [tbl_Patients_Colors] WHERE [Patient_Number]=Forms![frm_D_MRD]![fsub_Patients].Form![Patient_Number]))
)
 
Hoi OctaFish,

Ja, inderdaad is die code bedoeld als criterium. Ik heb je code uitgeprobeerd, maar helaas zonder resultaat. De query blijft aangeven dat er een 'syntax error in query expression' is. De onderstaande en aangepaste code werk ook niet:

Code:
Not In(IIf(Forms![frm_D_MRD]![fsub_Patients].Form![chk_Patient_The_Color_Purple_Has_Been_Missed]=Waar;(SELECT [Colors] FROM [tbl_Patients_Colors] AND "Purple" WHERE [Patient_Number]=Forms![frm_D_MRD]![fsub_Patients].Form![Patient_Number]);(SELECT [Colors] FROM [tbl_Patients_Colors] WHERE [Patient_Number]=Forms![frm_D_MRD]![fsub_Patients].Form![Patient_Number])))

Weet je misschien hoe het komt?
 
Dan heb ik een voorbeeldje nodig :)
 
Hoi OctaFish,

Zie hierbij de update! Ik heb mijn database nogal opgeschoond van gevoelige informatie, vandaar dat het een beetje raar uitziet.

Bekijk bijlage db1.rar
 
Hoi OctaFish of andere mensen,

Ik zit nu al dicht bij de oplossing, alleen het probleem is dat ik niet weet hoe ik een woord "De Novo" erbij kan zetten aan deze onderstaande code als IIF-funktie waar is. Als ik op deze manier doe, werkt de onderstaande code niet. Weten jullie misschien wat ik fout doe?

Code:
SELECT tbl_DN_Or_FU.DN_Or_FU
FROM tbl_DN_Or_FU
WHERE (((tbl_DN_Or_FU.DN_Or_FU) Not In (IIf(Forms![frm_Add_Or_Mutate_Patients_MRD]![chk_Patient_De_Novo_Has_Been_Missed]
=True,(SELECT [MRD_DN_Or_FU] FROM [tbl_Patients_Materials] [COLOR="#FF0000"]AND "De Novo" [/COLOR]WHERE [Patient_VUmc_MRD_Number]=Forms![frm_Add_Or_Mutilate_Patients]![Patient_VUmc_MRD_Number]),(SELECT [MRD_DN_Or_FU] FROM [tbl_Patients_Materials] WHERE [Patient_VUmc_MRD_Number]=Forms![frm_Add_Or_Mutilate_Patients]![Patient_VUmc_MRD_Number])))));

:D :D :D :D
 
Laatst bewerkt:
Ik snap niet helemaal hoe je dicht bij de oplossing kan zitten, want volgens mij zit je op een doodlopende weg. De meest simpele, en daarom meest bruikbare oplossing is natuurlijk om een extra Boolean veld aan je tabel [tbl_Patients_Colors] toe te voegen. Dat heb ik gedaan, en ik heb 'm de naam [Standaard] meegegeven. In die tabel vink je alle velden aan die tot het standaard palet behoren, behalve dus Paars.
Nu maak je een gebeurtenis <Bij klikken> op het formulier frm_Patient die de keuzelijst aanpast a.d.h.v. de waarde van het selectievakje [chk_Patient_The_Color_Purple_Has_Been_Missed] dat je aanklikt.

Code:
Private Sub chk_Patient_The_Color_Purple_Has_Been_Missed_Click()
Dim strSQL As String
If Me.chk_Patient_The_Color_Purple_Has_Been_Missed Then
    strSQL = "SELECT Color, Standaard FROM tbl_Patients_Colors " _
    & "WHERE (Standaard = True) " _
    & "ORDER BY Color;"
Else
    strSQL = "SELECT Color, Standaard FROM tbl_Patients_Colors " _
    & "ORDER BY Color;"
End If

With Forms!frm_Color!fsub_Patients!fsub_Patients_Materials_New.Form!cbo_Color
    .RowSource = strSQL
    .Requery
End With

End Sub
Waarom je overigens een niet-gekoppeld hoofdformulier gebruikt waar je vervolgens een subformulier met daar weer twee subformulieren in gebruikt, is mij een raadsel. Misschien omdat je het anders te makkelijk vind worden ;) Nu is het verwijzen naar de keuzelijst <cbo_Color> extreem ingewikkeld.
 
Hoi OctaFish!

Ik sta nu wel met mijn mond vol met tanden met als reden dat ik dacht dat ik dicht bij de oplossing zat, terwijl je code de BESTE/SIMPELSTE oplossing biedt voor mijn probleem! Ik heb het daarnet toegepast en het werkt uitstekend. Hartelijk bedankt voor je moeite! Weer wat van geleerd, want deze code heb ik niet eerder toegepast. :D :D :D :D

P.S. Ik had al ervoor gewaarschuwd dat die database raar uitziet, doordat het nogal uitgekleed en ontdaan was van alle gevoelige informatie. Dat niet-gekoppelde hoofdformulier wordt gebruikt als lay-out met van die titel en afbeeldingen en daarin zit er een subformulier en al. :D
 
En toch: als het niet-gebonden formulier niks doet: verwijderen! Scheelt een hele hoop ellende, want tussen één hoofdformulier en een of meerdere subformulieren is het veel makkelijker schakelen in je code. En met de Koptekst in het hoofdformulier kun je ook nog een hoop doen! Dynamisch bijwerken, bijvoorbeeld :)
 
Daar ben ik met je eens, alleen het probleem is dat dat ongebonden hoofdformulier nodig is voor tabbesturingselementen waarin de verschillende subformulieren aanwezig zijn. Vandaar dat dat hoofdformulier opgefraaid is én toch nog een funktie heeft. :)
 
... alleen het probleem is dat dat ongebonden hoofdformulier nodig is voor tabbesturingselementen waarin de verschillende subformulieren aanwezig zijn.
Da's nieuw voor mij....
 
Hoi OctaFish,

Sorry dat ik je nog effe moet lastigvallen met mijn vraag. Als ik die check box uit of aanzet, heeft dat alleen een invloed op "Purple". Maar is het mogelijk om in je code verder uit te breiden met een funktie Not In(Select...) om ervoor te zorgen dat de reeds gekozen kleuren ook verdwijnen in een keuzelijst? Er zit ook qry_Color en die ziet wel welke kleuren er al gekozen zijn, maar die wordt opzij gezet door je code. :D

Bekijk bijlage db1.rar
 
Laatst bewerkt:
Hoi OctaFish,

Na rondsnuffelen op het internet ben ik uitgekomen met het oplossen van mijn tweede probleem. Zie hieronder! :D

Code:
Private Sub chk_Patient_The_Color_Purple_Has_Been_Missed_Click()
Dim strSQL As String
If Me.chk_Patient_The_Color_Purple_Has_Been_Missed Then
    strSQL = "SELECT Color FROM tbl_Patients_Colors " _
    & "WHERE (Color<>'Purple') " _
    & "AND (tbl_Patients_Colors.Color) Not In (SELECT [Color] FROM [tbl_Patients_Materials] WHERE [Patient_Number]=Forms![frm_Color]![fsub_Patients].Form![txt_Patient_Number])" _
    & "ORDER BY Color;"
Else
    strSQL = "SELECT Color FROM tbl_Patients_Colors " _
    & "WHERE (tbl_Patients_Colors.Color) Not In (SELECT [Color] FROM [tbl_Patients_Materials] WHERE [Patient_Number]=Forms![frm_Color]![fsub_Patients].Form![txt_Patient_Number])" _
    & "ORDER BY Color;"
End If

With Forms!frm_Color!fsub_Patients!fsub_Patients_Materials_New.Form!cbo_Color
    .RowSource = strSQL
    .Requery
End With
End Sub
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan