深入CursorAdapter(四)

字號:

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