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(¤@)¡iÂà¶K¡j

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



µù¥U®É¶¡: 2003-06-16
¤å³¹: 4


²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤G ¤Q¤ë 21, 2003 7:49 am    ¤å³¹¥DÃD: CursorAdapter °_¨B(¤@)¡iÂà¶K¡j ¤Þ¨¥¦^ÂÐ

CursorAdapter °_¨B(¤@)

CursorAdapter Ãþ¬O VFP 8 ¤¤³Ì­«­nªº·s¥\¯à¤§¤@¡A¦]¬°¥¦´£¨Ñ¤F¤@ºØ²³æ©ö¥Î¡B¤¶­±²Î¤@ªº³X°Ý»·ºÝ¸ê®Æ·½¤è¦¡¡C¦b³o­Ó¤ëªº¤å³¹ùØ¡ADung Hennig ±N¦V§A®i¥Ü CursorAdapter ¤Î¥¦ªº¤u§@¤è¦¡¡C¤U­Ó¤ë¡A§Ú­Ì±N¦A¾Ç²ß¤@¨Ç°ª¯Åªº¥Îªk¡C
¥¿¤å
¶V¨Ó¶V¦hªº VFP µ{¦¡®v¶}©l§â¥L­Ìªº¸ê®ÆÀx¦s¨ì¶H SQL Server ©ÎªÌ Oracle ³o¼Ëªº VFP ªí¥H¥~ªº¸ê®Æ­Ü®w¤¤¥h¤F¡C¦³³\¦h­ì¦]¾É­P¤F³oºØ±¡ªp¡A¥]¬A VFP ªíªº¯Ü®z©Ê(¤£ºÞ¬O·Q¹³¤¤ªºÁÙ¬O½T¹ê¦p¦¹)¡B¦w¥þ©Ê¡B¸ê®Æ®wªº®e¶q¡B¥H¤Î³q¥Î©Êªº¼Ð·Çµ¥µ¥¡CMicroSoft ¤w¸g¦b¨C¤@­Óª©¥»¤¤³£¨Ï±o³X°Ý«D VFP ¸ê®Æ§ó¥[ªºÂ²³æ¡A¬°¤F¹ªÀy³oºØ­·®ð¡A¥¦¬Æ¦Ü¦b VFP 7 ¥úºÐ¤¤¦Û±a¤F MSDE(Microsoft Data Engine¡ASQL Server ªº¤@­Ó§K¶O¡B²¸Ëª©)¡C

¤£¹L¡A³X°Ý¤@­Ó«á»O¸ê®Æ®w±q¨Ó´N¤ñ¨Ï¥Î VFP ªí­n³Â·Ð¤@¨Ç¡A¦Ó§A¥i¥H¨Ï¥Îªº¾÷¨î«h¦h±oÀ~¤H¡G
• »·ºÝµø¹Ï¡A¥¦°ò©ó ODBC ³s±µ¡F
• SQL Passthrough (SPT) ¨ç¼Æ¡A¨Ò¦p SQLCONNECT()¡BSQLEXEC() ©M SQLDISCONNECT()¡A¥¦­Ì¤]°ò©ó ODBC ³s±µ¡F
• ActiveX Data Objects¡A²ºÙ ADO¡A¥¦´£¨Ñ¤F¤@­Ó¹ï¦UºØ¸ê®Æ®w¤ÞÀºªº OLE Provider ªº¤@­Ó­±¹ïª«¥ó³X°Ý¤è¦¡¡F
• XML¡A¥¦¬O¤@­Ó¦Ð¶q¯Åªº¡B¥­»OµLÃöªº¸ê®Æ¶Ç¿é¾÷¨î¡C
¦pªG§A´¿¸g¥Î³o¨Ç¾÷¨î¤W¤u§@¹L¡A¦³¤@¥ó¨Æ±¡§A¥i¯à¤w¸gª`·N¨ì¤F¡G¥¦­Ì¤¤ªº¨C¤@ºØ³£¦U¤£¬Û¦P¡C³o¼Ëªº¸Ü¡A§A´N¥²¶·¤@­Ó­Óªº¾Ç¹L¨Ó¡AÁÙ­n§â¤@­Ó¤w¦³ªºÀ³¥Îµ{¦¡±q¤@ºØ¾÷¨îÂà´«¨ì¥t¤@ºØ¾÷¨î¡A³o¥i¤£¬O¤@¥ó²³æªº¤u§@¡C

¥Ñ©ó¦³¤F¤@­Ó·sªº°ò¦Ãþ CursorAdapter¡A¦b VFP 8 ¤¤³X°Ý»·ºÝ¸ê®Æ­n¤ñ¹L¥hªºª©¥»¤¤Â²³æªº¦h¡C¥H§Ú¤§¨£¡ACursorAdapter ¬O VFP 8 ³Ì­«­nªº·s¥\¯à¤§¤@¡C§Ú»{¬°¥¦³Ì´Îªº¦a¤è¬O¡G
• ¨Ï¥Î ODBC¡BADO¡BXML Åܱo«D±`®e©ö¡A§Y®É§A¤£¼ô±x³o¨Ç§Þ³N¡C
• ¤£ºÞ§A¿ï¾Ü¤F­þºØ»·ºÝ¸ê®Æ·½¾÷¨î¡A¥¦³£´£¨Ñ¤@ºØ²Î¤@ªº³X°Ý¤¶­±¡C
• ±q¤@ºØ¾÷¨îÂà´«¨ì¥t¤@ºØ¾÷¨îÅܱo«D±`ªº»´ÃP¡C
³oùجO¤W­±ªº³Ì«á¤@­ÓÆ[ÂIªº¨Ò¤l¡C°²³]§A¦³¤@­Ó¨Ï¥Î CursorAdapter ³q¹L ODBC ¨Ó³X°Ý SQL Server ¸ê®ÆªºÀ³¥Îµ{¦¡¡A¥Ñ©ó¬Y¨Ç­ì¦]§A·Q­n§ï¦¨¨Ï¥Î ADO ¤F¡C¹ï©ó³oºØ±¡ªp¡A§A¥u»Ý­n§ï°Ê CursorAdapter ªº DataSourceType ÄÝ©Ê¡B¨Ã§ïÅܹï«á»O¸ê®Æ®wªº³s±µ¡A´N¥þ³¡§¹¦¨¤F¡C§AªºÀ³¥Îµ{¦¡¤¤ªº¨ä¥L³¡¤À¤£»Ý­nª¾¹D¤]¤£»Ý­nÃö¤ß³o¨Ç¨Æ±¡¡F¥¦­Ì¬Ý¨ìªº¥u¬O¦P¤@­Ó Cursor ¦Ó¤£ºÞ¨Ï¥Î¤F­þ¤@ºØ¾÷¨î¡C
ÄÝ©Ê
§Ú­Ì¥ý±q¬d¬Ý CursorAdapter ªºÄÝ©Ê¡B¨Æ¥ó©M¤èªk¶}©l¨Ó¾Ç²ß¥¦¡C³oùؤ£·|°Q½×©Ò¦³ªºÄÝ©Ê¡A¥u½Í¤@¤U³Ì­«­nªº¨º¨Ç¡C
DataSourceType
³o­ÓÄݩʬO³Ì­«­nªº¡G¥¦¨M©w¤F³o­ÓÃþªºªí²{¡A¥H¤Î­n¦b¨ä¥L¤@¨ÇÄݩʤ¤­n«ç»ò³]¸m¡C¥i¥Îªº¿ï¶µ¦³¡§Native¡¨¡X¡X·N«ä¬O¨Ï¥Î VFP ªí¡X¡X©ÎªÌ¬O "ODBC"¡B"ADO" ©Î "XML"¡Aªí¥Ü§A­n¿ï¥Îªº³X°Ý»·ºÝ¸ê®Æ·½ªº¤è¦¡¡C
DataSource
³o¬O³X°Ý¸ê®Æªº¤â¬q¡C·í DataSourceType ³Q³]¸m¦¨¡§Native¡¨©ÎªÌ¡§XML¡¨ªº®É­Ô¡AVFP·|©¿²¤³o­ÓÄݩʪº³]¸m¡C¹ï©óODBC¡A½Ð§â³o­ÓÄݩʳ]¸m¬°¤@­Ó¦³®Äªº ODBC ³s±µ±±¨î½X(³o·N¨ýµÛ§A­n¦Û¤vºÞ²z³s±µ¤F)¡C¦bADOªº±¡ªp¤U¡ADataSource ¥²¶·¬O¤@­Ó ADO RecordSet¡A¦Ó¥B¥¦ªº ActiveConnection ª«¥ó¥²¶·³Q³]¸m¬°¤@­Ó¥´¶}ªº ADO Connection ª«¥ó(§A¤S­n¦Û¤vºÞ²z³o¨Ç¤F)¡C
UseDEDataSource
¦pªG³o­ÓÄݩʳQ³]¸m¦¨¤F .T.(Àq»{¬O .F.)¡A§A¥i¥H¤£ºÞ¥¦ªº DataSourceType ©M DataSource ÄÝ©Ê¡A¦]¬° CursorAdapter ±N¨Ï¥Î DataEnvironment ªºÄݩʨӥN´À( VFP 8 µ¹ DataEnvironment ¤]¼W¥[¤F DataSourceType ©M DataSource ÄÝ©Ê)¡CÁ|¨Ò¨Ó»¡¡A·í§A·QÅý¦b¤@­Ó¸ê®ÆÀô¹Ò¤¤ªº©Ò¦³ CursorAdapters °«¨Ï¥Î¦P¤@­Ó ODBC ³s±µªº®É­Ô¡A´N¥i¥H§â¥¦³]¸m¬° .T.¡C
SelectCmd
°£¤F XML ªº±¡ªp¥H¥~¡A³o¬O¤@­Ó¥Î¨Ó¨ú±o¸ê®Æªº SQL Select ©R¥O¡C¦b XML ªº±¡ªp¤U¡A¥¦¥i¥H©ÎªÌ¬O¤@­Ó¯à°÷³QÂà´«¬°¤@­Ó Cursor ªº¦³®Ä XML ¦r¦ê(¨Ï¥Î¤º³¡ªº XMLTOCURSOR() ½Õ¥Î)¡A©ÎªÌ¬O¤@­Ó¯à°÷ªð¦^¤@­Ó¦³®Äªº XML ¦r¦êªº¹Bºâ¦¡¡C
CursorSchema
³o­ÓÄÝ©ÊùØ«O¦sªº¬O Cursor ªº¸ê®Æµ²ºc¡A®æ¦¡´N¹³§A¦b¥Î CREATE CURSOR ©R¥Oªº®É­Ô¥Îªº¨º¼Ë¡C³o¬O¤@­Ó¨Ò¤l¡GCUST_ID C(6), COMPANY C(30), CONTACT C(30), CITY C(25)¡C¾¨ºÞ¤£³]¸m³o­ÓÄݩʦÓÅý CursorAdapter ¦b¦Û¤v«Ø¥ß Cursor ¥h¨M©w³o­Óµ²ºc¤]¬O¥i¥Hªº¡A¤£¹L¦pªG§A¦Û¤v¿é¤Jªº¸Ü¡A¥¦·|¤u§@ªº§ó¦n¡C¦pªG CursorSchema ¬OªÅªº©ÎªÌ¤£¥¿½T¡A¨º»ò·í§A¥´¶}¤@­Óªí³æªº¸ê®ÆÀô¹Òªº®É­Ô¡A´N·|­n»ò¼u¥X¤@­Ó¿ù»~¡A­n»ò´N¤£¯à³q¹L±q CursorAdapter ¤¤©ì©ñÄæ¦ì¨ìªí³æ¤W¨Ó«Ø¥ß±±¨î¶µ¡C©¯¹Bªº¬O¡AVFP ¦Û±aªº CursorAdapter ¥Í¦¨¾¹¥i¥H¬°§A¶ñ¥R³o­ÓÄÝ©Ê¡C
AllowDelete¡BAllowInsert¡BAllowUpdate ©M SendUpdates
³o¨ÇÄݩʪº¹w³]­È¬O .T.¡A¥¦­Ì¨M©w¤F¬O§_¥i¥H§R°£¡B´¡¤J©M§ó·s©M§ï°Ê¬O§_­n³Qµo°e¨ì¸ê®Æ·½¡C
KeyFieldList¡B Tables¡B UpdatableFieldList¡B©M UpdateNameList
³o¨ÇÄݩʪº¥Î³~¸ò CURSORSETPROP() ¤¤¥Î¨ìªº¨º¨Ç°Ñ¼Æªº¥Î³~¬O¤@¼Ëªº¡A¦pªG§A·QÅý VFP ¦Û°Ê±N¹ï Cursor ªº§ï°Ê´£¥æ¨ì¸ê®Æ·½¡A³o¨ÇÄÝ©Ê´N¬O¥²¶·ªº¡C
• KeyFieldList ¬O¤@­Ó¥Î³r¸¹¤À¹jªºÄæ¦ì¦Cªí(¤£±a§O¦W)¡A³o¨ÇÄæ¦ì²Õ¦¨ Cursor ªº¥DÃöÁä¦r¡CTables ¬O¤@­Ó¥Î³r¸¹¤À¹jªºªí¦W¦Cªí¡C
• UpdatableFieldList ¬O¤@­Ó¥Î³r¸¹¤À¹jªº¥i¥H³Q§ó·sªºÄæ¦ì¦W¦Cªí(¤£±a§O¦W)¡C
• UpdateNameList ¬O¤@­Ó¥Î³r¸¹¤À¹jªº¦Cªí¡A¥¦¥Î¨ÓÅý Cursor ¤¤ªºÄæ¦ì¦W»P¦bªí¤¤ªºÄæ¦ì¦W¬Û¤Ç°t¡CUpdateNameList ªº®æ¦¡´N¹³ ³o¼Ë¡GCURSORFIELDNAME1 TABLE.FIELDNAME1¡BCURSORFIELDNAME2 TABLE.FIELDNAME2 µ¥µ¥¡Cª`·N¡G¦pªG UpdatableFieldList ¤£¥]§tªíªº¥DÁäÄæ¦ìªº¦WºÙ(¤ñ¦p»¡§A¤£·QÅý¥Î¤á¥i¥H§ó·s³o­ÓÄæ¦ì)¡A¦b UpdateNameList ÁÙ¬O¥²¶·­n¦³³o­ÓÄæ¦ì¡A§_«h´N¤£¯à§ó·s¡C
¡@
Cmd¡B*CmdDataSource ©M *CmdDataSourceType
¦pªG§A·Q«ü©wÅý VFP «ç¼Ë¥h§R°£¡B´¡¤J©M§ó·s¸ê®Æ·½¤¤ªº°O¿ý¡A§A¥i¥Hµ¹³o¨ÇÄݩʳ]¸m¬ÛÀ³ªº­È¡X¡Xª`·N¡A* ªº¦ì¸m¬O Delete¡BInsert ©ÎªÌ Update¡C
CursorFill(UseCursorSchema, NoData, Options, Source)
³o­Ó¤èªk«Ø¥ß Cursor¡A¨Ã¥Î¨Ó¦Û¸ê®Æ·½ªº¸ê®Æ¶ñ¥R³o­Ó Cursor(§A¤]¥i¥Hµ¹ NoData °Ñ¼Æ¶Ç»¼¤@­Ó .T.¥H«Ø¥ß¤@­ÓªÅªº Cursor)¡Aµ¹²Ä¤@­Ó°Ñ¼Æ¶Ç»¼ .T. ¨Ó¨Ï¥Î©w¸q¦b CursorSchema ¤¤ªº´å¼Ð¸ê®Æµ²ºc¡A©ÎªÌ¶Ç»¼ .F. ¨Ó®Ú¾Ú¸ê®Æ·½¤¤ªºµ²ºc«Ø¥ß¤@­Ó¬ÛÀ³ªºµ²ºc¡CMULTILOCKS ¥²¶·³Q³]¸m¦¨ ON¡A§_«h³o­Ó¤èªk±N°õ¦æ¥¢±Ñ¡C¦pªG CursorFill ¥Ñ©ó¬Y¨Ç­ì¦]°õ¦æ¥¢±Ñ¡A¥¦¤£·|µo¥Í¤@­Ó¿ù»~¦Ó¬Oªð¦^ .F.¡A¤£¹L§AÁÙ¬O¥i¥H¥Î AERROR() ¨ÓÀˬdµo¥Í¤F¤°»ò¿ù»~(·Ç³Æ­W­W«õ±¸§a¡I³q±`§A±o¨ìªº¿ù»~¸ê°T³£¤£¨¬¥H§i¶D§A¨s³º°ÝÃD¦b­þ¨½)¡C
CursorRefresh()
³o­Ó¤èªkÃþ¦ü©ó Requery() ¨ç¼Æ¡G¥¦¨ê·s Cursor ªº¤º®e¡C
Before*() ©M After*()
CursorAdapter ªº´X¥G¨C­Ó¤èªk©M¨Æ¥ó³£¦³¤@®M before ©M After ¶}ÀYªº¡§hook¡¨¨Æ¥ó(hook³o­Óµü¤¤¤å¨S¦³«Ü¦nªº¹ïÀ³¡A«j±j§â¥¦Â½Ä¶¦¨¡§±¾鈎¡¨ÁÙ¤£¦p¤£Â½)¡A³o¼Ë§A´N¥i¥H¦Û©w¸q CursorAdapter ªº¦æ¬°¯S©Ê¤F¡C¨Ò¦p¡A§A¥i¥H¦b AfterCursorFill ¤¤¬° Cursor «Ø¥ß¯Á¤Þ¡C¦b Before ¨t¦C¨Æ¥ó¤¤§A¥i¥Hªð¦^¤@­Ó .F. ¨Ó¨¾¤îIJµo³Q hook ªº¨Æ¥óµo¥Í(Ãþ¦ü©ó¸ê®Æ®w¨Æ¥ó)¡C
¥Ü¨Ò
³oùجO¤@­Ó¥Ü¨Ò¨Ó¦Ûªþ±aªº¥Ü¨ÒÀÉ (CursorAdapterExample.prg)¡A¥¦¥Î©ó±q SQL Server ¦Û±aªº Northwind ¸ê®Æ®wªº Customers ªí¤¤¨ú±o¤Ú¦è«È¤áªº¬Y´X­ÓÄæ¦ì¸ê®Æ¡C²£¥Íªº Cursor ¬O¥i§ó·sªº¡A©Ò¥H¦pªG§A¹ï Cursor ¤¤ªº¸ê®Æ°µ¤F¬Y¨Ç§ï°Ê¡AµM«á¦A¦¸¹B¦æµ{¦¡¡A§A·|¬Ý¨ì­è¤~©Ò§@ªº§ï°Ê¤w¸g³Q«O¦s¦b«á»O¸ê®Æ®w¤¤¤F¡C

local lcConnString, ;
loCursor as CursorAdapter, ;
laErrors[1] lcConnString = 'driver=SQL Server;server=(local);' + ;
'database=Northwind;uid=sa;pwd=;trusted_connection=no'
* §â³oùتº±K½X§ï¦¨§A¦Û¤vªº¸ê®Æ®w¤¤±K½X

loCursor = createobject('CursorAdapter')
with loCursor
.Alias = 'Customers'
.DataSourceType = 'ODBC'
.DataSource = sqlstringconnect(lcConnString)
.SelectCmd = "select CUSTOMERID, " + ;
"COMPANYNAME, CONTACTNAME from CUSTOMERS " + ;
"where COUNTRY = 'Brazil'"
.KeyFieldList = 'CUSTOMERID'
.Tables = 'CUSTOMERS'
.UpdatableFieldList = 'CUSTOMERID, COMPANYNAME, ' + ;
'CONTACTNAME'
.UpdateNameList = ;
'CUSTOMERID CUSTOMERS.CUSTOMERID, ' + ;
'COMPANYNAME CUSTOMERS.COMPANYNAME, ' + ;
'CONTACTNAME CUSTOMERS.CONTACTNAME'
if .CursorFill()
browse
else
aerror(laErrors)
messagebox(laErrors[2])
endif
.CursorFill()
endwith
¸ê®ÆÀô¹Ò©Mªí³æªº¼W±j
¬°¤F¤ä´©·sªº CursorAdapter Ãþ¡A¹ïªí³æ©M¸ê®ÆÀô¹ÒÃþ¤]°µ¤F¤@¨Ç¼W±j¡C

