点击或拖拽改变大小

Functions.XmlUpdatefram 方法

X#
-- todo --
将缓冲表或游标中的更改镜像到XML UpdateGram中,并返回包含UpdateGram的字符串。
XML UpdateGram表示X#表或游标中已更改部分的前后状态。通过额外的处理, 您可以使用UpdateGram将这些更改提交到XML UpdateGram文档所代表的数据。
备注 备注:
要使用XMLUpdateGRAM( ),您必须使用Set MultiLocks ON并启用表缓冲。
备注 备注:
在调用XMLUpdateGRAM( )之前,您应该通过对现有游标和表调用CursorSetProp( ) 并使用KeyFieldList属性来指定键字段列表。如果不指定键字段, 前后表示中都将包含表中的所有字段。如果指定一个或多个键字段,只有这些字段会出现在前部分。

命名空间:  XSharp.VFP
程序集:  XSharp.VFP (在 XSharp.VFP.dll 中) 版本:2.22 GA
语法
 FUNCTION XmlUpdatefram(
	cAliasList,
	nFlags,
	cSchemaLocation
) AS STRING CLIPPER
查看代码

参数

cAliasList (Optional)
类型:__Usual
指定要包含在XML UpdateGram中的打开表或游标的逗号分隔列表,可以按名称或工作区号列出,或两者的任意组合。 如果不为cAliasList指定值或指定空字符串(""),X#将使用当前数据会话中所有包含缓冲更改的打开表和游标。
nFlags (Optional)
类型:__Usual
指定是否返回格式化文件。备注部分的表格列出了nFlags的累加标志。
cSchemaLocation (Optional)
类型:__Usual
指定映射架构(如果存在)的名称和位置。
备注 备注:
您必须提供映射架构。
例如,假设您将名为mySchema.xsd的架构传递给cSchemaLocation,创建的UpdateGram将包含一个映射架构属性, 如以下XML所示:
X#
1<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
2<updg:sync mapping-schema="mySchema.xsd" >
3<updg:before>

返回值

类型:String
字符数据类型。XMLUpdateGRAM( )返回一个包含XML UpdateGram的字符串。
备注
您可以将XMLUpdateGRAM( )与X#的OLE DB提供程序一起使用。但是,_VFPVFPXMLProgID属性不受支持, 因为OLE DB提供程序不支持_VFP系统变量。
备注 备注:
要将X# OLE DB提供程序与XMLUpdateGRAM( )一起使用, 您必须在安装OLE DB提供程序的计算机上安装MSXML 3.0。
SQL Server和Visual Studio支持DiffGram格式来更新XML。但是,SQL XML需要映射架构来支持此格式。 因此,XMLUpdateGRAM( )不支持此格式。
为避免XMLUpdateGRAM( )在包含MemoGeneral字段的表上可能产生的错误, 请使用CursorSetProp( )函数。以下示例展示了如何通过使用CursorSetProp( )设置 KeyFieldList属性来在XML UpdateGram中包含备注数据:
X#
 1Set MultiLocks ON
 2Create CURSOR Test (mField M, cField I AutoInc)
 3Insert Into Test (mField) VALUES ("123456789")
 4Insert Into Test (mField) VALUES ("23456789")
 5Insert Into Test (mField) VALUES ("3456789")
 6Insert Into Test (mField) VALUES ("456789")
 7CursorSetProp("Buffering",5)
 8CursorSetProp("keyfieldlist",'cField')
 9Update Test Set mField = "XXXXXXX" Where cField < 3
