Tout d'abord, ne pas incorporer SQL dans VBA: difficile à maintenir , Injection SQL, etc. Utilisez un proc stocké du côté de la base de données (même Access a PROCEDURE
s).
Deuxièmement, utilisez COALESCE
(ou une logique équivalente) pour gérer votre «chaîne vide» correspond à la logique d'interface utilisateur NULL
'. Vous ne dites pas quelle syntaxe SQL et vous n'avez pas posté de DLL de schéma, donc nous ne faisons que deviner ...
SQL Server:
CREATE PROCEDURE GetTotals
@SimulationID INTEGER,
@Test1 VARCHAR(20) = NULL
AS
SELECT *
FROM Total AS T1.
WHERE T1.SimulationID = @SimulationID
AND COALESCE(T1.Test1, '') = COALESCE(@Test1, '');
Accès au moteur de base de données (Jet):
CREATE PROCEDURE GetTotals
(
:SimulationID INTEGER,
:Test1 VARCHAR(20) = NULL
)
AS
SELECT *
FROM Total AS T1
WHERE T1.SimulationID = :SimulationID
AND IIF(T1.Test1 IS NULL, '', T1.Test1)
= IIF(:Test1 IS NULL, '', :Test1);
Ensuite, exécutez le proc en utilisant votre middleware (ADO, DAO, etc.) avec des objets de paramètres, en utilisant le vide chaîne (ou autre valeur 'magique') pour NULL
.
Oui, mais il y a en fait 3 'Exemples' différents Il y a donc 3 and, un pour les exemples 1, un pour l'exemple 2 et un pour l'exemple3. J'ai essayé de simplifier le code pour vous les gars. – Daniel
Un simple si Example1 = 'est nul' ne fonctionnera pas. Ou je devrais faire 6 déclarations si, ce qui est clairement une mauvaise idée. Il doit être intégré dans le code. – Daniel
-1 SQL dynamique est le mal. – onedaywhen