Un esempio di gestione eventi su ADO con vb6

Questa piccola esercitazione per dimostrare la gestione degli eventi su ado con vb6.
Si appoggia su un db access "dati.mdb" da posizionare sulla cartella che contiene il programma.
Il database dati.mdb deve contenere una tabella "tabprova" con  2 campi (Codice = contatore e descr = testo); aggiungere anche alcuni dati di prova.
Fare il copia-incolla del seguente su un file di testo, salvarlo come Form1.frm

VERSION 5.00

Begin VB.Form Form1

   Caption         =   "Form1"

   ClientHeight    =   2988

   ClientLeft      =   48

   ClientTop       =   432

   ClientWidth     =   6012

   LinkTopic       =   "Form1"

   ScaleHeight     =   2988

   ScaleWidth      =   6012

   StartUpPosition =   3  'Windows Default

   Begin VB.CommandButton cmdExecute

      Caption         =   "Execute"

      Height          =   372

      Left            =   3960

      TabIndex        =   9

      Top             =   2400

      Width           =   852

   End

   Begin VB.TextBox txtMsg

      Height          =   288

      Left            =   1320

      TabIndex        =   8

      Top             =   1320

      Width           =   4452

   End

   Begin VB.CommandButton cmdLast

      Caption         =   "Last"

      Height          =   372

      Left            =   2880

      TabIndex        =   7

      Top             =   2400

      Width           =   732

   End

   Begin VB.CommandButton cmdNext

      Caption         =   "Succ"

      Height          =   372

      Left            =   2040

      TabIndex        =   6

      Top             =   2400

      Width           =   732

   End

   Begin VB.CommandButton cmdPrev

      Caption         =   "Prec"

      Height          =   372

      Left            =   1080

      TabIndex        =   5

      Top             =   2400

      Width           =   852

   End

   Begin VB.CommandButton cmdInizio

      Caption         =   "Inizio"

      Height          =   372

      Left            =   120

      TabIndex        =   4

      Top             =   2400

      Width           =   852

   End

   Begin VB.TextBox txtDescr

      Height          =   288

      Left            =   2760

      TabIndex        =   2

      Top             =   240

      Width           =   3012

   End

   Begin VB.TextBox txtCodice

      Height          =   288

      Left            =   1320

      TabIndex        =   1

      Top             =   240

      Width           =   1332

   End

   Begin VB.Label Label2

      Caption         =   "Messaggio:"

      Height          =   252

      Left            =   120

      TabIndex        =   3

      Top             =   1320

      Width           =   972

   End

   Begin VB.Label Label1

      Caption         =   "Codice:"

      Height          =   252

      Left            =   120

      TabIndex        =   0

      Top             =   240

      Width           =   972

   End

End

Attribute VB_Name = "Form1"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

Option Explicit

Private WithEvents rs As ADODB.Recordset

Attribute rs.VB_VarHelpID = -1

Private WithEvents cnn As ADODB.Connection

Attribute cnn.VB_VarHelpID = -1

Enum Naviga

    Frec = 0

    Prec = 1

    Nrec = 2

    Lrec = 3

End Enum

 

Private Sub cmdExecute_Click()

    cnn.Execute "Delete * from tabprova where tabprova.codice = 0"

End Sub

 

Private Sub cmdInizio_Click()

    NavigaRecord Naviga.Frec

End Sub

 

Private Sub cmdLast_Click()

    NavigaRecord Naviga.Lrec

End Sub

 

 

Private Sub cmdNext_Click()

    NavigaRecord Naviga.Nrec

End Sub

 

 

Private Sub cmdPrev_Click()

    NavigaRecord Naviga.Prec

End Sub

 

 

Private Sub Form_Load()

    Set rs = New ADODB.Recordset

    Set cnn = New ADODB.Connection

    cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\dati.mdb;Persist Security Info=False"

    cnn.Open

    rs.Open "tabprova", cnn, adOpenStatic, adLockOptimistic

    NavigaRecord Naviga.Frec

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

    rs.Close

    Set rs = Nothing

    cnn.Close

    Set cnn = Nothing

