|
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¸ü.
|
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD |
µoªí¤H |
¤º®e |
joson
µù¥U®É¶¡: 2003-06-16 ¤å³¹: 4
²Ä 1 ¼Ó
|
µ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·Qn§ï¦¨¨Ï¥Î 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ªí¥Ü§An¿ï¥Îªº³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¨ýµÛ§An¦Û¤vºÞ²z³s±µ¤F)¡C¦bADOªº±¡ªp¤U¡ADataSource ¥²¶·¬O¤@Ó ADO RecordSet¡A¦Ó¥B¥¦ªº ActiveConnection ª«¥ó¥²¶·³Q³]¸m¬°¤@Ó¥´¶}ªº ADO Connection ª«¥ó(§A¤Sn¦Û¤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¤@Ó¿ù»~¡An»ò´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¤°»ò¿ù»~(·Ç³ÆWW«õ±¸§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»ò°µ¤@©wn¶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¨Æ¥ó«onµ¥¨ì©Ò¦³ªº±±¨î¶µ¤w¸gªì©l¤Æ¨Ã¤w¸g¸j©w¨ì¥¦Ìªº¸ê®Æ·½¤F¥H«á¤~·|³QIJµo¡Hn¬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§An¨Ï¥Î 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¼Ë¥un¤@¨B´N¥i¥H§¹¦¨¾Þ§@¤F¡C
• ¹ï©ó»·ºÝµø¹Ï¨Ó»¡¡A¤É¾E¤@Ó¤w¦³ªºÀ³¥Îµ{¦¡·|¬Û¹ï®e©ö¤@¨Ç¡G§A¥un§â¸ê®ÆÀô¹Ò¤¤¥»¦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¥un²³æªº§â¸ê®ÆÀô¹Ò¤¤ªº 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¡An°µªº¤u§@´N¦hªº¦h¡A¦]¬°¨C¼ËªF¦è§A³£¥²¶·¦Û¤v¼g¥N½X¡G«Ø¥ß©MÃö³¬³s±µ¡Bn°õ¦æªº 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¤@¥ó§An¾Þ¤ßªº¨Æ±¡¡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§Ú̱Nn¦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 |
|
¦^³»ºÝ |
|
|
|
|
±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§@
|