­º¥ý¡A¶H§Ú«e­±´£¨ì¹Lªº¨º¼Ë¡ADataEnvironment Ãþ²{¦b¦³¤F DataSource ©M DataSourceType ÄÝ©Ê¡C¤£¹L¥¦¦Û¤v¨Ã¤£¨Ï¥Î³o¨ÇÄÝ©Ê¡A¦Ó¬Oµ¹¨º¨Ç¦b³o­Ó¸ê®ÆÀô¹Ò¤¤ªº¨º¨Ç UseDEDataSource ³Q³]¸m¦¨¤F .T. ªº CursorAdapter ¨Ï¥Îªº¡C¨ä¦¸¡A²{¦b§A¥i¥H¨Ï¥ÎÃþ³]­p¾¹¨Óµøı¤Æªº«Ø¥ß DataEnvironment ªº¤lÃþ¤F(«z¡I)¡C

¦Ó¹ï©óªí³æ¡A§A¥i¥H³q¹L³]¸m·sªº DEClass ©M DEClassLibrary Äݩʨӫü©w¨Ï¥Î¤@­Ó DataEnvironment ªº¤lÃþ¤F¡C¤£¹L³o»ò°µ¤@©w­n¶X¦­¡A¦]¬°¦b³o»ò·F¤F¥H«á¡A­ì¨Óªº¸ê®ÆÀô¹Ò¤¤©Ò¦³¤w¸g°µ¦nªºªF¦è(Cursor¡B¥N½Xµ¥µ¥)³£·|¥á¥¢¡AÁÙ¦n¨t²Î·|¥ýĵ§i§A¡Cªí³æªº¤@­Ó«Ü»Åªº·s¥\¯à¬O¥¦ªº BindControls ÄÝ©Ê¡X¡X§â³o­ÓÄݩʳ]¸m¬°.F.´N¥i¥HÅýªí³æ¦b INIT ªº®É­Ô¤£¹ï±±¨î¶µ¶i¦æ¸ê®Æ¸j©w¡A¦Ó¥u¦³·í BindControls ³Q³]¸m¬° .T. ªº®É­Ô¤~·|³o¼Ë¡C³o­Ó¥\¯à¦n¦b­þ¨½©O¡H§A´¿¸g¦h¤Ö¦¸¶A©G¹L³o¼Ëªº±¡ªp¡G°Ñ¼Æ¥²¶·³Q¶Ç»¼µ¹ªí³æªºINIT¨Æ¥ó¡A¦ÓINIT¨Æ¥ó«o­nµ¥¨ì©Ò¦³ªº±±¨î¶µ¤w¸gªì©l¤Æ¨Ã¤w¸g¸j©w¨ì¥¦­Ìªº¸ê®Æ·½¤F¥H«á¤~·|³QIJµo¡H­n¬O§A·Q¦V¸Óªí³æ¶Ç»¼¤@­Ó°Ñ¼Æ¨Ó§i¶Dªí³æ¥´¶}­þ­Óªí©ÎªÌ¨ä¥L·|¼vÅT ControlSources ªº¨Æ±¡ªº®É­Ô¸Ó«ç»ò¿ì¡H³o­Ó·sªºÄÝ©ÊÅý³o¨Ç¨Æ±¡Åܱo¶H¥´­Ó½OºÎ¨º»ò®e©ö¡C
ÀuÂI
¦³¤j¶qªº²z¥Ñ¤ä«ù§Ú­Ì¨Ï¥Î CursorAdapters ¨Ó¥N´À»·ºÝµø¹Ï¡BSPT¡BADO ©ÎªÌ XML¡G
• ¨C¤@ºØ¾÷¨î³£¦³¤@ºØ¤£¦Pªº¤¶­±¡C¹ï©ó»·ºÝµø¹Ï¡A§A¥Î USE ©R¥O¨Ó¥´¶}¥¦­Ì¡C¹ï©óSPT¡A§A­n¨Ï¥Î SQLCONNECT() ©M SQLEXEC() ¨Ó«Ø¥ß¤@­Ó Cursor¡C¹ï©ó ADO¡A§A¥²¶·¥ý«Ø¥ß ADO ªº Connection ª«¥ó©M Recordset ª«¥ó(®Ú¾Ú§A¨ú±o¸ê®Æ¤è¦¡ªº¤£¦P¡A¤]³\ÁÙ¥i¯à»Ý­n¤@­Ó Command ª«¥ó)ªº¹ê¨Ò¡A¨Ã½Õ¥Î¥¦­Ìªº Open ¤èªk¡C¹ï©ó XML¡A§A­º¥ý¥²¶·±q¤°»ò¦a¤èÀò±o¤@­Ó XML ¦r¦ê(¨Ò¦p¦b N ¼hÀ³¥Î¤¤³q¹L¤@­Ó COM ³¡¥ó¡A©ÎªÌ¦b SQL Server ¤¤³q¹L SQLXML)¡AµM«á¨Ï¥Î XMLTOCURSOR() ¨Ó§â³o­Ó¦r¦êÂà´«¦¨¤@­Ó VFP ªº Cursor¡C½s¼g¹ï«á»O¸ê®Æ·½¶i¦æ§ó·sªº¥N½X¤]¦U¤£¬Û¦P¡C©Ò¥H¡A·í§A±q¤@ºØ¾÷¨îÂà´«¨ì¥t¤@ºØ¾÷¨îªº®É­Ô¡A´N¥²¶·­n¥h¾Ç¤@ºØ·sªº§Þ³N¡AÁÙ¦³§A¥i¯à»Ý­n­«¼gªº¤j¶q¤w¦³ªº¥N½X¡C

