VFP ·R¥ÎªÌªÀ°Ï ­º­¶ VFP ·R¥ÎªÌªÀ°Ï
¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

CursorAdapter °_¨B 2 (Âà¶K)

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
Ruey



µù¥U®É¶¡: 2003-03-12
¤å³¹: 1698
¨Ó¦Û: tunglo

²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤» ¤Q¤ë 11, 2003 12:57 pm    ¤å³¹¥DÃD: CursorAdapter °_¨B 2 (Âà¶K) ¤Þ¨¥¦^ÂÐ

CursorAdapter °_¨B 2 [Âà©«]
CursorAdapter °_¨B ¤§ ¤G¡G¥Î CursorAdapter ¨Ó¨ú±o©M§ó·s¸ê®Æ
§@ªÌ¡GDung Hennig
ĶªÌ¡Gfbilo
¦b VFP8 ¤¤·s¼Wªº CursorAdapter °òÃþ´£¨Ñ¤@­Ó²Î¤@¡B©ö¥Îªº¸ê®Æ¤¶­±¡CDoug Hennig ¦b³o­Ó¤ëªº¤å³¹¤¤ºt¥Ü¤F«ç¼Ë¨Ï¥Î CursorAdapter ¨Ó³X°Ý¥»¦a¸ê®Æ©M ODBC¡BADO©MXML³o¼Ëªº»·ºÝ¸ê®Æ¡X¡X°Q½×¤F¨Ï¥Î¦UºØ¸ê®Æ·½¬ÛÀ³ªº¯S®í­n¨D©M¹ê²{³~®|¡C
¥¿¤å¡G
¦p§Ú¦b¤W¤@½g¤å³¹¤¤©Ò´£¨ìªº¨º¼Ë¡A¦bVFP8¤¤¤@­Ó³Ì­«­nªº¡B¤]¬O³Ìºë±mªº·s¥\¯à¬O·sªº CursorAdapter °òÃþ¡C¦b¨º½g¤å³¹¤¤¡A§Ú­Ì¬ã¨s¤F¤@¤U CursorAdapter ªºÄÝ©Ê¡B¨Æ¥ó©M¤èªk¡A¨Ã°Q½×¤F¥¦¬Û¹ï¤_»·µ{µø¹Ï¡BSQL PassThrough(SPT)¡BADO©MXMLªºÀu¶Õ¡C
¦b¶}©l¨Ï¥Î CursorAdapter ¤§«e¡A§A»Ý­n®Ú¾Ú­n³X°Ýªº¬O¥»¦a¸ê®ÆÁÙ¬O³q¹LODBC¡BADO©ÎªÌXMLªº»·ºÝ¸ê®Æ·½ªº¤£¦P¡Aª`·N³o­ÓÃþ©Ò¬ÛÀ³ªº¤£¦Pªº¯S®í­n¨D¡C³o­Ó¤ëªº¤å³¹´NÁ¿­z¤F¨Ï¥Î¦UºØ¸ê®Æ·½ªº²Ó¸`¡C
¨Ï¥Î¥»¦a¸ê®Æ·½
¡Ñ¡Ñ¡Ñ¡Ñ¡Ñ¡Ñ¡Ñ
¾¨ºÞ§Ú­Ì«Ü²M·¡ CursorAdapter ¬O¸Õ¹Ï¥Î¨Ó¼Ð·Ç¤Æ©M²¤Æ¹ï«DVFP¸ê®Æªº³X°Ý¤è¦¡ªº¡A¤£¹L§AÁÙ¬O¥i¥H§â¥¦·í§@¬O Cursor ªº¥N´À«~¥Î¥¦¨Ó³X°ÝVFP¸ê®Æ¡G¥u­n§â¥¦ªº DataSourceType Äݩʳ]¸m¦¨ "Native"¡C¬°¤°»ò­n³o»ò°µ©O¡H¦]¬°§AªºÀ³¥Îµ{¦¡±N¨Ó¥i¯à·|»Ý­n¤É¾E¡X¡X¨º®É­Ô§A´N¥i¥H§â DataSourceType Äݩʳ]¸m¦¨¨ä¥L´X­Ó¿ï¶µ¤§¤@¡]·íµM¥i¯àÁٻݭn­×§ï¨ä¥L´X­ÓÄÝ©Ê¡A¨Ò¦p³]¸m³s±µ¸ê°Tµ¥µ¥¡^¡A´N¯à»´ÃPªº¤Á´«¨ì¥t¤@ºØ¸ê®Æ®w¤ÞÀº¡A¨Ò¦pSQL Server¡C
·í DataSourceType Äݩʪº³]¸m¬° "Native" ªº®É­Ô¡AVFP ·|©¿²¤¥¦ªº DataSource ÄÝ©Ê¡CSelectCmd ÄÝ©Ê¥²¶·¬O¤@­Ó SQL Select »y¥y¡]¦Ó¤£¬O¤@­Ó USE ©R¥O©Î¹Bºâ¦¡¡^¡A³o´N·N¨ýµÛ§A¥Î CursorAdapter ¤£¬Oª½±µ¾Þ§@¥»¦aªí¦Ó¬O¾Þ§@¤@­ÓÃþ¦ü©ó¥»¦aµø¹Ï¨º¼ËªºªF¦è¡C§AÁÙ¥²¶·½T«OVFP¯à°÷§ä¨ì¥X²{¦b¨º­Ó Select »y¥y¤¤ªº¥ô¦óªí¡A¦]¦¹¡A¦pªG³o¨Çªí¤£¦b·í«e¸ô®|¤¤¡A¨º»ò§A´N»Ý­n³]¸m¤@¤U¸ô®|©ÎªÌ¥´¶}³o¨Çªí©ÒÄݪº¸ê®Æ®w¡C¦¹¥~¡A´N¸ò¥Îµø¹Ï¤@¼Ë¡A¦pªG§A·QÅý³o­Ó Cursor ¬O¥i§ó·sªº¡A§AÁÙ¥²¶·³]¸m¦n¨º¨Ç»P§ó·s¬ÛÃöªºÄÝ©Ê¡]KeyFieldList¡BTables¡BUpdatableFieldlist ©M UpdateNameList¡^¡C
¤U­±ªº¨Ò¤l¡]¤å³¹ªþ¥ó NativeExample.prg¡^·|¥Î VFP ¥Ü¨Ò¸ê®Æ®w¤¤ªº Customer ªí«Ø¥ß¤@­Ó¥i§ó·sªº Cursor¡G
local loCursor as CursorAdapter, laErrors[1]
Open database (_samples + 'data\testdata')
with loCursor
.Alias = 'customercursor'
.DataSourceType = 'Native'
.SelectCmd = "Select CUST_ID, COMPANY, CONTACT FROM CUSTOMER " + ;
"WHERE COUNTRY = 'Brazil'"
.KeyFieldList = 'CUST_ID'
.Tables = 'CUSTOMER'
.UpdatableFieldList = 'CUST_ID, COMPANY, CONTACT'
.UpdateNamelist = 'CUST_ID CUSTOMER.CUST_ID, '+ ;
'COMPANY CUSTOMER.COMPANY, CONTACT CUSTOMER.CONTACT'
if .CursorFill()
browse
tableupdate(1)
else
aerror(laErrors)
messagebox(laErrors[2])
endif .CursorFill()
endwith
close databases all
¨Ï¥Î ODBC
¡Ñ¡Ñ¡Ñ¡Ñ¡Ñ
ODBC ¬O DataSourceType ÄÝ©Ê¥|ºØ³]¸m¤¤³Ì²³æªº¤@ºØ¡C§â DataSource ³]¸m¬°¤@­Ó¥´¶}¤Fªº ODBC ³s±µ±±¨î½X¡B³]¸m¤@¤U±`¥ÎªºÄÝ©Ê¡BµM«á½Õ¥Î CursorFill ¨Ó¨ú±o¸ê®Æ¡C¦pªG§A³]¦n¤F KeyFieldList¡BTables¡BUpdatableFieldList ©M UpdateNameList ÄÝ©Ê¡AVFP ·|¦Û°Ê§â§A¹ï¸ê®Æªº¥ô¦ó§ï°ÊÂà´«¦¨¬ÛÀ³ªº UPDATE¡BINSERT¡B©M DELETE »y¥y¨Ó§â§ï°Ê´£¥æ¨ì«á»O¸ê®Æ·½¡C¦pªG§A·Q¥Îªº¬O¤@­Ó¦sÀx¹Lµ{¡A¨º»ò­n¬ÛÀ³ªº³]¸m *Cmd¡B*CmdDataSource ©M *CmdDataSourceType ÄÝ©Ê¡]* ¥Nªí ¡§Delete¡¨¡B¡§Insert¡¨©Î¡§Update¡¨¡^¡C
³oùجOªþ¥ó ODBCExample.prg ¤¤ªº¤@­Ó¨Ò¤l¡A¥¦½Õ¥Î Sql Server ¦Û±aªº NorthWind ¸ê®Æ®w¤¤ªº CustOrderHist ¦sÀx¹Lµ{¨Ó¨ú±o¾P°âµ¹¬Y­Ó«È¤áªº³æ¦ì²£«~Á`¼Æ¡C
local lcConnString, loCursor as CursorAdapter, laErrors[1]
lcConnString = 'driver=SQL Server;server=(local);database=Northwind;uid=sa;pwd=;"+ ;
"trusted_connection=no'
** §â¤W­±³s±µ¦r¦ê¤¤ªº±K½X§ï¦¨§AªºSQL Server µn¿ýªº±K½X
loCursor = createobject('CursorAdapter')
with loCursor
.Alias = 'Customerhistory'
.DataSourceType = 'ODBC'
.DataSource = SQLStringConnect(lcConnString)
.SelectCmd = "exec CustOrderhist 'ALFKI'"
if .CursorFill()
browse
else
aerror(laErrors)
messagebox(laErrors[2])
endif .CursorFill()
endwith
¨Ï¥Î ADO
¡Ñ¡Ñ¡Ñ¡Ñ
»P¨Ï¥Î ODBC ¬Û¤ñ¡A¨Ï¥Î ADO ­n¦h¤@¨Ç»Ý­n¾Þ¤ßªº¨Æ±¡¡G
¡Ñ¡Ñ DataSource ¥²¶·³Q³]¸m¦¨¤@­Ó ADO RecordSet¡A¦Ó¥B³o­Ó RecordSet ªº ActiveConnection Äݩʻݭn³Q³]¸m¦¨¤@­Ó¥´¶}¤Fªº ADO Connection ª«¥ó¡C
¡Ñ¡Ñ ¦pªG§A·Q­n¨Ï¥Î¤@­Ó°Ñ¼Æ¤Æ¬d¸ß¡]»P¤U¸ü¥þ³¡¸ê®Æ¬Û¤ñ¡A³o¥i¯à¬O§ó±`¥Îªº¤è¦¡¡^¡A§A¥²¶·§â¤@­Ó ADO Command ª«¥ó§@¬°²Ä¥|­Ó°Ñ¼Æ¶Ç»¼µ¹ CursorFill ¤èªk¡A¦Ó¥B³o­Ó Command ª«¥óªº ActiveConnection Äݩʻݭn³Q³]¸m¦¨¤@­Ó¥´¶}¤Fªº ADO Connection ª«¥ó¡CVFP ·|¬°§A·ÓÅU¦n¶ñ¥R Command ª«¥óªº°Ñ¼Æ¤Æ¶°¦Xªº¨Æ±¡¡]¥¦³q¹L¤ÀªR SelectCmd ¨Ó§ä¥X°Ñ¼Æ¡^¡A¤£¹L°Ñ¼Æ©Ò¥]§tªº­È·íµMÁÙ¬O¥²¶·¦b¦³®Ä¨ú­È½d³ò¤ºªº¡C
¡Ñ¡Ñ ¦b¸ê®ÆÀô¹Ò¤¤¥u¦³¤@­Ó¨Ï¥Î¤F ADO ªº CursorAdapter ³o¼Ëªº±¡ªp¬O¤ñ¸û²³æªº¡G¦pªG»Ý­nªº¸Ü¡A§A¥i¥H§â UseDEDataSource Äݩʳ]¸m¦¨ .T.¡AµM«á®Ú¾Ú§Aªº»Ý­n§â¸ê®ÆÀô¹Òªº DataSource ©M DataSourceType Äݩʳ]¸m¦¨ CursorAdapter¡C¤£¹L¡A¦pªG¸ê®ÆÀô¹Ò¤¤¦³¦h­Ó CursorAdapter ªº¸Ü¡A³oºØ¿ìªk´NµL®Ä¤F¡C­ì¦]¬O DataEnvironment.DataSource ©Ò¤Þ¥Îªº ADO RecordSet ¥u¯à¥]§t¤@­Ó CursorAdapter ªº¸ê®Æ¡F·í§A¬°²Ä¤G­Ó CursorAdapter ½Õ¥Î CursorFill ¤èªkªº®É­Ô¡A·|¥X²{ ¡§RecordSet is already open (RecordSet °O¿ý¶°¤w¸g¥´¶})¡¨ªº¿ù»~¡C©Ò¥H¡A¦pªG§Aªº¸ê®ÆÀô¹Ò¤¤¦³¶W¹L¤@­Óªº CursorAdapter¡A§A¥²¶·­n§â UseDEDataSource ³]¸m¦¨ .F.¡A¨Ã¦Û¦æºÞ²z¨C­Ó CursorAdapter ªº DataSource ©M DataSourceType ÄÝ©Ê¡]©ÎªÌ§A¥i¥H¨Ï¥Î¤@­Ó¯à°÷ºÞ²z³oºØ±¡ªpªº DataEnvironment ªº¤lÃþ¡^¡C
ªþ¥ó ADOExample.prg ¤¤ªº¥Ü¨Ò¥N½Xºt¥Ü¤F«ç¼Ë­É§U¤@­Ó ADO Command ª«¥ó¨Ó¨ú±o¸ê®Æ¡C³o­Ó¥Ü¨ÒÁÙºt¥Ü¤F¨Ï¥Î VFP8 ¤¤·sªºµ²ºc¤Æ¿ù»~³B²zªº¥\¯à¡C¹ï ADO Connection ª«¥óªº Open ¤èªkªº½Õ¥Î³Q«Ê¸Ë¦b¤@­Ó TRY...CATCH...ENDTRY »y¥y¤¤¡A¥H®·®»½Õ¥Î³o­Ó¤èªk¥¢±Ñªº®É­Ô±N·|¥X²{ªº COM ¿ù»~¡C
local loConn as ADODB.Connection, ;
loCommand as ADODB.Command, ;
loException as Exception, ;
loCursor as CursorAdapter, ;
lcCountry, ;
laErrors[1]
loConn = createobject('ADODB.Connection')
with loConn
.ConnectionString = 'provider=SQLOLEDB.1;data source=(local);' + ;
'initial catalog=Northwind;uid=sa;pwd=dhennig;trusted_connection=no'
&& §â¤W­±³s±µ¦r¦ê¤¤ªº±K½X§ï¦¨§AªºSQL Server µn¿ýªº±K½X
try
.Open()
catch to loException
messagebox(loException.Message)
cancel
endtry
endwith
loCommand = createobject('ADODB.Command')
loCursor = createobject('CursorAdapter')
with loCursor
.Alias = 'Customers'
.DataSourceType = 'ADO'
.DataSource = createobject('ADODB.RecordSet')
.SelectCmd = 'select * from customers where country=?lcCountry'
lcCountry = 'Brazil'
.DataSource.ActiveConnection = loConn
loCommand.ActiveConnection = loConn
if .CursorFill(.F., .F., 0, loCommand)
browse
else
aerror(laErrors)
messagebox(laErrors[2])
endif .CursorFill(.F., .F., 0, loCommand)
endwith
¨Ï¥Î XML
¡Ñ¡Ñ¡Ñ¡Ñ
¥Î CursorAdapter ¨Ó¾Þ§@ XML »Ý­n¤@¨Ç¯S®íªº³]¸m¡C¤U­±¬O³o¨Ç°ÝÃD¡G
¡Ñ¡Ñ DataSource ÄݩʳQ©¿²¤¡F
¡Ñ¡Ñ CursorSchema ÄÝ©Ê¥²¶·³Q¶ñ¥R¦n¡X¡X§Y¨Ï§Aµ¹ CursorFill ¶Ç»¼ªº²Ä¤@­Ó°Ñ¼Æ¬O .F. ¤]¤@¼Ë¡X¡X§_«h±N·|¥X¿ù¡C
¡Ñ¡Ñ SelectCmd ¥²¶·³Q³]¸m¦¨¤@­Ó¹Bºâ¦¡¡A¨Ò¦p¤@­Ó¥Î¤á¦Û©w¸q¨ç¼Æ¡]UDF¡^©ÎªÌª«¥ó¤èªk¦W¡A¸Ó¹Bºâ¦¡¯à°÷¬° Cursor ªð¦^ XML¡C
¡Ñ¡Ñ ¹ï Cursor ªº§ï°Ê·|³QÂà´«¦¨¤@­Ó DiffGram,¥¦¬O¡§¥]§tµÛ³Q§ï°Ê¤FªºÄæ¦ì©ÎªÌ°O¿ý¡A¦b³Q§ï°Ê¤§«e¡B³Q§ï°Ê¤§«áªº­È¡¨ªºXML¡A·í»Ý­n§ó·sªº®É­Ô¡A¥¦³Q©ñ¦b DiffGram Äݩʤ¤¡C
¡Ñ¡Ñ ¬°¤F§â¸ê®Æ§ó°Ê¦^¼g¨ì¸ê®Æ·½¤¤¥h¡AUpdateCmdDataSourceType ÄÝ©Ê¥²¶·³Q³]¸m¬°¡§XML¡¨¡A¨Ã¥B UpdateCmd ¥²¶·³Q³]¸m¦¨¤@­Ó¯à°÷³B²z´£¥æ§ó·s¥ô°Èªº¹Bºâ¦¡¡]¶H«e­±¤@¼Ë¡A³o­Ó¹Bºâ¦¡¤]¬O¶H¤@­Ó UDF ©ÎªÌª«¥óªº¤èªk¡^¡C§A¥i¯à·|»Ý­n§â ¡§This.DiffGram¡¨¶Ç»¼µ¹¨º­Ó UDF¡A³o¼Ë¥¦´N¥i¥H§â§ó·s´£¥æµ¹«á»O¸ê®Æ·½¡C
³o­Ó Cursor ©Ò¨Ï¥Îªº XML ­ì©lÀÉ®×¥i¯à¨Ó¦Û¦UºØ¤£¦Pªº¦a¤è¡C¨Ò¦p¡A§A¥i¥H½Õ¥Î³o¼Ë¤@­ÓUDF¡G¥¦¯à¥Î CursorToXML()¨Ó§â¤@­ÓVFP Cursor Âà´«¦¨ XML¡A¨Ãªð¦^µ²ªG¡G
use CUSTOMERS
cursortoxml('customers', 'lcXML', 1, 8, 0, '1')
Return lcXML
UDF ¥i¥H½Õ¥Î¤@­Ó Web Service¡A³o­Ó Web Service «hªð¦^¤@­Ó XML µ²ªG¶°¡C³oùجO¤@­Ó¨Ò¤l¡A§Ú«Ø¥ß¤F¤@­Ó Web Service ¨Ãµù¥U¦b§Ú¦Û¤vªº¨t²Î¤W¡A ¦Ó´¼¼z·Pª¾«h¬°§Ú¥Í¦¨¤F¤U­±ªº¥N½X¡]¨ãÅ骺²Ó¸`¨Ã¤£­«­n¡A¥¦¥u¬Oºt¥Ü¤F¤@­Ó Web Service ªº¨Ò¤l¡^¡G
loWS = newobject("WSclient', home() + 'ffc\_webservices.vcx')
loWS.cWSName = 'dataserver web service'
loWS = loWS.SetupClient(' http://localhost/' + ;
'SQDataServer/dataserver.WSDL', 'dataserver', ;
'dataserverSoapPort')
lcXML = loWS.GetCustomers()
Return lcXML
¥¦¯à°÷¦b¤@­Ó Web Server ¤W¨Ï¥Î SQLXML 3.0 ¥h°õ¦æ¤@­Ó¦sÀx¦b¤@­Ó¼È¦sÀɮפ¤ªº SQL Server 2000 ¬d¸ß¡]­nÁA¸ÑÃö©ó SQLXML §ó¦hªº¸ê°T¡A½Ð³X°Ý http://msdn.microsoft.com¨Ã¬d§ä SQLXML¡^¡C¤U­±ªº¥N½X¨Ï¥Î¤@­Ó MSXML2.XMLHTTP ª«¥ó³q¹L HTTP ±q Northwind ¸ê®Æ®wªº Customers ªí¨Ó¨ú±o©Ò¦³ªº°O¿ý¡Aµy«á§Ú­Ì±N°µ§ó¶i¤@¨Bªº¸ÑÄÀ¡C
local loXML as MSXML2.XMLHTTP
loXML = createobject('MSXML2.XMLHTTP')
loXML.open('POST', ' http://localhost/northwind/' + ;
'template/getallcustomers.xml, .F.)
loXML.setRequestHeader('Content-type', 'text/xml')
loXML.send()
return loXML.responseText
³B²z§ó·sªº¨Æ±¡­n§ó½ÆÂø¤@ÂI¡C¸ê®Æ·½¥²¶·©ÎªÌ¯à°÷±µ¨ü¨Ã³B²z¤@­Ó DiffGram (¤ñ¦p SQL Server 2000 ªº±¡ªp)¡A©ÎªÌ§A¥²¶·¦Û¤v¥h§Ë²M·¡©Ò¦³ªº§ï°Ê¡B°õ¦æ¤@¨t¦Cªº SQL »y¥y¡]UPDATE¡BINSERT ©M DELETE¡^¥h´£¥æ§ó·s¡C
³oùجO­Ó¨Ï¥Î¤F±a XML ¸ê®Æ·½ªº CursorAdapter ªº¨Ò¤l¡]XMLExample.prg¡^¡C­nª`·Nªº¬O¡GSelectCMD ©M UpdateCMD ³£¬O­n½Õ¥Î UDF ªº¡C¦b SelectCMD ªº±¡ªp¤¤¡A­nªð¦^¸ê®Æªº«È¤á½s¸¹³Q¶Ç»¼µ¹¤@­Ó¥s°µ GetNEWustomers ªº UDF¡A³o­Ó§Ú­Ìµy«á¦A´£¡C¦b UpdateCmd ªº±¡ªp¤¤¡AVFP §â DiffGram Äݩʶǻ¼µ¹ SendNWXML¡A³o­Ó§Ú­Ì¤]µy«á¦A´£¡C
local loCustomers as CursorAdapter, ;
laErrors[1]
loCustomers = createobject('CursorAdapter')
with loCustomers
.Alias = 'Customers'
.CursorSchema = 'CUSTOMERID C(5), COMPANYNAME C(40), ' + ;
'CONTACTNAME C(30), CONTACTTITLE C(30), ADDRESS C(60), ' + ;
'CITY C(15), REGION C(15), POSTALCODE C(10), COUNTRY C(15), ' + ;
'PHONE C(24), FAX C(24)'
.DataSourceType = 'XML'
.KeyFieldList = 'CUSTOMERID'
.SelectCmd = 'GetNWCustomers([ALFKI])'
.Tables = 'CUSTOMERS'
.UpdatableFieldList = 'CUSTOMERID, COMPANYNAME, CONTACTNAME, ' + ;
'CONTACTTITLE, ADDRESS, CITY, REGION, POSTALCODE, COUNTRY, PHONE, FAX'
.UpdateCmdDataSourceType = 'XML'
.UpdateCmd = 'SendNWXML(This.DiffGram)'
.UpdateNameList = 'CUSTOMERID CUSTOMERS.CUSTOMERID, ' + ;
'COMPANYNAME CUSTOMERS.COMPANYNAME, ' + ;
'CONTACTNAME CUSTOMERS.CONTACTNAME, ' + ;
'CONTACTTITLE CUSTOMERS.CONTACTTITLE, ' + ;
'ADDRESS CUSTOMERS.ADDRESS, ' + ;
'CITY CUSTOMERS.CITY, ' + ;
'REGION CUSTOMERS.REGION, ' + ;
'POSTALCODE CUSTOMERS.POSTALCODE, ' + ;
'COUNTRY CUSTOMERS.COUNTRY, ' + ;
'PHONE CUSTOMERS.PHONE, ' + ;
'FAX CUSTOMERS.FAX'
if .CursorFill(.T.)
browse
else
aerror(laErrors)
messagebox(laErrors[2])
endif .CursorFill(.T.)
endwith

³oùجO GetNWCustomers ªº¥N½X¡C¥¦¨Ï¥Î¤F¤@­Ó MSXML2.XMLHTTP ª«¥ó¨Ó³X°Ý¤@­Ó¦ì©ó¤@­ÓWeb Server ¤Wªº¦W¥s CustomersByID.xml ªº SQL Server 2000 XML ½d¥»¡A¨Ãªð¦^µ²ªG¡C­nÀò¨ú¸ê®Æªº Customer ID ³Q§@¬°¤@­Ó°Ñ¼Æ¶Ç»¼µ¹³o¬q¥N½X¡G
lparameters tcCustID
local loXML as MSXML2.XMLHTTP
loXML = createobject('MSXML2.XMLHTTP')
loXML.open('POST', " http://localhost/northwind/template/customersbyid.xml?";; + ;
"customerid=" + tcCustID, .F.)
loXML.setRequestHeader('Content-type', 'text/xml')
loXML.send()
return loXML.responseText
³o¬q¥N½XùؤޥΪº¦W¬° CustomersByID.XML ªº XML ½d¥»ªº¤º®e¦p¤U¡G
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:header>
<sql:param name="customerid">
</sql:param>
</sql:header>
<sql:query client-side-xml="0">
SELECT *
FROM Customers
WHERE CustomerID = @customerid
FOR XML AUTO
</sql:query>
</root>
§â³o­ÓÀÉ©ñ¦b¥Î©ó Northwind ¸ê®Æ®wªº¤@­ÓµêÀÀ¥Ø¿ý¤¤¡]°Ñ¨£¸É¥R¤åÀÉ¡m³]¸m SQL Server 2000 XML ³X°Ý¡n¥HÁA¸Ñ§ó¦hÃö©ó¬° SQL Server 2000 ³]¸m IIS ªº¤º®e¡B¥H¤Î³o½g¤å³¹©Ò»Ý­nªº¯S®í²Ó¸`¡C¡^
SendNWXML ªº¤º®e¬Ý°_¨Ó»P GetNWCustomers Ãþ¦ü¡A°£¤F¥¦±µ¦¬ªº°Ñ¼Æ¬O¤@­Ó DiffGram¡AµM«á¥¦§â³o­Ó DiffGram ¸ü¤J¨ì¤@­Ó MSXML2.DOMDocumnet ª«¥ó¤¤¡A¨Ã§â³o­Óª«¥ó¶Ç»¼µ¹ Web Server¡A¸Ó Web Server ·|³q¹L SQLXML §â³o­Óª«¥ó¶Ç»¼µ¹ SQL Server 2000 ¥h³B²z¡C
lparameters tcDiffGram
local loDOM as MSXML2.DOMDocument, ;
loXML as MSXML2.XMLHTTP
loDOM = createobject('MSXML2.DOMDocument')
loDOM.async = .F.
loDOM.loadXML(tcDiffGram)
loXML = createobject('MSXML2.XMLHTTP')
loXML.open('POST', ' http://localhost/northwind/', .F.)
loXML.setRequestHeader('Content-type', 'text/xml')
loXML.send(loDOM)
¹B¦æ XMLExample.prg ¨Ó¬Ý¬Ý¥¦¬O«ç»ò¤u§@ªº¡C§A±N·|¦b Browse µøµ¡¤¤¬Ý¨ì¤@¥x°O¿ý¡]«È¤á ALFKI¡^¡C¸ÕµÛ§ï°Ê´X­ÓÄæ¦ìªº­È¡AµM«áÃö³¬³o­Óµøµ¡¡A¦A¹B¦æ PRG ¤@¹M¡C§A·|¬Ý¨ì§Aªº§ï°Ê¤w¸g³Q¼g¤J¨ì«á»O¸ê®Æ·½¤¤¤F¡C
Á`µ²
¡Ñ¡Ñ
¾¨ºÞ CursorAdapter °òÃþ´£¨Ñ¤F¤@ºØ¹ï»·ºÝ¸ê®Æ·½ªº²Î¤@ªºµ²ºc¡A¦Ó¤£ºÞ§A¨Ï¥Îªº¬O ODBC¡BADOÁÙ¬OXML¡X¡X¦ý¬O¡A®Ú¾Ú§A¿ï¾Üªº¸ê®Æ³X°Ý¾÷¨îªº¤£¦P¡A¹ï CursorAdapter ªº³]¸m¤]¦³¤@¨Ç°Ï§O¡C³o¨Ç°Ï§O¨ú¨M©ó¸ê®Æ³X°Ý¾÷¨îªº¥»¨­¡C
¤U­Ó¤ë¡A§Ú±N³q¹L«Ø¥ß¤@¨Ç¥i­«¥Îªº¸ê®ÆÃþ¡B¨Ã°Q½×«ç¼Ë¦b³øªí¤¤¨Ï¥Î CursorAdapter ¨Óµ²§ô³o­Ó¨t¦Cªº±MÃD¡C
¸É¥R¤åÀÉ¡G
¡m³]¸m SQL Server 2000 XML ³X°Ý¡n
¬°¤F¯à°÷¦b¤@­Ó¬yÄý¾¹©ÎªÌ¨ä¥L HTTP ¥Î¤áºÝ¥Î¤@­Ó URL ¨Ó³X°Ý SQL Server 2000¡A§A»Ý­n°µ¤@¨Ç¤u§@¡C­º¥ý¡A§A»Ý­n±q MSDN ºô¯¸¡] http://msdn.microsoft.com¡X¡X¬d¸ß¤@¤U¡§SQLXML¡¨¡AµM«á¿ï¾Ü¤U¸ü¡^¥h¤U¸ü©M¦w¸Ë SQLXML 3.0¡C
±µµÛ¡A§A»Ý­n³]¸m¤@­Ó IIS µêÀÀ¥Ø¿ý¡C¨BÆJ¦p¤U¡G±q¶}©l¥\¯àªí|µ{¦¡|SQLXML 3.0Àɧ¨¤¤³æÀ»¡§Configure IIS Support(³]¸m IIS ¤ä´©)¡¨¡C®i¶}§Aªº¦øªA¾¹¸`ÂI¡A¿ï¾Ü­n¨Ï¥Îªº Web ¯¸ÂI¡AµM«á³æÀ»·Æ¹«¥kÁä¡A¿ï¾Ü ¡§·s«Ø|µêÀÀ¥Ø¿ý¡¨¡A¦b¥X²{ªº¹ï¸Ü¤è¶ôªº¡§±`³W¡¨­¶¤¤¿é¤JµêÀÀ¥Ø¿ýªº¦WºÙ©M¥¦ªºª«²z¸ô®|¡C¦b³oùØ¡A§Ú­Ì¨Ï¥Î¡§Northwind¡¨§@¬°µêÀÀ¥Ø¿ý¦W¡B¡§NorthwindTemplates¡¨§@¬°ª«²z¸ô®|¡C¨Ï¥Î Windows ¸ê·½ºÞ²z¾¹¦b§Aªº¨t²Î¤Wªº¤°»ò¦a¤è«Ø¥ß³o­Óª«²z¥Ø¿ý¡AµM«áµ¹¥¦«Ø¤@­Ó¦W¬° ¡§Template¡¨ªº¤l¥Ø¿ý¡]µy«á§Ú­Ì±N·|¥Î¨ì³o­Ó¤l¥Ø¿ý¡^¡C§âªþ¥ó¤¤ªº¨â­Ó½d¥»ÀÉ GetAllCustomers.xml ©M CustomersByID.xml «þ¨©¨ì³o­Ó¤l¥Ø¿ý¤¤¡C
¦b¡§¦w¥þ¡¨­¶¤¤¡A¿é¤J³X°Ý SQL Server ªº¬ÛÀ³ªº¸ê°T¡A¨Ò¦p¥Î¤á¦W©M±K½X©ÎªÌ§A·Q±Ä¥Îªº¯S©wªºÅçÃÒ¾÷¨î¡C¦b¡§¸ê®Æ·½¡¨­¶¤W¡A¿ï¾Ü SQL Server¡A¦pªG»Ý­nªº¸Ü¡AÁÙ­n¿ï¾Ü­n¨Ï¥Îªº¸ê®Æ®w¡C¦b³oùاڭ̿ï¾Ü Northwind ¸ê®Æ®w¡C¦b¡§³]¸m¡¨­¶¤W¿ï¾Ü§Æ±æªº³]¸m¡A¦Ü¤Ö­n¿ï¤W¡§¤¹³\½d¥»¬d¸ß¡¨©M¡§¤¹³\ Post¡¨¡C
¦b¡§µêÀÀ¦WºÙ¡¨­¶¤¤¡A±qÃþ«¬¤U©Ô¦¡¦C¥Ü¤è¶ô¤¤¿ï¾Ü¡§½d¥»¡¨¡A¨Ã¿é¤J¤@­ÓµêÀÀ¦WºÙ¡]¦b³oùاڭ̨ϥΡ§template¡¨¡^©Mª«²z¸ô®|¡]¥¦À³¸Ó¬OµêÀÀ¥Ø¿ýªº¤@­Ó¤l¥Ø¿ý¡A¦b³oùØ´N¬O "Template"¤l¥Ø¿ý¡^¡A³o¬O¨Ï¥Î½d¥»ªº»Ý­n¡C¦n¡A³æÀ»¡§½T©w¡¨¡C
²{¦b§Ú­Ì´ú¸Õ¤@¤U¬O§_¨C¼ËªF¦è³£³]¸m¥¿½T¤F¡A§Ú­Ì±N³q¹L¨Ï¥Î§A«þ¨©¨ì Template ¤l¥Ø¿ý¤¤¥h±o GetAllCustomers.xml¨Ó³X°Ý SQL Server¡C¥¦ªº¤º®e¦p¤U¡G
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="0">
SELECT *
FROM Customers
FOR XML AUTO
</sql:query>
</root>
¬°¤F´ú¸Õªº¥Øªº¡A¥´¶}§Aªº¬yÄý¾¹¡A¨Ã¿é¤J³o­ÓURL: http://localhost/northwind/template/getallcustomers.xml¡A§A´N·|¦b¬yÄý¾¹¤¤¬Ý¨ìXML§Î¦¡ªº Northwind Customers ªíªº¤º®e¤F¡C
<root xmlns:sql='urns:schemas-micorsoft-com:xml-sql">
<Customers CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" ContactName = "Maria Anders"
ContactTitle="Sales Represendative"
Address="Obere Str. 57" City="Berlin" PostalCode="12209"
Country="Germany" Phone="030-0074321"
Fax="999-999-9999" />
²{¦b§A´N¤w¸g°µ¦n¹B¦æ³o½g¤å³¹ªº SQLXML ¥Ü¨Òªº·Ç³Æ¤F¡C
******************************************************

_________________
#############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~­ì¨Ó©¯ºÖ¨º»ò²³æ!!

¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
#############################
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±z µLªk ¦b³o­Óª©­±µoªí¤å³¹
±z µLªk ¦b³o­Óª©­±¦^ÂФ峹
±z µLªk ¦b³o­Óª©­±½s¿è¤å³¹
±z µLªk ¦b³o­Óª©­±§R°£¤å³¹
±z µLªk ¦b³o­Óª©­±¶i¦æ§ë²¼
±z µLªk ¦b³o­Óª©­±ªþ¥[ÀÉ®×
±z µLªk ¦b³o­Óª©­±¤U¸üÀÉ®×


Powered by phpBB © 2001, 2005 phpBB Group
¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@