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 3(Âà¶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 1:20 pm    ¤å³¹¥DÃD: CursorAdapter °_¨B 3(Âà¶K) ¤Þ¨¥¦^ÂÐ

CursorAdapter °_¨B 3[Âà©«]
CursorAdapter °_¨B ¤§ ¤T¡G¥i­«¥Î¸ê®ÆÃþ
§@ªÌ¡GDoug Hennig
ĶªÌ¡Gfbilo
VFP ªºµ{¦¡®v­Ì·Q­n¤@­Ó¥i­«¥Îªº¸ê®ÆÃþ¤w¸g«Ü¤[¤F¡C¾¨ºÞ¦b¹L¥hªºª©¥»¤¤¤]¦³³\¦h¸Ñ¨M³o­Ó°ÝÃDªº¿ìªk¡A¤£¹LÁ`¬O¦³ÂI¬ü¤¤¤£¨¬¡C²{¦b¦b VFP 8ùØ¡A§Ú­Ì¦³¤F¯u¥¿ªº¥i­«¥Î¸ê®ÆÃþ¡C³o­Ó¤ë¡ADoug ¬°§Ú­Ìºt¥Ü¤F«ç¼Ë³q¹L«Ø¥ß CursorAdapter ©M DataEnvironment ªº¤lÃþ¨Ó«Ø¥ß¥i­«¥Îªº¸ê®ÆÃþ¡B¥H¤Î«ç¼Ë¦bªí³æ©M³øªí¤¤¨Ï¥Î¥¦­Ì¡C
¥¿¤å
¡Ñ¡Ñ
¦b¹L¥hªº¨â´ÁÂø»x¤¤¡A§Ú­Ì°Q½×¤F¦b VFP 8 ¤¤·s¼Wªº CursorAdapter °ò¦Ãþ¡C§Ú­Ó¤HªºÆ[ÂI¬O¡A³o¬O VFP 8 ¤¤³Ì­«­nªº§ï°Ê¤§¤@¡A¦]¬°¥¦¦V§Ú­Ì´£¨Ñ¤F¤@­Óª«¥óSQL Server³o¼Ëªº«DVFP¸ê®Æ·½ªºÂ²³æ©ö¥Î¡B²Î¤@ªº¤¶­±¡C¦¹¥~¡A¦p§A¥»¤ë©Ò¯à¨£¨ìªº¨º¼Ë¡A¥¦­ÌÁ٧Φ¨¤F¥i­«¥Î¸ê®ÆÃþªº°ò¦¡C
¦bÁ¿­z¥i­«¥Î¸ê®ÆÃþ¤§«e¡AÅý§Ú­Ì¥ý¨Ó¬Ý¤@¤U§Ú«Ø¥ßªº¤@¨Ç CursorAdapter ©M DataEnvironment ªº¤lÃþ¡A§Úµ¹¥¦­Ì¼W¥[¤F¤@¨ÇÃB¥~ªº¥\¯à¡A¥¦­Ì±N¦¨¬°§Ú­Ìªº¥i­«¥Î¸ê®ÆÃþªº°_ÂI¡C
SFCursorAdapter
***************
SFCursorAdapter (¦bªþ¥ó SFDataClasses.vcx ¤¤) ¬O CursorAdapter ªº¤@­Ó¤lÃþ¡A¥¦¾Ö¦³¤@¨ÇÃB¥~¼W¥[ªº¥\¯à¡A¦p¤U¡G
¡° ¥¦¥i¥H¦Û°Ê³B²z°Ñ¼Æ¤Æ¬d¸ß¡G§A¥i¥HÀRºA¡]¤@­Ó±`¶q¡^¤]¥i¥H°ÊºA¡]¤@­Ó¹Bºâ¦¡¡A¨Ò¦p¡§¡×Thisform.txtName.value¡¨¡A·í Cursor ³Q¥´¶}©ÎªÌ¨ê·sªº®É­Ô¡A³o­Ó¹Bºâ¦¡·|³Q¹Bºâ¡^ªº©w¸q¤@­Ó°Ñ¼Æ­È¡C
¡° ¥¦¥i¥H¦b Cursor ³Q¥´¶}¥H«á¦Û°Ê¦b¸Ó Cursor ¤W«Ø¥ß¯Á¤Þ¡C
¡° ¹ï©ó ADO¡A¥¦ÁÙ·|°õ¦æ¤@¨Ç¯S®íªº¤u§@¡A¨Ò¦p§â DataSource Äݩʳ]¸m¬°¤@­Ó ADO RecordSet¡A§â³o­Ó RecordSet ªº ActiveConnection Äݩʳ]¸m¬°¤@­Ó ADO Connection ª«¥ó¡A·í¥Î¨ì¤@­Ó°Ñ¼Æ¤Æ¬d¸ßªº®É­Ô¡A¥¦ÁÙ·|«Ø¥ß¤@­Ó ADO Command ª«¥ó¨Ã§â³o­Óª«¥ó¶Ç»¼µ¹ CursorFill ¤èªk¡C
¡° ¥¦´£¨Ñ¤F²³æªº¿ù»~³B²z¡]cErrorMessage ÄÝ©ÊùØ·|¦³¿ù»~ªº¸ê°T¡^¡C
¡° ¥¦ÁÙ¦³ CursorAdapter ¤¤¯Ê¤Öªº Update ©M Release ¤èªk¡C
³o­ÓÃþªº INIT ¤èªk«Ø¥ß¨â­Ó¶°¦X¡]¨Ï¥Î·sªº Collection °ò¦Ãþ¡A¥¦¬OºûÅ@¬Y¨ÇªF¦èªº¶°¦X¥Îªº¡^¡A¤@­Ó¬O¬° SelectCmd ÄÝ©Ê¥i¯à·|¥Î¨ìªº°Ñ¼Æ¦Ó·Ç³Æªº¡A¥t¤@­Ó¬O¥Î©ó¦b Cursor ³Q¥´¶}¥H«áÀ³¸Ó¦Û°Ê«Ø¥ßªº¼Ð°O¡C¥¦ÁÙ·| SET MULTILOCK ON¡A¦]¬°³o¬O CursorAdapter Cursor ªº»Ý¨D¡C
This.oParameters = CreateObject('Collection')
This.oTags = CreateObject('Collection')
Set multilocks on
AddParameter ¤èªk¶H parameters ¶°¦X²K¥[¤@­Ó°Ñ¼Æ¡Cµ¹³o­Ó¤èªk¶Ç»¼°Ñ¼Æªº¦WºÙ¡]³o­Ó¦WºÙÀ³¸Ó»P¸Ó°Ñ¼Æ¥X²{¦b SelectCmd Äݩʤ¤ªº¨º­Ó¦WºÙ¬Û¤@­P¡^¡A®Ú¾Ú»Ý­n¤]¥i¥H¥I¤W°Ñ¼Æªº­È¡]¦pªG§A²{¦b¤£µ¹¥¦¶Ç»¼°Ñ¼Æªº­È¡A¤]¥i¥H¥H«á¦A½Õ¥Î Getparameter ¤èªk¨Ó¶Ç»¼¡^¡C³o¬q¥N½Xºt¥Ü¤F¤@¹ï VFP 8 ¤¤ªº·s¥\¯à¡G·sªº empty °ò¦Ãþ¡A¥¦¨S¦³¥ô¦óÄÝ©Ê¡B¨Æ¥ó©ÎªÌ¤èªk¡A¦]¦¹¬O«Ø¥ß¤@­Ó¦Ð¶q¯Åªºª«¥óªº²z·Q¿ï¾Ü¡FÁÙ¦³ AddProperty() ¨ç¼Æ¡A¥¦ªº§@¥Î¸ò AddProperty ¤èªkÃþ¦ü¡A°Ï§O¬O¥¦¥Î©ó¨º¨Ç¨S¦³³o­Ó¤èªkªºª«¥ó¡C
lparameters tcName, tuvalue
local loParameter
loParameter = createobject('Empty')
addproperty(loParmeter, 'Name', tcName)
addproperty(loParmeter, 'value', tuvalue)
This.oParameters.Add(loParameter, tcName)
¨Ï¥Î GetParmeter ¤èªk¨Óªð¦^¤@­Ó¯S®íªº parameter ª«¥ó¡X¡X³q±`¬O¥Î¦b»Ý­n³]¸m¥Î©ó°Ñ¼Æªº­Èªº®É­Ô¡C
lparameters tcName
local loParameter
loParameter = This.oParameters.Item(tcName)
return loParameter
SetConnection ¤èªk¥Î©ó±N DataSource Äݩʳ]¸m¬°§Æ±æªº³s±µ¡C¦pªG DataSourceType ¬O ¡§ODBC¡¨¡A´Nµ¹³o­Ó¤èªk¶Ç»¼¤@­Ó³s±µ±±¨î½X¡F¦pªG¬O¡§ADO¡¨¡ADataSource ¥²¶·¬O¤@­ÓADO Recordset ª«¥ó¡A¦Ó¥B¸Óª«¥óªº ActiveConnection ÄÝ©Ê¥²¶·­n³]¸m¬°¤@­Ó¬¡°Ê ADO Connection ª«¥ó¡A©Ò¥H¡A§Ú­Ì»Ý­n¦V SetConnection ¤èªk¶Ç»¼³o­Ó ADO Connection ª«¥ó¡A SetConnection ·|«Ø¥ß¤@­Ó RecordSet¡A¨Ã¥B§â³o­Ó RecordSet ªº ActiveConnection ³]¸m¬°³Q¶Ç»¼ªº ADO Connection ª«¥ó¡C
lparameters tuConnection
with this
do case
case .DataSourceType = 'ODBC'
.DataSource = tuConnection
case .DataSourceType = 'ADO'
.DataSource = Createobject('ADODB.RecordSet')
.DataSource.ActiveConnection = tuConnection
endcase
endwith
¬°¤F«Ø¥ß Cursor¡A§Ú­Ì½Õ¥Î GetData ¤èªk¦Ó¤£¬O CursorFill ¤èªk¡A¦]¬° GetData ¯à°÷¦Û°Ê³B²z°Ñ¼Æ©M¿ù»~¡C¦pªG§A·Q­n«Ø¥ß¤@­Ó¤£±a¸ê®Æªº Cursor¡A¨º»ò´Nµ¹ GetData ¤èªk¶Ç»¼¤@­Ó .T.¡C³o­Ó¤èªk«Ø¥ßªº²Ä¤@¼ËªF¦è¡A¬O»P©w¸q¦b parameters ¶°¦X¤¤ªº°Ñ¼Æ­Ì¦P¦Wªº¨p¦³Åܼơ]¦b³oùؽեΤF GetParametervalue ¤èªk¡A¸Ó¤èªk·|ªð¦^°Ñ¼Æª«¥óªº­È¡A¦pªG¸Óª«¥óªº­È¬O¤@­Ó¥H¡§¡×¡¨¶}ÀYªº¹Bºâ¦¡¡A¨º»òªð¦^ªº±N¬O¹Bºâ¸Ó¹Bºâ¦¡¤§«á©ÒÀò±oªº­È¡C¡^¤U¤@¨B¡A¦pªG§Ú­Ì¬O¦b¨Ï¥Î ADO ¨Ã¥B¤w¸g¦³¤F¤@¨Ç°Ñ¼Æ¡A³o¬q¥N½X·|«Ø¥ß¤@­Ó ADO Command ª«¥ó¡A¨Ã§â¸Óª«¥óªº ActiveConnection Äݩʳ]¸m¬° Connection ª«¥ó¡AµM«á§â³o­Ó Connection ª«¥ó¶Ç»¼µ¹ CursorFill ¤èªk¡X¡X³o¬O CursorAdapter ³B²z ADO °Ñ¼Æ¤Æ¬d¸ßªº»Ý­n¡C¦pªG§Ú­Ì¤£¬O¦b¥Î ADO ¡B©ÎªÌ¨S¦³¥ô¦ó°Ñ¼Æ¡A¨º»ò¥N½X·|²³æªº½Õ¥Î CursorFill ¨Ó¶ñ¥R Cursor¡Cª`·N¡A¦pªGµ¹ GetData ¤èªk¶Ç»¼¤F .T.¡A¨Ã¥B CursorSchema ¤w¸g³Q¶ñ¼g¦n¤F¡A¨º»ò´N¬O§i¶D GetData ¤èªk¥h¨Ï¥Î CursorSchema¡]³o¤]¬O§Ú·QÅý CursorAdapter °òÃþ¾Ö¦³ªº¥\¯à¡^¡C²{¦b¦pªG Cursor ³Q«Ø¥ß°_¨Ó¤F¡A¥N½X·|½Õ¥Î GreateTags ¤èªk¨Ó¬°¸Ó Cursor «Ø¥ß·Q­nªº¯Á¤Þ¡F¦pªG Cursor ¨S¦³³Q«Ø¦n¡A¨º»ò¥¦·|½Õ¥Î HandleError ¤èªk¨Ó³B²z¥ô¦óµo¥Í¤Fªº¿ù»~¡C
lparameters tlNoData
local loParameter, ;
lcName, ;
luvalue, ;
llUseSchema, ;
loCommand, ;
llReturn
with This
* tlNoData°Ñ¼Æ«ü©w¬O§_­n¦V Cursor ¤¤¶ñ¥R¸ê®Æ¡A¦pªG­n¶ñ¥Rªº¸Ü¡A
* §Ú­Ì´N­n§â«Ø¥ß¦sÀx©Ò¦³°Ñ¼ÆªºÅܼƪº¬¡¦b³oùØ´N°µ±¼¦Ó¤£¬O©ñ¨ì¤@­Ó¨ä¥Lªº¤èªk¤¤¥h¡C
* ¦]¬°§Ú­Ì§Æ±æ³o¨ÇÅܼƪº¦³®Ä½d³ò¬O¨p¦³ªº¡C
if not tlNoData
for each loParameter in .oParameters
lcName = loParameter.Name
luvalue = .GetParametervalue(loParameter)
store luvalue to (lcName)
next loParameter
endif not tlNoData
* ¦pªG§Ú­Ì¥¿¦b¨Ï¥Î ADO¡A¨Ã¥B¦³¤F¤@¨Ç°Ñ¼Æ¡A¨º»ò´N»Ý­n¦³¤@­Ó³B²z³o¨Ç°Ñ¼Æªº Commandª«¥ó
llUseSchema = not empty(.CursorSchema)
if '?' $ .SelectCmd and (.DataSourceType = 'ADO' or (.UseDEDataSource and ;
.Parent.DataSourceType = 'ADO'))
loCommand = createobject('ADODB.Command')
loCommand.ActiveConnection = iif(.UseDEDataSource, ;
.Parent.DataSource.ActiveConnection, .DataSource.ActiveConnection)
llReturn = .CursorFill(llUseSchema, tlNoData, .nOptions, loCommand)
else
* ¶ñ¥R³o­Ó cursor.
llReturn = .CursorFill(llUseSchema, tlNoData, .nOptions)
endif '?' $ .SelectCmd ...
* ¦pªG Cursor «Ø¥ß¦¨¥\¡A«h¬°¤§©w¸q©Ò¦³ªº Tag¡A§_«h«h³B²zµo¥Íªº¿ù»~¡C
if llReturn
.CreateTags()
else
.HandleError()
endif llReturn
endwith
return llReturn
ÁÙ¦³¤@¨Ç¤èªk³oùاڭ̴N¤£»¡¤F¡A§A¥i¥H¦Û¤v¥h¬ã¨s¥¦­Ì¡CHandleError ¤èªk¨Ï¥Î Aerror() ¨Ó§PÂ_µo¥Í¤F¤°»ò¿ù»~¡A¨Ã§â¿ù»~°}¦Cªº²Ä¤G­Ó¤¸¯À©ñ¨ì cErrorMessage Äݩʤ¤¥h¡CRequery ¤èªk»P GetData Ãþ¦ü¡A¤£¹L¥¦¬O¥Î¨Ó¨ê·s Cursor ¤¤ªº¸ê®Æ¡C½Õ¥Î³o­Ó¤èªk¦Ó¤£¬O CursorRefresh ¤èªkªº­ì¦]´N¶H GetData ¤@¼Ë¡G¥¦¯à°÷³B²z°Ñ¼Æ©M¿ù»~¡CUpdate ¤èªk«Ü²³æ¡G¥¦´N¬O½Õ¥Î TableUpdate() ¨Ó´£¥æ·í«e¸ê®Æ·½ªº§ó·s¡A¦pªG´£¥æ§ó·s¥¢±Ñ¡A«h½Õ¥Î HandleError ¤èªk¨Ó³B²z¿ù»~¡CAddTag ¥Î©ó¦b Cursor ³Q«Ø¥ß«á±N§A·Q­n«Ø¥ßªº¯Á¤Þªº¸ê°T²K¥[¨ì Tags ¶°¦X¤¤¡A¦Ó GetData ¤èªk·|½Õ¥Îªº CreateTags ¤èªk«h·|¦b¦Û¤vªº Index ON »y¥y¤¤¥Î¨ì³o­Ó¶°¦X¤¤ªº¸ê°T¡C
³oùجO¨Ï¥Î³o­ÓÃþªº¤@­Ó¨Ò¤l¡A¬O±qªþ¥ó¤¤ªº TestCursorAdapter.prg ¤¤®³¨Óªº¡C¥¦±q SQL Server ¦Û±aªº Northwind ¸ê®Æ®wªº Customers ªí¤¤¨ú±o¸ê®Æ¡C¥¦ªº SelectCmd ÄÝ©ÊùجO¤@­Ó°Ñ¼Æ¤Æ¬d¸ßªº Select »y¥y¡A¦V§Aºt¥Ü¤F«ç¼Ë¥Î AddParameter ¤èªk¨Ó³B²z°Ñ¼Æ¡A¥H¤Î«ç¼Ë¥Î AddTag ¤èªk¨Ó¦Û°Ê¦a¬° Cursor «Ø¥ß¯Á¤Þ¼ÐÃÑ¡C
local loCursor as SFCursorAdapter of SFCursorAdapter, ;
loConnMgr as SFConnectionMgrODBC of SFRemote, ;
loParameter as Empty
lnHandle = sqlstringconnect('driver=SQL Server;server=(local);' + ;
'database=Northwind;uid=sa;pwd=;trusted_connection=no')
&& change password to appropriate value for your database
loCursor = newobject('SFCursorAdapter', 'SFDataClasses')
with loCursor
.DataSourceType = 'ODBC'
.Alias = 'Customers'
.SelectCmd = 'select * from customers where country = ?pcountry'
.SetConnection(lnHandle)
.AddParameter('pcountry', 'Brazil')
.AddTag('CustomerID', 'CustomerID')
.AddTag('Company', 'upper(CompanyName)')
.AddTag('Contact', 'upper(ContactName)')
if .GetData()
messagebox('Brazilian customers in CustomerID order')
set order to CustomerID
go top
browse
messagebox('Brazilian customers in Contact order')
set order to Contact
go top
browse
messagebox('Canadian customers')
loParameter = .GetParameter('pcountry')
loParameter.value = 'Canada'
.Requery()
browse
else
messagebox('Could not get the data. The error message was:' + ;
chr(13) + chr(13) + .cErrorMessage)
endif .GetData()
* Now try to do an invalid SELECT statement.
.SelectCmd = 'select * from customersx'
if .GetData()
browse
else
messagebox('Could not get the data. The error message was:' + ;
chr(13) + chr(13) + .cErrorMessage)
endif .GetData()
endwith
sqldisconnect(lnHandle)

SFDataEnvironment
*****************
¦bªþ¥ó SFDataClasses.vcx ¤¤ªº³o­Ó¸ê®Æ©MÀô¹ÒÃþ­n¤ñ SFCursorAdapter ²³æªº¦h¡C¦ý¥¦¼W¥[¤F¤@¨Ç«D±`¦³¥Îªº¥\¯à¡G
¡Ñ¡Ñ GetData ¤èªk·|½Õ¥Î©Ò¦³¦b³o­Ó¸ê®ÆÀô¹ÒÃþùØ­±ªº SFCursorAdapter ¦¨­ûÃþªº GetData ¤èªk¡A³o¼Ë§A´N¤£»Ý­n¦Û¤v¥h¤@­Ó­Óªº½Õ¥Î¥¦­Ì¡C»P¦¹Ãþ¦üªº¬O¡ARequery ¤èªk©M Update ¤èªk¤]·|½Õ¥Î¨C­Ó SFCursorAdapter ¦¨­ûÃþªº Requery ©M Update ¤èªk¡C
¡Ñ¡Ñ ¶H SFCursorAdapter ¤@¼Ë¡ASetConnection ¤èªk·|§â DataSource ³]¸m¬°¤@­Ó ADO Recordset¡A¨Ã§â³o­Ó Recordset ªº ActiveConnection Äݩʳ]¸m¬°¤@­Ó ADO Connection ª«¥ó¡C¤£¹L¡A¥¦ÁÙ·|½Õ¥Î©Ò¦³ UseDEDataSource ÄݩʳQ³]¸m¬° .F. ªº SFCursorAdapter ¦¨­ûÃþªº SetConnection ¤èªk¡C
¡Ñ¡Ñ ¥¦´£¨Ñ¤F¤@¨Ç²³æªº¿ù»~³B²z¡]cErrorMessage ÄÝ©Ê·|³Q¶ñ¤J¿ù»~¸ê°T¡^
¡Ñ¡Ñ ¥¦¦³¤@­Ó Release ¤èªk¡C
²{¦b§Ú­Ì¬Ý¬Ý³o­ÓÃþªº¤@¹ï¤èªk¡CGetData «D±`²³æ¡G¦pªG³o­Ó¸ê®ÆÀô¹ÒÃþªº¥ô¦ó¦¨­ûª«¥ó¾Ö¦³ GetData ¤èªk¡A«h½Õ¥Î¸Ó¤èªk¡G
lparameters tlNoData
local loCursor, ;
llReturn
for each loCursor in This.Objects
if pemstatus(loCursor, 'GetData', 5)
llReturn = loCursor.GetData(tlNoData)
if not llReturn
This.cErrorMessage = loCursor.cErrorMessage
exit
endif not llReturn
endif pemstatus(loCursor, 'GetData', 5)
next loCursor
return llReturn


SetConnection ¤èªkµy·L½ÆÂø¤@ÂI¡G¦pªG¥¦ªº¥ô¦ó¦¨­ûª«¥ó¦³ SetConnection ¤èªk¡B¨Ã¥B¸Ó¦¨­ûª«¥óªº UseDEDataSource ÄݩʳQ³]¸m¬° .F.¡A«h½Õ¥Î¸Ó¦¨­ûª«¥óªº SetConnection ¤èªk¡FµM«á¡A¦pªG¦³¥ô¦ó¤@­Ó CursorAdapter ª«¥óªº UseDEDataSource ÄݩʳQ³]¸m¬°¤F .T.¡A«h¨Ï¥ÎÃþ¦ü©ó SFCusrorAdapter ¤¤ªº¨º¼Ëªº¥N½X¨Ó³]¸m¦Û¤vªº DataSource¡G
lparameters tuConnection
local llSetOurs, ;
loCursor, ;
llReturn
with This
* Call the SetConnection method of any CursorAdapter that isn't using our
* DataSource.
llSetOurs = .F.
for each loCursor in .Objects
do case
case upper(loCursor.BaseClass) <> 'CURSORADAPTER'
case loCursor.UseDEDataSource
llSetOurs = .T.
case pemstatus(loCursor, 'SetConnection', 5)
loCursor.SetConnection(tuConnection)
endcase
next loCursor
* If we found any CursorAdapters that are using our DataSource, we'll need to
* set our own DataSource.
if llSetOurs
do case
case .DataSourceType = 'ODBC'
.DataSource = tuConnection
case .DataSourceType = 'ADO'
.DataSource = createobject('ADODB.RecordSet')
.DataSource.ActiveConnection = tuConnection
endcase
endif llSetOurs
endwith
TestDE.prg °µ¤F¤@­Óºt¥Ü¡A¥¦¨Ï¥Î SFDataEnvironment §@¬°®e¾¹¡A¸Ó®e¾¹¤¤¦³¤@¹ï SFCursorAdapter Ãþ¡C¦]¬°³o­Ó¨Ò¤l¥Îªº¬O ADO¡A©Ò¥H¨C­Ó SFCursorAdapter ³£»Ý­n¥¦¦Û¤vªº DataSource¡A¦]¦¹¥¦­Ìªº UseDEDataSource Äݩʳ£³Q³]¸m¦¨¤F .F.¡]Àq»{³]¸m¡^¡Cª`·N¡G¥u­n²³æªº½Õ¥Î¤@¤U SFDataEnvironment ªº SetConnection ¤èªk´N¯à·d©w¬°¨C­Ó CursorAdapter ³]¸m¦n DataSource Äݩʪº¨Æ±¡¡C
local loConn as ADODB.Connection
loConn = createobject('ADODB.Connection')
loConn.ConnectionString = 'provider=SQLOLEDB.1;data source=(local);' + ;
'database=Northwind;uid=sa;pwd='
&& change password to appropriate value for your database
loConn.Open()
set classlib to SFDataClasses
loDE = createobject('SFDataEnvironment')
with loDE
.AddObject('CustomersCursor', 'SFCursorAdapter')
with .CustomersCursor
.Alias = 'Customers'
.SelectCmd = 'select * from customers'
.DataSourceType = 'ADO'
endwith
.AddObject('OrdersCursor', 'SFCursorAdapter')
with .OrdersCursor
.Alias = 'Orders'
.SelectCmd = 'select * from orders'
.DataSourceType = 'ADO'
endwith
.SetConnection(loConn)
if .GetData()
select Customers
browse nowait
select Orders
browse
else
messagebox('Could not get the data. The error message was:' + ;
chr(13) + chr(13) + .cErrorMessage)
endif .GetData()
endwith
loConn.Close()
¥i­«¥Î¸ê®ÆÃþ
************
²{¦b§Ú­Ì¤w¸g¦³¤F¥i¥Îªº CursorAdapter ©M DataEnvironment ªº¤lÃþ¡AÅý§Ú­Ì¨Ó½Í½Í¥i­«¥Î¸ê®ÆÃþªº¨Æ±¡¡C
¤@¥ó VFP µ{¦¡®v­Ì¤w¸g¦V Microsoft ­n¨D¤F«Ü¤[ªº¨Æ±¡¬O¥i­«¥Î¸ê®ÆÃþ¡C¨Ò¦p¡A§A¥i¯à¦³¤@­Óªí³æ©M¤@­Ó³øªí¡A¥¦­Ì¨Ï¥Îªº¬O§¹¥þ¬Û¦Pªº¤@®M¸ê®Æ¡AµM¦Ó§A«o¤£±o¤£­«½Æªº¥h¤â°Ê¦V¸ê®ÆÀô¹Ò¤¤²K¥[¤@­Ó­Óªí©ÎªÌµø¹Ï¡X¡X¦]¬°¸ê®ÆÀô¹Ò¬O¤£¥i­«¥Îªº¡C¬Y¨Çµ{¦¡®v¡]¥H¤Î´X¥G©Ò¦³ªºÀ³¥Îµ{¦¡®Ø¬[´£¨Ñ°Ó¡^±Ä¥Î¤F³q¹L¥N½X¨Ó«Ø¥ß¥i­«¥Î¸ê®ÆÀô¹Ò¡]¨º®É­Ô¸ê®ÆÀô¹Ò¬O¤£¯àµøı¤Æªº«Ø¥ß¤lÃþªº¡^ªº¤èªk¡A¨Ã¥B¦bªí³æ¤W¨Ï¥Î¤@­Ó ¡§loader¡¨ª«¥ó¨Ó«Ø¥ß DataEnvironment ¤lÃþªº¹ê¨Ò¡C¤£ºÞ«ç»ò»¡¡A³oºØ¤èªkÁ`¤£¬O¨º»ò¥¿³W¡A¨Ã¥BµLªk¥Î©ó³øªí¡C
²{¦b¡A¦b VFP8 ùØ¡A§Ú­Ì¤£¶È¾Ö¦³¤F«Ø¥ß¡§¯à°÷¦V¥ô¦ó»Ý­n¸ê®Æªºª«¥ó´£¨Ñ¨Ó¦Û¥ô¦ó¸ê®Æ·½ªº¸ê®Æ¡¨ªº¥i­«¥Î¸ê®ÆÃþªº¯à¤O¡AÁÙ¦³¤F«Ø¥ß¡§¯à°÷±H±J¸ê®ÆÃþªº¡¨¸ê®ÆÀô¹ÒÃþªº¯à¤O¡C¦b§Ú¼g³o½g¤å³¹ªº®É­Ô¡A§AÁÙ¤£¯à¦b³øªí¤¤¨Ï¥Î CursorAdapter ©ÎªÌ DataEnvironment ªº¤lÃþ¡A¤£¹L§A¥i¥H½sµ{ªº²K¥[ CursorAdapter ¤lÃþ¡]¨Ò¦p§â³o¨Ç¥N½X¼g¦b DataEnvironment ªº INIT ¤èªk¤¤¡^¨Ó§Q¥Î¥i­«¥ÎÃþªºÀuÂI¡C
Åý§Ú­Ì¬° Northwind ¸ê®Æ®wªº Customers ©M Orders ªí«Ø¥ß¤@¨Ç¸ê®ÆÃþ¡CCustomersCursor ¡]¦b NorthwindDataClasses.vcx ¤¤¡^¬O SFCursorAdapter ªº¤@­Ó¤lÃþ¡A¨äÄݩʦpªí1¡G
ªí 1. CustomersCursor ªºÄÝ©Ê
ÄÝ©Ê ­È
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)
KeyFieldList CUSTOMERID
SelectCmd select * from customers
Tables CUSTOMERS
UpdatableFieldList CUSTOMERID, COMPANYNAME, CONTACTNAME, CONTACTTITLE, ADDRESS, CITY, REGION, POSTALCODE, COUNTRY, PHONE, FAX
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
§A¤£·|¥H¬°§Ú·|¬O¤â°Ê¦bÄݩʵøµ¡¤¤¿é¤J©Ò¦³³o¨ÇÄݩʪº­È§a¡H·íµM¤£¬O¡I§Ú¬O¥Î CursorAdapter ªº¥Í¦¨¾¹¨Ó·Fªº¡C³oùتº§Þ¥©¬O¥´¶}¡§Use connection settings in builder only¡]¥u¨Ï¥Î¦b¥Í¦¨¾¹¤¤ªº³s±µ³]¸m¡^¡¨¡A¶ñ¤J³s±µ¸ê°T¥HÀò±o¤@­Ó¬¡°Ê³s±µ¡A¦A¶ñ¦n SelectCMD ¥H«á¡A³Ì«á¦A¥Î¥Í¦¨¾¹¨Ó¥Í¦¨¨ä¥LªºÄݩʳ]¸m¡C
²{¦b¡A¥ô¦ó®É­Ô§A»Ý­n Northwind ªº Customers ªí¤¤ªº¸ê®Æ¡A¥u­n²³æªº©ñ¤@­Ó CustomersCursor Ãþ´N°÷¤F¡C·íµM¡A§Ú­ÌÁÙ¨S¦³©w¸q¥ô¦ó³s±µ¸ê°T¡A¤£¹L°µ¨ì³o¼Ë´N¤w¸g«Ü¤£¿ù¤F¡A¦³¤F³o­ÓÃþ´N¤£»Ý­n¾á¤ß«ç»òÀò±o¸ê®Æ¡]ODBC¡BXML¡BADO¡^¡B¨Ï¥Î­þºØ¸ê®Æ¤ÞÀº¡]¤ñ¦p SQL Server¡BAccess ¥H¤Î VFP 8¤¤³£¦³ Northwind ¸ê®Æ®w¡^¤§Ãþªº¨Æ±¡¤F¡C
¤£¹L¡A­nª`·Nªº¬O³o­Ó Cursor ¹ï¥Iªº¬O Customers ªí¤¤©Ò¦³ªº°O¿ý¡C¥i¦³®É­Ô¡A§A¤S¥u·Q­n¤@­Ó«È¤áªº¸ê®Æ¡C¨º»ò¡ACustomerByIDCursor ¬O CustomersCursor ªº¤@­Ó¤lÃþ¡A¥¦ªº SelectCmd ¤w¸g³Q§ï¦¨ ¡§Select * from customers where customerid = ?pcustomerid¡¨¡AÁÙ¦³¤U­±¼W¥[ªº INIT ¤èªkªº¥N½X¡G
lparameters tcCustomerID
dodefault()
This.AddParmeter('pCustomerID', tcCustomerID)
³o¬q¥N½X·|«Ø¥ß¤@­Ó¥s°µ pCustomerID ªº°Ñ¼Æ¡]¥¦¸ò¦b SelectCmd ¤¤«ü©wªº¬O¦P¤@­Ó¡^¡A¨Ã¥B³Q³]¸m¦¨¶Ç»¼¶i¨Óªº¥ô¦ó­È¡C¦pªG¨S¦³­È³Q¶Ç»¼¶i¨Óªº¸Ü¡A¨º»ò¨Ï¥Î GetParameter ¤èªk¨Ó¬°³o­Ó°Ñ¼Æªð¦^¤@­Óª«¥ó¡A¨Ã¦b½Õ¥Î GetData ¤§«e³]¸m¥¦ªº value ÄÝ©Ê¡C
OrdersCursor ÃþÃþ¦ü©ó CustomersCursor¡A¥u¬O¥¦ªð¦^ªº¬O Orders ªí¤¤ªº©Ò¦³¸ê®Æ¡A¦Ó OrdersForCustomerCursor ¬O¥¦ªº¤@­Ó¤lÃþ¡A¥Î©óªð¦^¤@­Ó«ü©w«È¤áªº©Ò¦³­q³æ¡C
­n´ú¸Õ¤@¤Uªº¸Ü¡A½Ð¹B¦æ TestCustomersCursor.prg¡A¥¦·|±q SQL Server ª©¥»ªº Northwind ¸ê®Æ®w¤¤ Customers ªíªº¤@­Ó«È¤á¡AµM«á°µ¨ì Access ª©¥»ªº Northwind ¸ê®Æ®w©Ò°µªº¦P¼Ëªº¨Æ±¡¡C³o­Ó¥Ü¨Òºt¥Ü¤F«ç¼Ë¤£¬°Ãþ«ü©w³s±µ¸ê°T¡A³o­ÓÃþ¦Û¤v´N¯àÆF¬¡ªº§¹¦¨¥ô°È¡A¦]¦¹¡A¥¦ªº¥i­«¥Î©Ê¬O«Ü±jªº¡C
¥Ü¨Ò¡Gªí³æ
**********
²{¦b§Ú­Ì¤w¸g¦³¤F¤@¨Ç¥i­«¥ÎÃþ¡AÅý§Ú­Ì¨Ó¥Î¥Î¥¦­Ì¡C­º¥ý¡A§Ú­Ì¨Ó«Ø¥ß SFDataEnvironment ªº¤@­Ó¤lÃþ CustomersAndOrdersDataEnvironment ¡]«¢«¢¡A¦W¦r¥i¦³°÷ªøªº¡AD.HµP¦B¿}¸¬Äª¡I¡^¡A¥¦¥]§tµÛ¤@­Ó CustomerByIDCursor Ãþ©M¤@­Ó OrdersForCustomerCursor Ãþ¡C¥Ñ©ó§Ú­Ì§Æ±æ¦b¥´¶}ªí¤§«e³]¸m³s±µ¸ê°T¡A¦]¦¹§â¥¦ªº AutoOpenTables Äݩʳ]¸m¬°¤F .F.¡A¦Ó¥B§â«e­±¨â­Ó CursorAdapter ªº UseDEDataSource Äݩʳ£³]¸m¬°¤F .T.¡C²{¦b¡A³o­Ó¸ê®ÆÀô¹ÒÃþ¤w¸g¥i¥H³Q¥Î¨Ó¦b¬Y­Óªí³æ¤¤Åã¥ÜÃö©ó¤@­Ó«ü©w«È¤áªº¸ê°T¥H¤Î¥Lªº­q³æ¤F¡C
Åý§Ú­Ì¨Ó«Ø¥ß³o»ò¤@­Óªí³æ¡Cªþ¥ó¤¤ªº CustomerOrders.scx ªí³æªº DEClass ©M DEClassLibrary Äݩʤw¸g³Q³]¸m¬°¤FCustomersAndOrdersDataEnvironment ©M NorthwindDataClasses.vcx¡A³o¼Ë´N¥Î¤W¤F§Ú­Ìªº¥i­«¥Î¸ê®ÆÀô¹ÒÃþ¡C³o­Óªí³æªº Load ¤èªkùØ­±ªº¥N½X¦³ÂI¦h¡A¤£¹L³o¬O¦]¬°¥¦­n¤ä«ù ADO¡BODBC¡B¥H¤Î XML ¸ê®Æ·½¡A¨Ã¥B¥¦ÁÙ­n«Ø¥ß¦Û¤vªº³s±µ¡A©Ò¥H¤j¦h¼Æ¥N½X³£¬O³B²z³o¨Ç°ÝÃDªº¡C¦pªG¥¦¥u¤ä´©¤@ºØ¸ê®Æ·½ªº¸Ü¡A¤ñ¦p¥u¥Î ODBC¡A¦A¤ñ¦p¥Ñ¥t¤@­Óª«¥ó¨ÓºÞ²z³s±µ¡]¹ê»ÚªºÀ³¥Îµ{¦¡¶}µo¤¤±`±`´N¬O³o¼Ëªº¡^¡A¥N½X´N·|²³æ¦h¤F¡G
with This.CustomersAndOrdersDataEnvironment
* Àò±o³s±µ
lnHandle = oApp.oConnectionMgr.GetConnectionHandle()
.SetConnection(lnHandle)
* «ü©w±q CustomerID ¤å¥»®Ø¤¤¨ú±o cursor °Ñ¼Æªº­È
loParameter = ;
.CustomerByIDCursor.GetParameter('pCustomerID')
loParameter.value = '=Thisform.txtCustomerID.value'
loParameter = ;
.OrdersForCustomerCursor.GetParameter('pCustomerID')
loParameter.value = '=Thisform.txtCustomerID.value'
* «Ø¥ß¤@­ÓªÅªº cursor¡A¦pªG¥¢±Ñªº¸Ü«hÅã¥Ü¿ù»~¸ê°T
if not .GetData(.T.)
messagebox(.cErrorMessage)
return .F.
endif not .GetData(.T.)
endwith
³o¬q¥N½X¥Î¤W¤F¨º¨â­Ó CursorAdapter ª«¥óªº GetParameter ¤èªk¨Ó§â pCustomerID °Ñ¼Æ³]¸m¬°ªí³æ¤W¤@­Ó¤å¥»®Ø¤¤ªº­È¡Cª`·N¦b­ÈùØ­±¥Î¨ìªº'='¡A¥¦ªí¥Ü¦b§A»Ý­n value Äݩʪº®É­Ô¦A¥h¹Bºâ¥¦ªº­È¡A©Ò¥H§Ú­Ì¹ê»Ú¤W¦³¤F¤@­Ó°ÊºAªº°Ñ¼Æ¡]³o¼Ë´N¶¶À³¤F·í¥Î¤á¦b¤å¥»®Ø¤¤¿é¤J¤F·sªº­È¥H«á­n±N§ï°Ê¤ÏÀ³¨ì°Ñ¼Æ¤¤¥hªº»Ý­n¡^¡C½Õ¥Î GetData ¤èªk¬O¬°¤F«Ø¥ß¤@­ÓªÅªº Cursor¡A³o¼Ë¤~¯à¦w¹y¨º¨Ç¸ê®Æ¸j©wªº±±¨î¶µ¡C
txtCustomerID ¤å¥»®Ø¨S¦³¸j©w¤°»ò¸ê®Æ¡C¥¦ªº Valid ¤èªk¥ý½Õ¥Î¸ê®ÆÀô¹Òªº Requery ¤èªk¡AµM«á¦A½Õ¥Îªí³æªº Refresh ¤èªk¡C³o¼Ë¡A·í¥Î¤á¿é¤J¤@­Ó·sªº«È¤áIDªº®É­Ô¡A´N¯à°÷ Requery ¨º­Ó Cursor¡A±µµÛªí³æ¤W¨ä¥L±±¨î¶µ¤]·|³Q¨ê·s¡Cªí³æ¤Wªº¨ä¥L¤å¥»®Ø³Q¸j©w¨ì¥Ñ CustomersByIDCursor ª«¥ó«Ø¥ßªº Customers cursor ªºÄæ¦ì¤¤¡C¨º­Ó Grid ³Q¸j©w¨ì¥Ñ OrdersForCustomerCursor ª«¥ó«Ø¥ßªº Orders Cursor¡C
¹B¦æ³o­Óªí³æ¡A¨Ã¿é¤J¤@­Ó Customer ID ¬°¡§ALFKI¡¨¡]¨£¹Ï1¡^¡C·í§A«ö¤U Tab Áä¸õ¥X³o­Ó¤å¥»®Øªº®É­Ô¡A§A·|¬Ý¨ì¸Ó«È¤áªº¦ì§}¸ê°T¥H¤Î¥Lªº­q³æ´N¥X²{¤F¡C¸ÕµÛ§ï°Ê¤@¨Ç³o­Ó«È¤áªº¸ê®Æ©ÎªÌ­q³æ¸ê®Æ¡AµM«áÃö³¬ªí³æ¦A¥´¶}¡A¦A¿é¤J¤@¦¸¡§ALFKI¡¨¡A§A·|¬Ý¨ì§A¨S°µ¤°»ò¤u§@³o¨Ç§ï°Ê´N³£¤w¸g³Q¼g¨ì«á»O¸ê®Æ®w¤¤¤F¡C