End Sub

 

Private Sub rs_WillMove(ByVal adReason As ADODB.EventReasonEnum, _

                                adStatus As ADODB.EventStatusEnum, _

                                ByVal pRecordset As ADODB.Recordset)

    'PrintStatus "WillMove"

    PrintReason adReason

End Sub

Private Sub rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _

                                ByVal pError As ADODB.Error, _

                                    adStatus As ADODB.EventStatusEnum, _

                                ByVal pRecordset As ADODB.Recordset)

    'PrintStatus "MoveComplete"

    PrintReason adReason

End Sub

 

Sub PrintStatus(msg As String)

    txtMsg = msg

End Sub

Sub NavigaRecord(record As Naviga)

    If record = Naviga.Frec Then

        If Not rs.EOF Or Not rs.BOF Then rs.MoveFirst

    End If

    If record = Naviga.Nrec Then

        If rs.EOF = False Then rs.MoveNext

        If rs.EOF = True And rs.BOF = False Then rs.MoveLast

    End If

    If record = Naviga.Prec Then

        If rs.BOF = False Then rs.MovePrevious

        If rs.BOF = True And rs.EOF = False Then rs.MoveFirst

    End If

    If record = Naviga.Lrec Then

        If Not rs.EOF Or Not rs.BOF Then rs.MoveLast

    End If

    If Not rs.EOF And Not rs.BOF Then

        txtCodice = rs.Fields("codice")

        txtDescr = rs.Fields("descr")

    End If

End Sub

Private Sub cnn_WillExecute(Source As String, _

                CursorType As ADODB.CursorTypeEnum, _

                LockType As ADODB.LockTypeEnum, _

                Options As Long, _

                adStatus As ADODB.EventStatusEnum, _

                ByVal pCommand As ADODB.Command, _

                ByVal pRecordset As ADODB.Recordset, _

                ByVal pConnection As ADODB.Connection)

    PrintStatus "WillExecute"

    MsgBox "will Execute"

End Sub

Private Sub cnn_ExecuteComplete(ByVal RecordsAffected As Long, _

                                ByVal pError As ADODB.Error, _

                        adStatus As ADODB.EventStatusEnum, _

                        ByVal pCommand As ADODB.Command, _

                        ByVal pRecordset As ADODB.Recordset, _

                        ByVal pConnection As ADODB.Connection)

    PrintStatus "ExecuteComplete"

End Sub

Private Sub cnn_WillConnect(ConnectionString As String, _

                            UserID As String, _

                            Password As String, _

                            Options As Long, _

                            adStatus As ADODB.EventStatusEnum, _

                            ByVal pConnection As ADODB.Connection)

    PrintStatus "WillConnect"

    MsgBox "willconnect"

End Sub

Private Sub PrintReason(adReason As ADODB.EventReasonEnum)

    Select Case (adReason)

        Case adRsnAddNew:

            PrintStatus "AddNew"

        Case adRsnClose:

            PrintStatus "Close"

        Case adDelete:

            PrintStatus "Delete"

        Case adRsnFirstChange:

            PrintStatus "First Change"

        Case adRsnMove:

            PrintStatus "Move"

        Case adRsnMoveFirst:

            PrintStatus "MoveFirst"

        Case adRsnMoveLast:

            PrintStatus "MoveLast"

        Case adRsnMoveNext:

            PrintStatus "MoveNext"

        Case adRsnMovePrevious:

            PrintStatus "MovePrevious"

        Case adRsnRequery:

            PrintStatus "Requery"

        Case adRsnResynch:

            PrintStatus "Resynch"

        Case adRsnUndoAddNew:

            PrintStatus "Undo AddNew"

        Case adRsnUndoDelete:

            PrintStatus "Undo Delete"

        Case adRsnUndoUpdate:

            PrintStatus "Undo Update"

        Case adRsnUpdate:

            PrintStatus "Update"

        End Select

