本示例模拟一个智能搜索商务对象,此对象可以在一个或多个数据库中查找某个客户。实际工作时,数据环境的 BeforeOpenTables 事件代码在 gopher 类的基础上创建了一个对象,并提示用户使用什么数据库。gopher 类的代码会打开相应的数据库。这种方法可以使我们在一个三层结构模型下使用 Visual FoxPro,该模型使得用户服务不用和数据服务紧紧连在一起,就象当今许多的客户 - 服务器环境一样。
尽管本示例仅仅提供了在示例数据库 TESTDATA 和 TASTRADE 之间选择,您还是可以利用这种方法创建一个智能搜索商务对象,该对象为了寻找必要的数据库,可自动在一个企业的网络上进行搜索。
若要打开 gopher 示例的项目
MODIFY PROJECT (HOME(2) + 'servers\gopher\foxsrch')
若要运行 gopher 示例
#DEFINE FOXHOME HOME(2)
在 Wing1.scx 中,数据环境的 BeforeOpenTables 事件包含下面的代码:
LOCAL oGopher,lUseRemote
THIS.AddObject('cursor1','cursor')
THIS.cursor1.Alias = 'employee'
lUseRemote=(MESSAGEBOX('Do you want to use Remote Data?',36) = 6)
oGopher=CreateObject('FoxSearch.Gopher')
oGopher.UpdateDE(THIS,m.lUseRemote)
RELEASE oGopher
下面的代码定义了 Gopher 类。UpdateDE 方法程序将对数据环境的对象引用和一个逻辑值作为参数,在这个逻辑值的基础上,UpdateDE 方法程序在数据环境中为一个临时表设置不同的 CursorSource 值。
#DEFINE FOXHOME HOME(2)
DEFINE CLASS Gopher AS Custom OLEPUBLIC
oDERef = ''
PROCEDURE UpdateDE
PARAMETER oNewDE,lRemote
IF TYPE('oNewDE')#'O' OR ISNULL(m.oNewDE)
RETURN .F.
ENDIF
THIS.oDERef = m.oNewDE
IF !m.lRemote
* Use local data
THIS.oDERef.cursor1.database = FOXHOME + 'DATA\TESTDATA.DBC'
THIS.oDERef.cursor1.cursorsource = 'Employee'
ELSE
* Use remote data (simiulated)
THIS.oDERef.cursor1.database = FOXHOME + ;
'Tastrade\DATA\Tastrade.DBC'
THIS.oDERef.cursor1.cursorsource = 'Employee'
ENDIF
THIS.oDERef = ''
ENDPROC
ENDDEFINE