考試大計(jì)算機(jī)等級(jí)站整理:
在附件 SFDataClasses.vcx 中的這個(gè)數(shù)據(jù)和環(huán)境類要比 SFCursorAdapter 簡(jiǎn)單的多。但它增加了一些非常有用的功能:
×× GetData 方法會(huì)調(diào)用所有在這個(gè)數(shù)據(jù)環(huán)境類里面的 SFCursorAdapter 成員類的 GetData 方法,這樣你就不需要自己去一個(gè)個(gè)的調(diào)用它們。與此類似的是,Requery 方法和 Update 方法也會(huì)調(diào)用每個(gè) SFCursorAdapter 成員類的 Requery 和 Update 方法。
×× 象 SFCursorAdapter 一樣,SetConnection 方法會(huì)把 DataSource 設(shè)置為一個(gè) ADO Recordset,并把這個(gè) Recordset 的 ActiveConnection 屬性設(shè)置為一個(gè) ADO Connection 對(duì)象。不過,它還會(huì)調(diào)用所有 UseDEDataSource 屬性被設(shè)置為 .F. 的 SFCursorAdapter 成員類的 SetConnection 方法。
×× 它提供了一些簡(jiǎn)單的錯(cuò)誤處理(cErrorMessage 屬性會(huì)被填入錯(cuò)誤信息)
×× 它有一個(gè) Release 方法。
現(xiàn)在我們看看這個(gè)類的一對(duì)方法。GetData 非常簡(jiǎn)單:如果這個(gè)數(shù)據(jù)環(huán)境類的任何成員對(duì)象擁有 GetData 方法,則調(diào)用該方法:
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 方法稍微復(fù)雜一點(diǎn):如果它的任何成員對(duì)象有 SetConnection 方法、并且該成員對(duì)象的 UseDEDataSource 屬性被設(shè)置為 .F.,則調(diào)用該成員對(duì)象的 SetConnection 方法;然后,如果有任何一個(gè) CursorAdapter 對(duì)象的 UseDEDataSource 屬性被設(shè)置為了 .T.,則使用類似于 SFCusrorAdapter 中的那樣的代碼來設(shè)置自己的 DataSource:
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
在附件 SFDataClasses.vcx 中的這個(gè)數(shù)據(jù)和環(huán)境類要比 SFCursorAdapter 簡(jiǎn)單的多。但它增加了一些非常有用的功能:
×× GetData 方法會(huì)調(diào)用所有在這個(gè)數(shù)據(jù)環(huán)境類里面的 SFCursorAdapter 成員類的 GetData 方法,這樣你就不需要自己去一個(gè)個(gè)的調(diào)用它們。與此類似的是,Requery 方法和 Update 方法也會(huì)調(diào)用每個(gè) SFCursorAdapter 成員類的 Requery 和 Update 方法。
×× 象 SFCursorAdapter 一樣,SetConnection 方法會(huì)把 DataSource 設(shè)置為一個(gè) ADO Recordset,并把這個(gè) Recordset 的 ActiveConnection 屬性設(shè)置為一個(gè) ADO Connection 對(duì)象。不過,它還會(huì)調(diào)用所有 UseDEDataSource 屬性被設(shè)置為 .F. 的 SFCursorAdapter 成員類的 SetConnection 方法。
×× 它提供了一些簡(jiǎn)單的錯(cuò)誤處理(cErrorMessage 屬性會(huì)被填入錯(cuò)誤信息)
×× 它有一個(gè) Release 方法。
現(xiàn)在我們看看這個(gè)類的一對(duì)方法。GetData 非常簡(jiǎn)單:如果這個(gè)數(shù)據(jù)環(huán)境類的任何成員對(duì)象擁有 GetData 方法,則調(diào)用該方法:
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 方法稍微復(fù)雜一點(diǎn):如果它的任何成員對(duì)象有 SetConnection 方法、并且該成員對(duì)象的 UseDEDataSource 屬性被設(shè)置為 .F.,則調(diào)用該成員對(duì)象的 SetConnection 方法;然后,如果有任何一個(gè) CursorAdapter 對(duì)象的 UseDEDataSource 屬性被設(shè)置為了 .T.,則使用類似于 SFCusrorAdapter 中的那樣的代碼來設(shè)置自己的 DataSource:
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