10StrToFile(XMLUpdateGRAM(),'xmlupdate.txt')
11MODIFY FILE xmlupdate.txt
12RETURN
要将XML UpdateGram中的备注数据写入SQL Server,您必须在SQL Server上使用显式架构, 并在XML UpdateGram中引用该架构。
CURSORTOXML( )函数不同,XMLUpdateGRAM( )忽略Set Fields语句,直接从底层游标读取。 要在调用XMLUpdateGRAM( )之前更改表结构,您必须将数据复制到新游标中。例如, 要将Numeric字段更改为Currency字段,以下示例使用SQL Select语句创建新游标, 并将该游标与XMLUpdateGRAM( )一起使用。该示例将Total_Price字段转换为货币字段,使用 CursorSetProp( )启用缓冲,使用Replace命令添加销售税,并使用 XMLUpdateGRAM( )函数创建XML UpdateGram。
X#
1Select OrderID, CustID, NTOM(Total_Price) as Total_Price;
2From Orders Into CURSOR New_Orders READWRITE
3CursorSetProp("Buffering", 5, "New_Orders")
4Replace Total_Price WITH (Total_Price * 1.083)
5cXMLUpdg = XMLUpdateGRAM("New_Orders")
使用标志32768时,标志16和32的设置可能会影响应用哪个代码页,这取决于您要写入XML的数据类型。 以下表格显示了可能的设置组合及每种组合应用的代码页。
对于使用32768标志设置写入的XML文档,应用以下代码页。
标志16标志32设置标志32768
未设置未设置 XML文档:Windows-1252。 Unicode数据:代码页1252。 字符数据:默认代码页,除非字段标记为NOCPTRANS
True (.T)未设置 XML文档:游标的CodePage属性。如果XMLField CodePage属性大于零(0) 且与游标的代码页不匹配,则报告错误。
Unicode数据:游标对象的Code page属性。
字符数据:无。改用来自X#表(.dbf)的原始数据。
未设置设置 XML文档:UTF-8代码页。
Unicode数据:UTF-8代码页。
字符数据:默认代码页,除非字段标记为NOCPTRANS, 在这种情况下不会进行额外的字符转换为UTF-8。
设置设置 XML文档:UTF-8代码页。
Unicode数据:UTF-8代码页。
字符数据:默认代码页,除非字段标记为NOCPTRANS, 在这种情况下,使用SYS(3005)设置将数据转换为UTF-8。
对于未设置32768标志写入的XML文档,应用以下代码页。
标志16标志32不带32768标志
未设置未设置 XML文档:Windows-1252。
Unicode数据:代码页1252。
字符数据:默认代码页,除非字段标记为NOCPTRANS
True (.T)未设置 XML文档:游标的CodePage属性。 字符数据:无。改用来自X#表(.dbf)的原始数据。 Unicode数据:游标对象的代码页属性。
未设置设置 XML文档:UTF-8代码页。 Unicode数据:UTF-8代码页。 字符数据:默认代码页,除非字段标记为NOCPTRANS,在这种情况下不会进行额外的字符转换为UTF-8。
设置设置 XML文档:UTF-8代码页。
Unicode数据:UTF-8代码页。
字符数据:默认代码页,除非字段标记为NOCPTRANS,在这种情况下, 它们使用当前SYS(3005)设置的代码页转换为UTF-8。
有关将XML转换为X#数据的更多信息,请参阅"在XML和X#数据之间转换"。
nFlag输出描述
00000(默认)使用UTF-8格式的XML。
10001使用未格式化的XML,例如连续字符串XML。
20010用开放和关闭元素包围空元素,例如<cc04></cc04>。
40100保留字段中的空白。
81000将Memo字段包装在CDATA部分中。
1610000输出编码。
32100000输出编码。
32768表示应使用代码页。
备注 备注:
当输出编码为UTF-8(默认)时,XML声明不包含Encoding=属性 (无编码属性 = UTF-8)。
当输出编码设置为默认为游标或表的代码页时,编码属性将根据以下表格写入。
备注 备注:
通过组合第4位和第5位(0010000)设置编码标志。
编码标志第4位和第5位描述
+000(默认)Windows 1252
+1601将输出编码属性设置为游标的代码页。
+3210将输出编码属性设置为UTF-8(无字符转换)。
+4811将输出编码属性设置为UTF-8,并将双字节字符转换为UTF-8。
参见