¤£ºÞ§A¨Ï¥Î­þºØ¾÷¨î¨Ó¨ú±o¸ê®Æ¡ACursorAdapters ³£¨Ï¥Î¦P¤@­Ó²Î¤@ªº¤¶­±¡C³q¹L³]¸m¸Óª«¥óªº¤@¨ÇÄÝ©Ê¡AµM«á½Õ¥Î¥¦ªº CursorFill ¤èªk¨Ó¨ú±o¸ê®Æ¡A¹ï³o­Ó Cursor ¾Þ§@®É´N¹³¦b¾Þ§@¤@­Ó´¶³qªº VFP Cursor ¤@¼Ë¡AµM«á½Õ¥Î TABLEUPDATE() (©ÎªÌÅý VFP ¦Û°Ê¥h³B²z¥¦)¨Ó±N§ó·s´£¥æ¨ì«á»O¸ê®Æ·½¡C
• ¦b¹ê»Ú¶}µoªº®É­Ô¡A§A¸g±`·|»Ý­n±q©R¥Oµøµ¡¤¤¥´¶}¤@­Ó Cursor ¨Ó¬yÄý¥¦ªº¤º®e¡C¹ï©ó»·ºÝµø¹Ï¡A³o»ò°µ¬O«Ü²³æªº¡A¦ý¬O¹ï©ó SPT¡BADO ©M XML¡A´N¥i¯à­nªá¤W«Ü¦h¤O®ð¤F¡C

¦Ó¥´¶}¥Ñ¤@­Ó CursorAdapter ªº¤lÃþ²£¥Íªº Cursor ´X¥G´N¹³¥´¶}¤@­Ó»·ºÝµø¹Ï¨º»ò®e©ö¡G§A¥u»Ý­n«Ø¥ß³o­Ó¤lÃþªº¹ê¨Ò¡AµM«á½Õ¥Î¥¦ªº CursorFill ¤èªk´N¦æ¤F¡C§A¬Æ¦Ü¥i¥Hª½±µ¦b¥¦ªº INIT ¤èªk¤¤¶i¦æ CursorFill¡A³o¼Ë¥u­n¤@¨B´N¥i¥H§¹¦¨¾Þ§@¤F¡C
• ¹ï©ó»·ºÝµø¹Ï¨Ó»¡¡A¤É¾E¤@­Ó¤w¦³ªºÀ³¥Îµ{¦¡·|¬Û¹ï®e©ö¤@¨Ç¡G§A¥u­n§â¸ê®ÆÀô¹Ò¤¤¥»¦aªí©Îµø¹ÏªºªF¦è´«¦¨¦P¦Wªº»·µ{µø¹Ï´N¦æ¤F¡C¦ý¬O¹ï©óSPT¡BADO ©Î XML¡A§A¥i¯à´N¥²¶·­n¥þ³¡­«¼g¾ã­Ó¸ê®Æ³X°Ý¤è®×¤F¡C

¦Ó¥Î CursorAdapters ¨Ó¤É¾E¤@­ÓÀ³¥Îµ{¦¡´N·|¶H¥Î »·ºÝµø¹Ï¨Ó¤É¾E¤@¼Ë»´ÃP¡X¡X¥u­n²³æªº§â¸ê®ÆÀô¹Ò¤¤ªº Cursor ª«¥ó´À´«¦¨ CursorAdapters ª«¥ó´N¦æ¤F¡C
• ¦bªí³æ©M³øªí³]­p¾¹¤¤¨Ï¥Î»·ºÝµø¹Ï¨Ó¤u§@¬O«Ü®e©öªº¡C§A¥i¥Hµ¹¸ê®ÆÀô¹Ò²K¥[¤@­Ó»·ºÝµø¹Ï¡AµM«á´N¯à§Q¥Î¨ì¸ê®ÆÀô¹Ò´£¨Ñªºµøı¤Æ³]­pªºÀu¶Õ¤F¡G©ì©ñÄæ¦ì¨Ó¦Û°Ê«Ø¥ß±±¨î¶µ¡B³q¹L¦bÄݩʵøµ¡¤¤ªº¤U©Ô¦¡¦C¥Ü¤è¶ô¤¤¿ï¾Ü¨Ó»´ÃPªº±N±±¨î¶µ¸j©w¨ì¤@­ÓÄæ¦ìµ¥µ¥¡CSPT¡BADO¡BXML ´N¤£¤ä´©µøı¤Æ³]­p¤è¦¡¤F¡C

CursorAdapters »P»·ºÝµø¹Ï¤@¼Ë¯à°÷¨É¨ü¨ì¦b¸ê®ÆÀô¹Ò¤¤µøı¤Æ³]­pªº¨º¨ÇÀuÂI¡C
• ¥Îµø¹Ï³]­p¾¹¥i¥H«Ü®e©öªº«Ø¥ß»·ºÝµø¹Ï¡C¾¨ºÞ¹L¥h¥¦¦³µÛ³\¦h­­¨î¡A¤×¨ä¬O¦b³B²z¦³¨â­Ó¥H¤Wªºªí¬Û¤¬³s±µªºµø¹Ïªº®É­Ô¡A¥i²{¦b¡AVFP 8 ¤w¸g­×¥¿³o¨Ç°ÝÃD¤¤ªº¤j¦h¼Æ¡A¨Ã¥B²K¥[¤F³\¦h·s¥\¯à¡A¨Ò¦pÂù¦V½s¿è¡G§A¥i¥H¦b SQL µøµ¡¤¤­×§ï¥N½X¡AµM«á´N¯à¬Ý¨ì³o¨Ç§ï°Ê³Q¤Ï¬M¨ìµø¹Ï³]­p¾¹ªºµøı¤Æ³¡¤À¤¤¤F¡C¦Ó¹ï©ó SPT¡BADO ©M XML¡A­n°µªº¤u§@´N¦hªº¦h¡A¦]¬°¨C¼ËªF¦è§A³£¥²¶·¦Û¤v¼g¥N½X¡G«Ø¥ß©MÃö³¬³s±µ¡B­n°õ¦æªº SQL Select »y¥yµ¥µ¥¡C

VFP 8 ¥]§t¤F¤@­Ó CursorAdapters ¥Í¦¨¾¹¡A¥Î¤F¥¦¡A¥i¥H¥u»Ý­n«Ü¤Öªº¤u§@´N¥i¥H³]¸m¦n¨º¨Ç¹ï©ó¨ú±o©M§ó·s¸ê®Æ¨Ó»¡¬Û·í­«­nªºÄÝ©Ê¡C¥¦¬Æ¦ÜÁÙ¥]§t¤F¤@­Ó SelectCmd ¥Í¦¨¾¹¡A³o­Ó¥Í¦¨¾¹ªºµøı¤Æµ{«×´N¹³¬Oµø¹Ï³]­p¾¹¤@¼Ë¡A¥¦Åý§A¥i¥H³q¹L¨Ï¥Î¤@­Ó¡§mover¡¨±±¨î¶µ¨Ó¿ï¾ÜÀ³¸Ó±q»·ºÝªí¤¤¨ú±o¨º¨ÇÄæ¦ì¡C
• ±N»·ºÝµø¹Ï©MADO °O¿ý¶°¤¤ªº§ó·s´£¥æ¨ì«á»O¸ê®Æ®w¬O¬Û·í²³æªº¡C°²©wµø¹ÏªºÄݩʤw¸g³Q³]¸m¥¿½T¤F¡A¨º»ò§A¥u»Ý­n½Õ¥Î TABLEUPDATE() ´N¥i¥H¤F¡C¦b ADO ªº±¡ªp¤U¡A«h½Õ¥Î RecordSet.Update() ©ÎªÌ UpdateBatch()¡C¹ï©ó SPT ©M XML¡A§A´N¥²¶·¤â¤uªº°µ¤j¶q¤u§@¨Ó§â§ó·s´£¥æ¨ì«á»O¡C

¶H§Ú­Ì«e­±¬Ý¨ìªº¨º¼Ë¡A¥Î CursorAdapter ¨Ó´£¥æ§ó·s¥u»Ý­n³]¸m´X­ÓÄÝ©Ê¡AµM«á´N¥i¥H¥þ³¡¥æµ¹ VFP ¥h°µ¨ä¥L©Ò¦³ªº¤u§@¡A©ÎªÌ§A¤]¥i¥H«Ü¤è«Kªº³q¹L«ü©w«ç»ò§R°£¡B´¡¤J©M§ó·s¨ÓÀò±o§ó¤jªºÆF¬¡©Ê¡C
• ¥Ñ©ó»·ºÝµø¹Ï©M SPT «Ø¥ßªºµ²ªG¶°¬O VFP ªº Cursor¡A©Ò¥H§A¥i¥H¦bVFP¤¤ªº¥ô¦ó¦a¤è¨Ï¥Î¥¦­Ì¡Gªí®æ¡B³øªí¡B¥Î Scan ¨Ó¹M¾äµ¥µ¥¡C¦Ó¥t¤@¤è­±ªº ADO ©M XML¡A¦b¨Ï¥Î¤§«e´N¥²¶·¥ý§â¥¦­ÌÂà´«¦¨ Cursor¡A³o·|µ¹§AªºÀ³¥Îµ{¦¡¼W¥[ÃB¥~ªº½ÆÂø©Ê©M³B²z¥¦­Ìªº®É¶¡¡C

CursorAdapter ªºµ²ªG¶°¬O¤@­Ó VFP Cursor¡A©Ò¥H¥¦¦³µÛ»P»·ºÝµø¹Ï©MSPT¦P¼ËªºÀu¶Õ¡C¦Ó§ó´Îªº¬O¡A§Y¨Ï¸ê®Æ·½¬O ADO ©M XML §A¤]¯à±o¨ì¤@­Ó VFP ªº Cursor¡A¦]¬° CursorAdapter ·|¦Û°Ê¬°§A³B²z¦nÂà´«ªº¨Æ±¡¨Ã¬°§A§Î¦¨¤@­Ó Cursor¡C
• ¥Ñ©ó¤@­Ó»·ºÝµø¹Ïªº SQL Select »y¥y¬O¹w¥ý©w¸q¦nªº¡A©Ò¥H§AµLªk°ÊºA¥h­×§ï¥¦¡C¾¨ºÞ¹ï©ó¨º¨Ç¨å«¬ªº¸ê®Æµn¿ýªí³æ¨Ó»¡³o¤w¸g¨¬°÷¤F¡A¦ý¬O¹ï©ó¬d¸ß©M³øªí¨Ó»¡«h¤£µM¡C¥i¯à§A¥²¶·­n«Ø¥ß¦n´X­Ó±q¦P¤@­Óªí¤¤¨ú±o¸ê®Æªºµø¹Ï¡A¨C¤@­Ó·|¿ï¾Ü¤£¦PªºÄæ¦ì¡B¨Ï¥Î¤£¦Pªº WHERE ¤l¥yµ²ºcµ¥µ¥¡C¹ï©ó SPT¡BADO ©Î XML ¨Ó»¡¡A³o¤£¬O¤@­Ó°ÝÃD¡C

CursorAdapters ¤£·|¨ü³o­Ó°ÝÃDªº§é¿i¡X¡X§A¥i¥H«Ü»´ÃPªº³q¹L§ï°Ê SelectCmd ÄݩʨӧïÅܨú±o¤°»ò¸ê®Æ¥H¤Î«ç»ò¨ú±o¸ê®Æ¡C
• §A¤£¯à±q¤@­Ó»·ºÝµø¹Ï¤¤½Õ¥Î¦sÀx¹Lµ{¡A©Ò¥H»·ºÝµø¹Ï»Ý­nª½±µ³X°Ý«á»Oªºªí¡C¹ï©ó§AªºÀ³¥Îµ{¦¡ªº¸ê®Æ®wºÞ²z­û¨Ó»¡¡A³o¥i¯à¬O¤@­Ó°ÝÃD¡X¡X¬Y¨Ç¸ê®Æ®wºÞ²z­û»{¬°¡A°ò©ó¦w¥þªº©ÎªÌ¤°»ò¨ä¥L­ì¦]¡A©Ò¦³ªº¸ê®Æ³X°ÝÀ³¸Ó¥u³q¹L¦sÀx¹Lµ{¨Ó¶i¦æ¡C¦Ó¥B¡A¥Ñ©ó¦sÀx¹Lµ{¬O¦b«á»O¹w½sĶªº¡A©Ò¥H¥¦°õ¦æ°_¨Ó³q±`­n¤ñ SQL Select »y¥y§Ö±o¦h¡C¦b SPT¡BADO ©M XML ªº±¡ªp¤U¡A§A¥i¥H®Ú¾Ú»Ý­n¨Ó½Õ¥Î¦sÀx¹Lµ{¡C

³q¹L²³æªº³]¸m SelectCmd ÄÝ©Ê¡ACursorAdapters ¤]¥i¥H¨Ï¥Î¦sÀx¹Lµ{¡C
• »·ºÝµø¹Ï«O¦s¦b¤@­Ó¸ê®Æ®w®e¾¹¤¤¡A©Ò¥HÁÙ¦³¤@®M§A¥²¶·ºûÅ@©M¦w¸Ë¨ì«È¤á¨t²Î¤WªºÀÉ¡C¦¹¥~¡A·í§A¥´¶}¤@­Óµø¹Ïªº®É­Ô¡AVFP ·|¸Õ¹Ï¥hÂê©w¦b DBC ¤¤ªºµø¹Ïªº°O¿ý¡AÁöµM³o¥u»Ý­n«Üµuªº®É¶¡¡C¦b¤@­Ó¦£¸Lªº¨t²Î¤¤¡A·í´X­Ó¥Î¤á¸Õ¹Ï¦P®É¥´¶}¤@­Óªí³æªº®É­Ô¡A³o¥i¯à·|³y¦¨½Ä¬ð¡C¾¨ºÞ¤]¦³¤@¨ÇÅܳqªº³B²z¿ìªk(§âDBC«þ¨©¨ì¥»¦a¤u§@¯¸¤W¡B©ÎªÌ¨Ï¥Î¦b VFP 7 ¥H¤Wª©¥»¤¤ªº SET REPROCESS SYSTEM ¨Ó´î¤ÖÂê©wªº®É¶¡)¡A³oÁ`¬O¤@¥ó§A­n¾Þ¤ßªº¨Æ±¡¡CÁÙ¦³¤@­Ó°ÝÃD¬O¡G¦pªG§A¨Ï¥Î¤@­Ó SELECT * ªºµø¹Ï¨Ó±q¤@­Ó«ü©wªºªí¨ú±o¸ê®Æ¡B¦Ó¨º­Óªíªºµ²ºc¤S¦b«á»O³Q§ï°Ê¹L¤F¡A¨º»ò³o­Óµø¹Ï´N·|ÅܱoµL®Ä¦Ó¥B¥²¶·­n­««Ø¤~¯à¸Ñ¨M¡C¹ï©ó SPT¡BADO ©M XML ¨Ó»¡¡A¥Ñ©ó¥¦­Ì»P DBC µLÃö¡A¦]¦¹¥¦­Ì³£¨S¦³³o¨Ç°ÝÃD¡C

¦]¬°¥¦­Ì³£¤£¦b DBC ùØ­±¡A©Ò¥H CursorAdapters ´N¤]¨S³o¨Ç°ÝÃD¤F¡C
• ¥Ñ©ó»·ºÝµø¹Ï©M SPT ¬O³q¹L ODBC ¨Ó¤u§@ªº¡A¦]¦¹¥¦­Ì¥u¯à¥Î©óª½±µ¸ê®Æ³s±µªº¡§«È¤á¡X¦øªA¾¹¡¨¼Ò¦¡¡C¦ÓADO©MXML¦³µÛ¦b¤@­Ó N¡Ð¼hÀ³¥Îµ{¦¡¤¤ªº¦h­Ó¼h¤§¶¡¶Ç»¼¸ê®Æªº¾÷¨î¥i¨Ñ¿ï¾Ü¡C
¥Ñ©ó CursorAdapters ¥i¥H«Ø¥ß¨Ó¦Û ADO ©ÎªÌ XML ¸ê®Æªº VFP Cursor¡A¦]¦¹¥¦¹ï©ó¦b¤@­Ó N-¼hÀ³¥Îµ{¦¡¤¤³Q¥Î©ó¥Î¤á¤¶­±¼h¨Ó»¡¬O²z·Qªº¡C
Á`µ²

