深入CursorAdapter(四)

字號(hào):

考試大計(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