Newsgroup: it.comp.lang.visual-basic
Titolo: [Risp:] ADO-evento EndOfRecordset

Avanti> Record:Singolo ; Codice:ADO > Avanti > Origine record: Order detail
; Campi selezionati: Tutti ; Ordina in Base alla
colonna: OrderID > Avanti > Avanti > Fine
Costruita la maschera , ho ritenuto di eseguire le seguenti modifiche:
Option Explicit
Dim WithEvents adoPrimaryRS As ADODB.Recordset
Dim db As ADODB.Connection
Const numRec As Byte = 200 'blocco di record da caricare
Dim numrecProg As Long 'numero di record progressivo che compone il
recordset
Dim totRec As Long 'numero di record totali che si compone il recordset
'Evento ADO EndOfRecordse
'in editor codice:
'Combo Oggetto selezionare: adoPrimaryRS
'Combo routine selezionare: EndOfRecordset
Private Sub adoPrimaryRS_EndOfRecordset(fMoreData As Boolean, adStatus As
ADODB.EventStatusEnum, _
                                        ByVal pRecordset As ADODB.Recordset)
        If numrecProg >= totRec Then
            fMoreData = False
            adStatus = adStatusCancel
            adStatus = adStatusUnwantedEvent 'stop aggiunta blocco record
      Else
            pRecordset.Close
            numrecProg = numrecProg + numRec
            pRecordset.MaxRecords = numrecProg
            Call popolaTextBox
            fMoreData = True
    End If
End Sub
'Evento Load della maschera
Private Sub Form_Load()
  Set db = New ADODB.Connection
   db.CursorLocation = adUseServer
  db.Open "PROVIDER=MSDASQL;driver={SQL
Server};server=GIUSEPPE\ATTILA;uid=sa;pwd=;database=northwind;"
  Set adoPrimaryRS = New ADODB.Recordset
  adoPrimaryRS.CursorLocation = adUseClient
  adoPrimaryRS.Open "select OrderID from [Order Details] ", db,
adOpenForwardOnly, adLockReadOnly
  totRec = adoPrimaryRS.RecordCount
  adoPrimaryRS.Close
  numrecProg = numRec
  adoPrimaryRS.MaxRecords = numRec
    Call popolaTextBox
End Sub
Private Sub popolaTextBox()
 adoPrimaryRS.Open "select OrderID,ProductID,UnitPrice,Quantity,Discount
from [Order Details] Order by OrderID", db,
adOpenStatic, adLockOptimistic
 Dim oText As TextBox
   'Associa le caselle di testo al fornitore di dati
    adoPrimaryRS.AbsolutePosition = (numrecProg - numRec) + 1
   For Each oText In Me.txtFields
      Set oText.DataSource = adoPrimaryRS
   Next
End Sub
Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  'Visualizza la posizione del record corrente per questo gruppo di record
        lblStatus.Caption = "Record: " & CStr(adoPrimaryRS.AbsolutePosition)
& " (" & adoPrimaryRS.RecordCount & ")" & "  Tot rec:
       " & totRec ' aggiunto il numero totale cui è composto l'intero
recordset
End Sub
Private Sub cmdFirst_Click()
      adoPrimaryRS.MoveFirst
      adoPrimaryRS.Close
      numrecProg = numRec
      adoPrimaryRS.MaxRecords = numRec
      Call popolaTextBox
 End Sub
Private Sub cmdNext_Click()
  If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
  If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
    Beep
     'è stata superata la fine e quindi torna indietro
    adoPrimaryRS.MoveLast
    adoPrimaryRS.AbsolutePosition = (numrecProg - numRec) + 1
  End If
End Sub
Considerazioni:
1- Se il recordset si trova nella posizione 1 e opero un clic sul tasto
cmdPrevious_Click(),
con questo metodo viene caricato l'intero recordset.
2- Se il cliente mi chiede come segue:
E' possibile caricare solo due blocchi di record ?
Mi spiego:
Se mi trovo al quarto blocco , nell'esempio ho caricato 200 x 4 = 800 record
, è possibile avere in memoria i record che
vanno dal numero 400 al numero 800 e così di seguito ?
Per il momento non so rispondere.
giuseppeD
p.s.
Spero di non avere dimenticato nulla.

 Spero di non avere dimenticato nulla.
Sì, di scrivere queste cose all'interno del topic corrispondente,
rispondendo allo stesso, non aprendo un nuovo topic praticamente identico.
Fallo, per favore.