Я новичок в коде VBA и изо всех сил стараюсь ознакомиться с ним для базы данных, которую я создаю. База данных занимается инвентаризацией ИТ-устройств и использует интерфейс MS Access Office 365 с серверной частью SQL 2017.
Вот что я пытаюсь выполнить sh. В базе данных мы не хотим удалять записи, просто архивируем их в другую таблицу. Для этого я создал хранимую процедуру в SSMS и убедился, что она выполняет свою работу правильно. Я хочу, чтобы VBA вызывал эту хранимую процедуру. Для этой процедуры мне нужно передать ему идентифицирующую информацию. В VBA я пытаюсь присвоить значение имени сервера из формы переменной, которую я могу передать в вызов хранимой процедуры. Я нашел слишком много примеров с использованием команды EXEC
, но Access сообщает мне, что я должен использовать предложение Procedure
. Я знаю, что мой код VBA ужасен, но, пожалуйста, помогите!
Private Sub Command148_Click()
Dim SrvNameVar As String
Dim strSQL As String
Dim strParm As String
SrvNameVar = Me.SrvName
strParm = "PARAMETERS [Server Name] As CHAR;"
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
strSQL = strParm & "PROCEDURE dbo.sp_ArchiveServer [Server Name];"
Set qdf = dbs.CreateQueryDef("SrvArchive", strSQL)
dbs.Execute ("SrvArchive")
End Sub
Вот хранимая процедура, которая правильно работает в SSMS:
CREATE PROCEDURE sp_ArchiveServer @Server nvarchar(30) AS
BEGIN TRANSACTION;
INSERT INTO FSC.dbo.Archive_Servers ([SrvID],[SID],[SrvName],[Make],
[Model],[SN],[SrvIP],[RemoteMgmt],[OSID],[IsDP],[IsIEMRelay],
[IsGUP],[DatePurch],[WarrantyExp],[RAIDConfig],[PrintSrv],
[ConnectedToUPS],[VirtHost],[VirtMachine])
SELECT FSC.dbo.Servers.*
FROM FSC.dbo.Servers
WHERE FSC.dbo.Servers.SrvName = @Server;
DELETE FROM FSC.dbo.Servers
WHERE FSC.dbo.Servers.SrvName = @Server;
COMMIT;
Спасибо за любую помощь!