MS Access VBA-从存储过程输出下载XML文件
我需要一个从存储过程下载XML文件并将其保存到磁盘的函数。使用MS Access VBA是否可以实现这一点 以下是我在SQL Server中的测试示例:MS Access VBA-从存储过程输出下载XML文件,xml,ms-access,stored-procedures,vba,Xml,Ms Access,Stored Procedures,Vba,我需要一个从存储过程下载XML文件并将其保存到磁盘的函数。使用MS Access VBA是否可以实现这一点 以下是我在SQL Server中的测试示例: 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
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
狂欢
VBA(我尝试过做什么,但不知道如何使用XML变量)
任何形式的帮助都将不胜感激,谢谢 您真的必须使用T-SQL返回参数吗 通常,如果编写“其他”T-SQL例程并希望返回值,则存储过程的返回参数是最好的 对于一般代码,为什么不执行select并以表的形式返回值,就像大多数情况下那样进行选择 所以代替
Select @MyXml = (blab la bla)
走吧
select (blab la bla).
或者在最后,简单地将@MyXml声明为var,然后
Select @MyXml
如果采用上述方法,则存储过程将变为:
CREATE PROCEDURE returnXML
(@ID INT)
AS
BEGIN
SET NOCOUNT ON;
SELECT (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
在Access中,如果您声明了一个传递查询(您应该有一个“通用”查询),那么您可以:
Sub Test1()
Dim i As Integer
Dim strXML As String
i = InputBox("What id")
With CurrentDb.QueryDefs("qryPassR")
.SQL = "returnXML " & i
strXML = .OpenRecordset()(0)
End With
Debug.Print strXML
在Access中使用pt查询意味着您不会弄乱代码中的连接字符串
因此,除非存在某种“大”理由来使用该返回参数,否则您可以使用上述方法。如果您确实必须使用一些“现有”的t-sql例程来返回值,那么我建议使用exec+a select@MyXml
因此,即使您被迫使用返回值,您也可以在上面的.SQL=中执行以下操作:
declare @MyXML varcharmx
Myxml 1,@Mxml;select @myxml
应该是可能的。您卡在哪里了?用于xml参数类型的开始。我尝试的(adVarBinary,adLongVarChar)出现以下错误“参数对象定义不正确。提供的信息不一致或不完整”我想在这里了解关于JSON和access解析的广泛讨论。如果您感兴趣,可以看看我的,它可以将查询/表导出为JSON字符串。谢谢您的回答。将选择返回为字符串的问题是我丢失了所需的XML格式,这就是我想到返回XM的原因L variable.Hum,我认为xml是一个返回的字符串-不知道为什么会有不同。唯一的问题可能是xml长度超过255,但除此之外,返回的字符串应该保留xml格式。大于255,但你是对的,如果小于255,则保留格式。
Sub Test1()
Dim i As Integer
Dim strXML As String
i = InputBox("What id")
With CurrentDb.QueryDefs("qryPassR")
.SQL = "returnXML " & i
strXML = .OpenRecordset()(0)
End With
Debug.Print strXML
declare @MyXML varcharmx
Myxml 1,@Mxml;select @myxml