Hello,
I need to have a function that downloads an XML file from a stored procedure and saves it to the disk. Is this possible with MS Access VBA?
Here's my test sample in SQL Server:
Sproc
VBA (what I tried...)
Thank you in advance.
I need to have a function that downloads an XML file from a stored procedure and saves it to the disk. Is this possible with MS Access VBA?
Here's my test sample in SQL Server:
Code:
CREATE TABLE dbo.TestXML(
ID int NOT NULL,
PID] int NULL,
Code int NULL,
Col1 int NULL,
Col2 int NULL,
Col3 decimal(6, 2) NULL,
Col4 decimal(6, 2) NULL,
Col5 int NULL,
CONSTRAINT PK_TestXML PRIMARY KEY CLUSTERED (ID ASC)
)
GO
INSERT dbo.TestXML (ID, PID, Code, Col1, Col2, Col3, Col4, Col5) VALUES (1, 1000, 10, 1, 2, CAST(0.20 AS Decimal(6, 2)), CAST(0.10 AS Decimal(6, 2)), 1)
INSERT dbo.TestXML (ID, PID, Code, Col1, Col2, Col3, Col4, Col5) VALUES (2, 1000, 20, NULL, 1, CAST(1.00 AS Decimal(6, 2)), CAST(1.00 AS Decimal(6, 2)), 1)
INSERT dbo.TestXML (ID, PID, Code, Col1, Col2, Col3, Col4, Col5) VALUES (3, 1000, 30, NULL, NULL, CAST(2.00 AS Decimal(6, 2)), CAST(2.00 AS Decimal(6, 2)), 5)
GO
Sproc
Code:
CREATE PROCEDURE returnXML
(@ID int,
@xmlOut XML OUTPUT)
AS
BEGIN
SET NOCOUNT ON;
SELECT @xmlOut=(SELECT PID [p/@v],(
SELECT Code as [code/@c], Col1 AS [code/val]
FROM [dbo].[TestXML]
WHERE ID=@ID
FOR XML PATH(''),TYPE)
FROM [dbo].[TestXML]
WHERE ID=@ID
FOR XML PATH('u'),TYPE)
END
GO
VBA (what I tried...)
Code:
Function getXML(sproc As String, id As Integer) As Object
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cmd As ADODB.Command
Dim cnnStr As String
Dim Rs As New ADODB.Recordset
Dim StrSproc As String
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
Set cmd = New ADODB.Command
Set Rs = New ADODB.Recordset
cnnStr = getConnString()
With cnn
.CommandTimeout = 900
.ConnectionString = cnnStr
.Open
End With
With cmd
.ActiveConnection = cnn
.CommandType = adCmdStoredProc
.CommandText = sproc
.Parameters.Append .CreateParameter("@ID", adInteger, adParamInput, id)
.Parameters.Append .CreateParameter("@xmlOut", adLongVarChar, adParamOutput)
End With
With Rs
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open cmd
End With
Set rst = cmd.Execute(, , adCmdStoredProc)
getXML = cmd.Parameters("@xmlOut").Value
End Function
Thank you in advance.