End Sub

 

Print | posted on mercoledì 18 gennaio 2006 21:11

Feedback

# Un esempio di gestione eventi su ADO con vb6

Left by Il blog di Luciano Bastianello at 18/01/2006 21:18
Gravatar

# re: Un esempio di gestione eventi su ADO con vb6

Left by Incantatore at 08/10/2006 05:18
Gravatar Gentilmente chi mi commenta questa parte:

Sub NavigaRecord(record As Naviga)

If record = Naviga.Frec Then

If Not rs.EOF Or Not rs.BOF Then rs.MoveFirst

End If

If record = Naviga.Nrec Then

If rs.EOF = False Then rs.MoveNext

If rs.EOF = True And rs.BOF = False Then rs.MoveLast

End If

If record = Naviga.Prec Then

If rs.BOF = False Then rs.MovePrevious

If rs.BOF = True And rs.EOF = False Then rs.MoveFirst

End If

If record = Naviga.Lrec Then

If Not rs.EOF Or Not rs.BOF Then rs.MoveLast

End If

If Not rs.EOF And Not rs.BOF Then

txtCodice = rs.Fields("codice")

txtDescr = rs.Fields("descr")

End If

End Sub

# re: Un esempio di gestione eventi su ADO con vb6

Left by Luciano Bastianello at 08/10/2006 10:04
Gravatar Naviga è una enumerazione per precedente, successivo, inizio, fine.
Quando si fa un click sul bottone corrispondente viene richiamata la sub NavigaRecord con il parametro corrispondente all'azione prevista nel command.

# re: Un esempio di gestione eventi su ADO con vb6

Left by Luciano Bastianello at 08/10/2006 10:21
Gravatar Eof e Bof sono i "segnali" che il recordset pone quando si tenta di ottenere un elemento anteriore al primo record o successivo all'ultimo presente.
If not rs.eof and not rs.bof ad esempio garantisce che il recordset contiene almeno un elemento.

# re: Un esempio di gestione eventi su ADO con vb6

Left by Carlo at 08/10/2006 18:32
Gravatar Set rs = db.OpenRecordset("SELECT * FROM serialnumber WHERE seriali = '" & text1.text & "'", dbOpenSnapshot)

If rs.EOF And rs3.BOF Then

msgbox "Prova"

end if


quindi facendo cosi , se quello che scrivo in text1 non è presente campo " seriali" mi esce il msgbox , ovviamente mi controlla tutti i record presenti sotto quel campo!

GIusto?


ciao e grazie per la risposta

# re: Un esempio di gestione eventi su ADO con vb6

Left by Carlo at 08/10/2006 21:37
Gravatar Ti spiego perchè il mio intendo fare un if seguente:


Io ho un database con il campo "seriali" dove ci son 4 record

il mio itendo è :

se il seriale che si trova nella textbox1 non è presente nei 4 record , esce il msgbox se no nn esce nulla.


Il codice che ho scritto sopra può andare bene? la funzione rs.EOF and rs.BOF , server per far leggere tutti i record in un determinato campo?

O si fa in un altro modo?


grazie tante

# re: Un esempio di gestione eventi su ADO con vb6

Left by Luciano Bastianello at 08/10/2006 21:43
Gravatar rs.eof e rs.bof sono relativi allo stato del recordset.
Se rs.eof (end of file) è vero vuol dire che si tenta di prendere il record successivo all'ultimo presente nel recordset.
Viceversa rs.bof diventa vero quando si tenta di prendere il record precedente al primo.
Questi stati vengono generati anche rispetto al recordset in cui sono stati posti dei filtri.
Con eof e bof non c'è nessun record corrente

# re: Un esempio di gestione eventi su ADO con vb6

Left by Carlo at 08/10/2006 22:04
Gravatar Quindi conclusione li posso utilizzare per quello che voglio fare?


grazie

Your comment:





 
Please add 3 and 6 and type the answer here:

Copyright © Luciano Bastianello

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski