Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

[VBA | Access2003] Bookmark e Recorset ... apprendimento!

  1. #1
    gplele non è in linea Scolaretto
    Ciao a tutti, stocercando di capire meglio l'uso dei bookmark, ed ho un problemino da affrontare: vorrei eseguire una ricerca in una tabella tale per cui: inserisco in una controllo text non associato[CDRicerca] il codice da ricercare (es. il codice dell'articolo) e vorrei cercarlo rispettivamente nel campo [CDEAN] (e fin qui tutto ok!) però se non lo trovo vorrei continuare la ricerca su un nuovo campo, ad es. [CDArticolo] (e qui gatta ci cova). Ora non ho capito se devo chiudere il recorset dopo la prima ricerca e e ricrearlo oppure posso inserire l'istruzione RS.MoveFirst per tornare all'inizio del record e fare la nuova ricaerca. Segue il codice che ho fatto giusto per esplicitare quanto detto sopra. Grazie a chi vorrà aiutarmi a capire anche questo passo nel mondo dei recorset. Grazie




    Dim strRicerca, CDErr As String
    Dim RS As Object
    On Error GoTo ERR1

    Set RS = Me.Recordset.Clone
    strRicerca = "[CDEAN]=" & "'" & Me.CDRicerca & "'"
    RS.FindFirst strRicerca
    If Not RS.EOF Then
    Me.Bookmark = RS.Bookmark
    Exit Sub
    End If
    RS.Close
    strRicerca = "[CDArticolo]=" & "'" & Me.CDRicerca & "'"
    Set RS = Me.Recordset.Clone
    RS.MoveFirst
    RS.FindFirst strRicerca
    If Not RS.EOF Then
    Me.Bookmark = RS.Bookmark
    Exit Sub
    End If
    'RS.Close
    RS.Close

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Commetti alcuni errori.
    Uno è di concetto.

    Se devi cercare in una TABELLA questo è il metodo sbagliato per eccellenza...!
    Questo metodo si usa quando si dispone di un Recordset già Popolato in particolar modo con Oggetti DataBound come Form/Combo/List.

    Nello specifico nelle Form, se per cercare intendi SPOSTARE il focus sul RECORD che soddisfa il criterio, la cosa si modifica un pò in quanto si deve usare un tipo
    specifico di Recordset definito RECORDSETCLONE.

    Altra cosa che non chiarisci per la ricerca è il DataType dei campi [CDEAN] e [CDArticolo]...
    Di solito il [CDEAN] è numerico o sbaglio...?
    Tu stai formattando i criteri di Ricerca come TESTO con gli apicetti...!

    Altra cosa, con il Metodo FINDFIRST non si va poi a leggere la proprietà EOF, ma NoMatch adatta per lo scopo...!
    Me.RecordsetClone.FindFirst "[CDEAN]=" & Me.CDRicerca
    If NOT Me.RecordsetClone.NoMatch Then Me.BookMark=Me.RecordsetClone.Bookmark
    ....
    
    La questione BookMark poi a cosa serve...?

    L'oggetto FORM ed il suo RECORDSETCLONE hanno dei Pointer che possono essere disallineati, e questo accade proprio quando fai ricerche sul CLONE.
    In questo caso mentre stai ancora visualizzando il 1° Record, il CLONE è sul 35°... quindi non aggiorni la visualizzazione alla ricerca fatta.

    Per riallineare i 2 Pointer si procede con l'uguagliamento, in quel modo il Record attivo della Form sarà il 35° come definito dal CLONE.
    ℹ️ Leggi di più su @Alex ...

  3. #3
    gplele non è in linea Scolaretto
    Alex ti ringrazio moltissimo ... mi hai dato strumenti su cui studiare e lavorare! Per cercare di dare delle indicazioni ai tuoi dubbi e possibili miei errori sintetizzo i desiderata:
    1. Ho una form all'interno della quale voglio digitare un codice (che può essere codice articolo, codice EAN, codice fornitore) e cercarlo nei rispettivi campi finchè non lo trovo, ovvero prima cerco nel codice AEN, poi nel codice Articolo e poi Fornitore. Quando lo trovo vorrei visualizzarlo (quindi mi posiziono su quel record) e termina la mia ricerca.
    2. Per i codici che tratto ho dovuto definire i codici articolo e i codici fornitori come testo perchè li ho alfanumerici, e ho creato ilcodice EAN anch'esso come testo; qui non so se ho sbagliato perchè alcuni codici iniziano con lo zero (codici produttori liberi nello standard internazionale) e quindi ho ipotizzato che un campo numerico non mi potesse poi mantenere lo zero iniziale.

    Precisato questo ritieni che sia corretto lavorare con il recorsetclone oppure mi potresti suggerire una soluzione più idonea e performante? Si tratta come hai ben capito di una "semplice" ricerca di un articolo. Ti ringrazio tantissimo per il tuo aiuto che mi permette sempre di trovare spunti su cui studiare e lavorare per migliorare le mie conoscenze. Ciao e buona giornata.

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Quote Originariamente inviato da gplele Visualizza il messaggio
    Alex ti ringrazio moltissimo ... mi hai dato strumenti su cui studiare e lavorare! Per cercare di dare delle indicazioni ai tuoi dubbi e possibili miei errori sintetizzo i desiderata:
    1. Ho una form all'interno della quale voglio digitare un codice (che può essere codice articolo, codice EAN, codice fornitore) e cercarlo nei rispettivi campi finchè non lo trovo, ovvero prima cerco nel codice AEN, poi nel codice Articolo e poi Fornitore. Quando lo trovo vorrei visualizzarlo (quindi mi posiziono su quel record) e termina la mia ricerca.
    2. Per i codici che tratto ho dovuto definire i codici articolo e i codici fornitori come testo perchè li ho alfanumerici, e ho creato ilcodice EAN anch'esso come testo; qui non so se ho sbagliato perchè alcuni codici iniziano con lo zero (codici produttori liberi nello standard internazionale) e quindi ho ipotizzato che un campo numerico non mi potesse poi mantenere lo zero iniziale.
    Corretto, vada per il campo TESTO, a quel punto inserirari semplicemente gli APICETTI.
    Quello che non capisco è perchè tu debba cercare lo stesso codice su 3 Campi diversi...

    Quote Originariamente inviato da gplele Visualizza il messaggio
    Precisato questo ritieni che sia corretto lavorare con il recorsetclone oppure mi potresti suggerire una soluzione più idonea e performante? Si tratta come hai ben capito di una "semplice" ricerca di un articolo. Ti ringrazio tantissimo per il tuo aiuto che mi permette sempre di trovare spunti su cui studiare e lavorare per migliorare le mie conoscenze. Ciao e buona giornata.
    Va benissimo il RecordsetClone per come mi hai descritto, siccome non vuoi Filtrare dei dati ma solo spostarti il codice che ti ho esposto sinteticamente è quello corretto, devi solo perfezionarlo.
    ℹ️ Leggi di più su @Alex ...

  5. #5
    gplele non è in linea Scolaretto
    GRazissimo!!!
    Per completezza: per lo stesso articolo posso avere uno dei tre codici (dipende dagli articoli) allora volevo semplificarmi la vita e anziche crearmi nel form tre caselle di testo corrispondenti ciascuna ad uno dei codici da ricercare (e fare una ricerca sul singolo campo), fare una sola casella di testo e carcare in tutti i tre i campi.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. [VBA] gestire recorset DAO a livello di Moduli di Classe
    Da (s)jumper nel forum Microsoft Word
    Risposte: 7
    Ultimo Post: 24-02-2014, 14:47
  2. Risposte: 3
    Ultimo Post: 30-09-2009, 13:48
  3. [VB6] Nomi dei campi di un recorset
    Da BrandonHeat nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 29-03-2007, 09:09
  4. eliminare recorset
    Da marinaio nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 10-06-2005, 07:20
  5. Aggiornare Recorset
    Da elios81 nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 28-10-2004, 04:06