§Ú»{¬° CursorAdapters ¬O VFP 8 ¤¤³Ì­«­n¡B³Ì¥O¤H¿³¾Äªº¼W±j¤§¤@¡A¦]¬°¥¦´£¨Ñ¤F¤@­Ó¹ï©ó»·ºÝ¸ê®Æ·½ªº²Î¤@¦Ó¤S®e©ö¨Ï¥Îªº¤¶­±¡A¦¹¥~¡A¶H§Ú­Ì±N­n¦b¥H«áªº¤å³¹¤¤Á¿­zªº¨º¼Ë¡A¥¦ÁÙ¤¹³\§Ú­Ì«Ø¥ß¥i­«¥Îªº¸ê®ÆÃþ¡C¤U­Ó¤ë§Ú­Ì±N±´°Q¤@¤U³X°Ý¥»¦a¸ê®Æ©ÎªÌ¨Ï¥Î ODBC¡BADO©MXML¨Ó³X°Ý»·ºÝ¸ê®Æªº²Ó¸`¡C¦A¤U­Ó¤ë¡A§Ú­Ì±N±´°Q¤@¤U«Ø¥ß¥i­«¥Î¸ê®ÆÃþ¡B¥H¤Î«ç¼Ë¦b³øªí¤¤¨Ï¥Î CursorAdapters¡C

¡iĶªÌª`¡j
ªþ±aªº¥Ü¨ÒÀɬO¤@­ÓPRG¡A¹ê¦b¤Ó²³æ¤F¡A§Ú´Nª½±µ§â¤º®e¶K¦b³oùؤF¡C

local lcConnString, ;
loCursor as CursorAdapter, ;
laErrors[1]
lcConnString = 'driver=SQL Server;server=(local);database=Northwind;' + ;
'uid=sa;pwd=;trusted_connection=no'
* change password to appropriate value for your database
loCursor = createobject('CursorAdapter')
with loCursor
.Alias = 'Customers'
.DataSourceType = 'ODBC'
.DataSource = sqlstringconnect(lcConnString)
.SelectCmd = "select CUSTOMERID, COMPANYNAME, CONTACTNAME " + ;
"from CUSTOMERS where COUNTRY = 'Brazil'"
.KeyFieldList = 'CUSTOMERID'
.Tables = 'CUSTOMERS'
.UpdatableFieldList = 'CUSTOMERID, COMPANYNAME, CONTACTNAME'
.UpdateNameList = 'CUSTOMERID CUSTOMERS.CUSTOMERID, ' + ;
'COMPANYNAME CUSTOMERS.COMPANYNAME, CONTACTNAME CUSTOMERS.CONTACTNAME'
if .CursorFill()
browse
else
aerror(laErrors)
messagebox(laErrors[2])
endif .CursorFill()
endwith
¦^³»ºÝ
À˵ø·|­û­Ó¤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§@