2009-10-22 7 views
0

Je dois être capable de lire une zone de liste déroulante pour déterminer la colonne à utiliser pour une clause where. exemple simple serait SELECT * FROM TABLE OÙ [Formulaires]! [FrmNameWhatever]! [ComboTime] ENTRE [bla]! [Bla]! [Bla] ET [bla]! [Bla]! [Bla]Requête MS ACCESS à l'aide du formulaire pour construire la clause WHERE

bla bla bla fonctionne ... La première partie, juste après la où, renvoie zéro lignes ... Est-ce que j'utilise la mauvaise syntaxe? J'ai aussi essayé cette zone de texte et elle renvoie toujours zéro rangs ... Désolé quelqu'un pourrait avoir à réécrire cela mais je suis fatigué .. c'est la fin de la journée

Merci pour toute aide ^^

+0

Qu'est-ce que bla bla bla représente? Ces contrôles sont-ils plus nombreux sur votre formulaire? –

+0

Oui, je vais modifier cela. Cependant, le blah! Blah! Blah était la partie qui a fonctionné, juste après le mot clé WHERE, qui doit être "dynamique". Je veux savoir si son possible dans l'accès, pour changer cela pour être quelque chose qui dépend de ce qui est sélectionné dans une zone de liste déroulante – Marlon

Répondre

1

Essayez de placer des signes dièse autour de vos valeurs BETWEEN.

BETWEEN #8:00 AM# and #12:00 PM# 

Pour créer une chaîne SQL dynamique:

strSQL = _ 
    "Select myColumns FROM myTable WHERE " & Me.myComboBox & " BETWEEN #" & _ 
    Me.MyFirstTextBoxDate & "# AND #" & Me.MySecondTextBoxDate & "#" 
+0

les valeurs entre fonctionnent parfaitement. mais, juste après le mot clé WHERE, doit être "dynamique". Je veux savoir si c'est possible En Access, pour changer cela pour être quelque chose qui dépend de ce qui est sélectionné dans une zone de liste déroulante – Marlon

+0

@marloncopeland, voir ma réponse éditée. –

+0

Je vais essayer, mais j'ai l'impression que vous interprétez mal mon problème. Dans votre exemple, j'ai besoin de "myDateColumn" pour provenir d'une valeur dans une zone de liste déroulante, la valeur dans la zone de liste déroulante indiquera une colonne dans la table. donc, WHERE [comboxboxvalue] BETWEEN [textboxdate] ET [textboxdate] – Marlon

0

Il ne peut être une bonne idée de coder en dur vos noms de contrôle de formulaire dans votre code SQL. Considérons un PROCEDURE avec des paramètres fortement typés, par ex. ANSI-92 Query Mode syntaxe:

CREATE PROCEDURE GetOrdersByPeriod 
(
:start_date DATETIME, 
:end_date DATETIME 
) 
AS 
SELECT OrderID, CustomerID, OrderDate 
    FROM Orders 
WHERE OrderDate BETWEEN :start_date AND :end_date; 

alors vous EXECUTE ce proc en passant dans les valeurs de vos commandes en tant que paramètres.

+0

mon problème est le "article" (dans notre exemple ce serait OrderDate) juste après le mot-clé WHERE, doit être "dynamique". Je veux savoir si cela est possible dans Access, pour changer cela pour être quelque chose qui dépend de ce qui est sélectionné dans une combo – Marlon

+0

Donc avoir plusieurs procs - GetOrderByOrderDate, GetOrderByRequiredDate, GetOrderByShippedDate, etc - puis utiliser la valeur de votre combobox pour ' dynamiquement 'choisissez le proc requis. – onedaywhen

1

Vous pouvez concaténer une instruction SQL et l'exécuter avec RunSQL comme ceci:!

DoCmd.RunSQL("(SELECT * FROM TABLE WHERE " & Forms("frmNameWhatever").ComboTime.Value & " BETWEEN [blah]![blah]![blah] AND [blah]![blah]![blah]);") 
Questions connexes