В настоящее время я пишу надстройку Excel на основе VBA, которая в значительной степени основана на базе данных Jet (я использую пакет Office 2003 - проблема будет такой же, как и в более поздней версии Office).
Во время инициализации моего приложения я создаю хранимые процедуры, которые определены в текстовом файле.Эти процедуры вызываются моим приложением при необходимости.
Позвольте мне привести простой пример для описания моей проблемы: предположим, что мое приложение позволяет конечным пользователям выбирать идентификаторы заказов, для которых они хотели бы получить подробную информацию.Вот определение таблицы:
Таблица tblOrders: OrderID LONG, OrderDate DATE, (другие поля)
Конечный пользователь может выбрать один или несколько OrderID, отображаемых вform - ему / ей нужно просто поставить галочку напротив соответствующих идентификаторов OrderID, для которых он / она хочет получить подробную информацию (OrderDate и т. д.).
Поскольку я заранее не знаю, сколько OrderID он / она выберет, я мог бы динамически создавать SQL-запрос в коде VBA, каскадируя предложения WHERE на основе выбора, сделанного в форме:
SELECT * FROM tblOrders WHERE OrderID = 1 OR OrderID = 2 OR OrderID = 3
или, что намного проще, с помощью ключевого слова IN:
SELECT * FROM tblOrders WHERE OrderID IN (1,2,3)
Теперь, если я превращу этот простой запрос в хранимую процедуру, чтобы я мог динамически передавать список идентификаторов OrderID, которыми я хочу бытьотображается, как я должен сделать?Я уже пробовал такие вещи, как:
CREATE PROCEDURE spTest (@OrderList varchar) AS
SELECT * FROM tblOrders WHERE OrderID IN (@OrderList)
Но это не работает (я ожидал этого), потому что @OrderList
интерпретируется как строка (например, "1,2,3"), а не каксписок длинных значений.(Я адаптировался из кода, найденного здесь: Передача списка / массива в хранимую процедуру SQL Server )
Я бы хотел избежать решения этой проблемы с помощью чистого кода VBA (то есть динамического назначения списказначений для запроса, который жестко задан в моем приложении), насколько это возможно.Я бы понял, если это когда-либо будет невозможно.
Любая подсказка?