Во-первых, не встраивайте SQL в VBA: сложно поддерживать, SQL-инъекция и т. Д. Используйте сохраненный процесс на стороне базы данных (даже у Access есть PROCEDURE
s).
Во-вторых, используйте COALESCE
(или эквивалентная логика) для обработки вашей 'пустой строки соответствует NULL
' логике пользовательского интерфейса.Вы не говорите, какой синтаксис SQL, и не разместили DLL схемы, поэтому мы просто догадываемся ...
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, '');
Access Database Engine (также известный как 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);
Затем выполните процедуру, используя ваше промежуточное ПО (ADO, DAO и т. Д.) С объектами Parameter, используя пустую строку (или другое «магическое» значение) для NULL
.