Newsgroup: it.comp.lang.visual-basic
Titolo: MovePrevious...MoveLast...controllo ADO Data

ciao
ho un form che contiene un controllo ado data (invisibile a runtime) e delle
textbox associate...ho creato due pulsanti per scorrere il recordset avanti
e indietro usando i metodi MovePrevious e MoveNext del recordset sorgente
(una tabella di access) del controllo data...il codice dell'evento click dei
pulsanti è il seguente :
Private Sub cmdPrecedente_Click()
    If tblClientiAbituali.Recordset.BOF Then
        tblClientiAbituali.Recordset.MoveFirst
    Else
        tblClientiAbituali.Recordset.MovePrevious
    End If
End Sub
Private Sub cmdSuccessivo_Click()
    If tblClientiAbituali.Recordset.EOF Then
        tblClientiAbituali.Recordset.MoveLast
    Else
        tblClientiAbituali.Recordset.MoveNext
    End If
End Sub
quando sono sul primo (o sull'ultimo) record e premo uno dei due pulsanti,
il recordset si sposta su una riga vuota, cioè le textbox sono vuote; se
premo una seconda volta il pulsante il recordset si sposta sul primo (o
sull'ultimo) record. Perchè succede ciò? Come faccio a evitare questo
comportamento?
Spero di essermi spiegato bene...
grazie
ciao
sergio

 sull'ultimo) record. Perchč succede ciň? Come faccio a evitare questo


Ciao, Sergio
Dovresti controllare le proprietą BOFAction e EOFAction del
controllo ADOData. Se, per esempio, EOFAction č impostato su
2 - adDoAddNew, ogni qualvolta incontri EOF il controllo si predispone per
una AddNew di, ovviamente, un record vuoto.
Questo č un comportamento che ingenera errori di riposizionamento
dei record ed č in parte spiegato e risolto (sempre in parte) da un KB
di Microsoft che ti riporto :
PRB: ADODC Error on Reposition When EOFAction Is adDoAddNew
ID: Q190642
----------------------------------------------------------------------------
----
The information in this article applies to:
Microsoft Visual Basic Learning, Professional, and Enterprise Editions for
Windows, version 6.0
----------------------------------------------------------------------------
----
SYMPTOMS
When you move past EOF, a new blank record is displayed and the ADO Data
Control's EOFAction property is set to 2-adDoAddNew. If you do not enter
data for the new record and move off the record, you get the error message:
Cannot insert an empty row - must have at least one column value set.
CAUSE
ADO does an implicit update on a Move in a recordset. When the ADO Data
Control's EOFAction property is set to 2-adDoAddNew, ADO adds a new record
and allows the user to edit the record in bound controls. When the user
moves off of the newly-created record, ADO does a recordset Update. If the
user has decided not to add a record, leaves the bound controls blank, and
moves off the newly-created record, the attempted update causes ADO to
display the message, "Cannot insert an empty row - must have at least one
column value set".
The ADO Data Control's EOFAction - adDoAddNew behavior is different than the
DAO Data Control's EOFAction - Add New behavior and the Remote Data
Control's EOFAction - rdAddNew behavior. You will not get a message if you
move off of a newly-added record when using the Data Control or the Remote
Data Control.
RESOLUTION
You can work around this behavior by adding error handling code in the ADO
Data Control's Error event procedure. Here is an example of code to handle
this specific error, which is error number 16389:
    Private Sub Adodc1_Error(ByVal ErrorNumber As Long, _
        Description As String,  ByVal Scode As Long, _
        ByVal Source As String, ByVal HelpFile As String, _
        ByVal HelpContext As Long, fCancelDisplay As Boolean)
        If ErrorNumber = 16389 Then
            If Adodc1.Recordset.State = ADODB.adStateOpen Then
                Adodc1.Recordset.CancelUpdate
                Adodc1.Recordset.MoveLast
                fCancelDisplay = True
            End If
        End If
    End Sub
STATUS
This behavior is by design.
Ciao, Vito
-- 
Posted from 
smtp4.libero.it
 [193.70.192.54] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Solitamente quando do la possibilità di scorrere un 
recordset abilito o disabilito i pulsanti a seconda che
sono arrivato a fine o inizio recordset... mi spiego meglio:
Private Sub cmdPrecedente_Click()
    If tblClientiAbituali.Recordset.BOF Then
        tblClientiAbituali.Recordset.MoveFirst
        cmdPrecedente.Enabled = False
    Else
        tblClientiAbituali.Recordset.MovePrevious
        cmdPrecedente.Enabled = True
    End If
End Sub
Private Sub cmdSuccessivo_Click()
    If tblClientiAbituali.Recordset.EOF Then
        tblClientiAbituali.Recordset.MoveLast
        cmdSuccessivo.Enabled = False
    Else
        tblClientiAbituali.Recordset.MoveNext
        cmdSuccessivo.Enabled = True
    End If
End Sub
...penso sia meglio non dare la possibilità di cliccare il
pulsante "Precedente" quando sei sul primo record, o
"Successivo" quando sei sull'ultimo.
Per la soluzione al tuo problema invece vedi il post di
Perrotta Vito, il mio era solo un consiglio...
...spero valido.
Ciao Stefano
_________________________________________________________________________
la tua email gratuita e per sempre su 
http://www.freemail.it
 (anche POP3)
-- 
Posted from 
qma...@hermes.evo.it
 [194.184.29.10] 


dove posso trovare una versione trial del progr visua basic 6.0  grazie a
tutti