¦¹¥DÃD¬ÛÃö¹Ï¤ù¦p¤U¡G
¹Ï1¡B
»Å§a¡A¶â¡H¸ò«Ø¥ß¤@­Ó°ò©ó¥»¦aªí©ÎªÌµø¹Ïªºªí³æ¬Û¤ñ¡A¨Ã¨S¦h¦h¤Ö¤u§@¡C§ó´Îªº¬O¡G¸Õ¸Õ§â©w¸q¦b Load ¤èªk¤¤ªº ccDATASOURCETYPE ±`¶q§ïÅܬ° ¡§ADO¡¨©ÎªÌ¡§XML¡¨¡AµM«á³o­Óªí³æµL½×¬O¬Ý°_¨ÓÁÙ¬O¹ê»Ú¤u§@°_¨Ó³£¸ò¨S§ï¹L¤§«e¤@ºN¤@¼Ë¡]¦pªG§A·Q¥Î XML¡A§A»Ý­n¶H¤W­Ó¤ëªº¤å³¹¤¤©Ò»¡ªº¨º¼Ë¬° Northwind ¸ê®Æ®w³]¸m¤@­Ó SQLXML µêÀÀ¥Ø¿ý¡A¨Ã§â¥»¤ëªþ¥ó¤¤ªº XML ½d¥»ÀÉ«þ¨©¨ì¨º­Ó¥Ø¿ýùØ¡^¡C
¥Ü¨Ò¡G³øªí
**********
§Ú­Ì¨Ó¸Õ¸Õ³øªí¡C³oùس̤jªº°ÝÃD¬O¡G»Pªí³æ¤£¦P¡A§Ú­Ì¬J¤£¯à§i¶D³øªí¥h¨Ï¥Î¤@­Ó¸ê®ÆÀô¹Ò¤lÃþ¡A¤]¤£¯à©ì©ñ¤@­Ó CursorAdapter ¤lÃþ¨ì¸ê®ÆÀô¹Ò¤¤¥h¡C©Ò¥H§Ú­Ì¤£±o¤£¦V³øªí©ñ¤J¤@¨Ç¥N½X¥H±N CursorAdapter ²K¥[¨ì¸ê®ÆÀô¹Ò¡C¾¨ºÞ±qÅÞ¿è¤W¨Ó¬ÝÀ³¸Ó§â³o¨Ç¥N½X©ñ¨ì³øªí¸ê®ÆÀô¹Òªº BeforeOpernTables ¨Æ¥ó¤¤¥h¡A¤£¹L¨Æ¹ê¤W³o¼Ë°µ«o¬O¦æ¤£³qªº¡A¦]¬°¡X¡X¥Ñ©ó¬Y¨Ç§Ú¤£¯à²z¸Ñªº­ì¦]¡X¡X BeforeOpenTables ¨Æ¥ó¥u·|¦b§A¹wÄý³øªíªº¨C¤@­¶ªº®É­Ô¤~·|IJµo¡C©Ò¥H¡A§Ú­Ì¥u¦n§â¥N½X©ñ¦b Init ¤èªkùØ¡C¦]¬°ºt¥Üªº»Ý­n¡A³øªí CustomerOrders.frx ¸òªí³æ CustomerOrders.scx ¤@¼Ë¡A­n¤ñ¹ê»Ú¶}µoªº±¡ªp¤U·|¥Î¨ìªº¥N½X§ó½ÆÂø¤@¨Ç¡C¦pªG¨S¦³³o¨Çºt¥Üªº»Ý¨Dªº¸Ü¡A¹ê»Ú¤W¥i¥H²¤Æ¨ì¤U­±³o¼Ë¡G
with This
set safety off
* Àò±o³s±µ
.DataSource = oApp.oConnectionMgr.GetConnectionHandle()
* «Ø¥ß«È¤á©M­q³æªº CursorAdapter ª«¥ó
.NewObject('CustomersCursor', 'CustomersCursor', ;
'NorthwindDataClasses')
.CustomersCursor.AddTag('CustomerID', 'CustomerID')
.CustomersCursor.UseDEDataSource = .T.
.NewObject('OrdersCursor', 'OrdersCursor', ;
'NorthwindDataClasses')
.OrdersCursor.AddTag('CustomerID', 'CustomerID')
.OrdersCursor.UseDEDataSource = .T.
* ¨ú±o¸ê®Æ¡A¦pªG¥¢±Ñ¡A«hÅã¥Ü¿ù»~¸ê°T
if not .CustomersCursor.GetData()
messagebox(.CustomersCursor.cErrorMessage)
return .F.
endif not .CustomersCursor.GetData()
if not .OrdersCursor.GetData()
messagebox(.OrdersCursor.cErrorMessage)
return .F.
endif not .OrdersCursor.GetData()
* ±q Customers ³]¸m¤@­Ó»P Orders ªºÃö«Y
set relation to CustomerID into Customers
endwith
³oùتº¥N½X¤ñªí³æ¥Ü¨Òªº­n¦h¤@¨Ç¡A³o¬O¦]¬°§Ú­Ì¤£¯à¨Ï¥Î¦Û©w¸qªº¸ê®ÆÀô¹ÒÃþ¾É­P¤£±o¤£¦Û¤v¤â°Ê½s½X¨Ó¥N´À¡C
²{¦b¡A§Ú­Ì«ç¼Ë¤~¯àºÉ¥i¯à²³æªº´N§â¨º¨ÇÄæ¦ì©ñ¨ì³øªí¤W¥h©O¡H¥Ñ©ó CursorAdapter ª«¥ó¬O§Ú­Ì¥Î¥N½X¦b¹B¦æ®É¤~²K¥[¨ì¸ê®ÆÀô¹Ò¤¤¥hªº¡A¦b³]­p®É´N¨S¿ìªk¨É¨ü¨ì©ì©ñÄæ¦ì¨ì³øªí¤Wªº¤è«K¤F¡C³oùئ³­Ó¤p§Þ¥©¡G«Ø¥ß¤@­Ó·|«Ø¥ß³o¨Ç Cursor ªº PRGÀÉ¡A¨ÃÅý³o¨Ç Cursor ³B©ó¦³®Ä½d³ò¤º¡]¥i¥H±Ä¥Î±¾°_ PRG ªº¹B¦æ©ÎªÌ§â CursorAdapter ª«¥óÁn©ú¦¨ Public ªº¿ìªk¡^¡AµM«á¨Ï¥Î§Ö³t³øªí¥\¯à¨Ó§â¨º¨ÇÄæ¦ì©ñ¨ì³øªí¤W¡A³o¼Ë³øªí±±¨î¶µªº¤j¤p¤]³]¸m¦n¤F¡C
¹Ï2®i¥Ü¤F·í§A¹wÄý³øªíªº®É­Ô¸Ó³øªíªº±¡ªp¡C¦pªGµ²¦Xªí³æ¤@°_¨Ï¥Îªº¸Ü¡A§A¥i¥H¸Õ¸Õ§ï°Êªí³æ¼Æ¾ÚÀô¹Ò¤¤ªº #DEFINE »y¥y¨Ó´«¥Î¨ä¥LÃþ«¬ªº¸ê®Æ·½¡C
Á`µ²
*****
§Ú­Ì¹ï·sªº CursorAdapter °ò¦Ãþªº¬ã¨s´N¨ì³oùؤF¡C§Ú­Ó¤H¹ï CursorAdapter ªº¥X²{·P¨ì«D±`ªº¿³¾Ä¡A¨Ã­pµeµ¹§ÚªºÀ³¥Îµ{¦¡®Ø¬[¤¤ªº¸ê®Æ³B²z³¡¥ó¤É¤É¯Å¥H§ó¥R¤Àªº§Q¥Î¥¦ªºÀuÂI¡C

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

¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
#############################
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
violetlkk



µù¥U®É¶¡: 2003-06-21
¤å³¹: 82
¨Ó¦Û: kaohsiung

²Ä 2 ¼Ó

µoªíµoªí©ó: ¬P´Á¤» ¤Q¤ë 18, 2003 1:19 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

¦³¤Fvfp8 sp1
À³¸Ó¬O¾Çcaªº®É­Ô¤F...
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
±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§@