Uscire da una maschera senza un click

di il
6 risposte

Uscire da una maschera senza un click

Cari tutti;
ne faccio una questione di principio e anche funzionale.
In masK1 ho una tabella e da questa apro una seconda mask2 per aggiungere alla prima nuovi record (tanti).

Per evitare il passaggio ozioso tramite un apposito comando ESCI, io desidero che quando esco dal campo di input di mask2 con un "Invio" in evento _Exit, mask2 si chiuda in quel preciso momento e mi passi il controllo alla mask1.

Access risponde con l'errore 2585 in quanto non è possibile eseguire questa azione durante un elaborazione di un evento di maschera.

Secondo voi, esiste una soluzione alternativa?

6 Risposte

  • Re: Uscire da una maschera senza un click

    Salva prima di chiudere.
  • Re: Uscire da una maschera senza un click

    Mio caro Alex, ti ho letto da stamattina ma sono ancora adesso impegolato nel problema che, mentre da un lato si è sanato copiando la maschera e rinominandola, dall'altra parte si è complicata una sub che invece andava benissimo.
    Ciò nonostante non abbia cambiato niente.
    In pratica, in questa mask2 collegata ad una tabella, ho una casella di testo da cui prelevo un ID.
    Faccio un recordsetclone del record ma non clona niente.
    Se voglio leggere i nomi dei campi, mi da enne volte la stringa di Select...
    Non ci capisco più niente. Ovviamente la FindFirst non va a buon fine in quanto l'archivio risulta vuoto. Ma non lo è.
    Sono in panne. Mi puoi dare qualche suggerimento per favore? Ho anche ricompattato il database pensando che potesse risolvere.
    Ciao
  • Re: Uscire da una maschera senza un click

    antocuomo ha scritto:


    Mio caro Alex, ti ho letto da stamattina ma sono ancora adesso impegolato nel problema che, mentre da un lato si è sanato copiando la maschera e rinominandola, dall'altra parte si è complicata una sub che invece andava benissimo.
    Ciò nonostante non abbia cambiato niente.
    In pratica, in questa mask2 collegata ad una tabella, ho una casella di testo da cui prelevo un ID.
    Sinceramente detta così non saprei cosa suggerire.
    Sono certo che tu abbia complicato le cose ma non ho elementi, vado a naso... e personalmente fatico anche a comprendere i motivi per i quali hai fatto tutto questo "lavoro"...

    antocuomo ha scritto:


    Faccio un recordsetclone del record ma non clona niente.
    In che senso...? il RecordsetClone è un Oggetto particolare, un duplicato del Recordset di Maschera che rispecchia lo stato attuale...

    antocuomo ha scritto:


    Se voglio leggere i nomi dei campi, mi da enne volte la stringa di Select...
    Questa poi... risulta NON COMPRENSIBILE... se vuoi l'elenco dei Nomi... si cicla la collection Fields dell'Oggetto RecordSetClone...

    antocuomo ha scritto:


    Non ci capisco più niente. Ovviamente la FindFirst non va a buon fine in quanto l'archivio risulta vuoto. Ma non lo è.
    No, evidentemente è vuoto l'oggetot che usi... quindi devi andare a capire perchè e dove commetti l'errore di assegnazione.

    antocuomo ha scritto:


    Sono in panne. Mi puoi dare qualche suggerimento per favore? Ho anche ricompattato il database pensando che potesse risolvere.
    Ciao
    Quando si scrive troppo codice... o si hanno le idee chiare sul codice o si stanno commettendo grossi ERRORI strutturali... e spesso è la 2°...
    Con Access si scrive tanto codice solo se si usano procedure particolari o Classi, altrimenti qualche cosa puzza...
    Senza vedere nulla non so aiutarti, devi applicare le regole di DEBUG basilari per il codice.
  • Re: Uscire da una maschera senza un click

    Ho una normale casella di testo che si chiama sceltanome. In essa digito un nome e, per ogni lettera che scrivo la sua routine su change mi fa apparire in una casella di riepilogo tutti i record estratti dalla tabella che rispondono alla chiave.
    Private Sub sceltanome_Change()
        Dim indizio, ricerca As String
        indizio = Me!sceltanome.Text
        ricerca = "Select id_vis, nome, datana from Visitatori Where ([nome] like " & Chr$(34) & "*" & indizio & "*" & Chr(34) & ");"
        Me!trovati.RowSource = ricerca
        Me!trovati.Requery
    End Sub
    Già al primo carattere inserito i record sono tanti e li vedo nella casella di riepilogo che ho chiamato "trovati".
    Quindi vado a cliccare su uno di questi record per processarlo.
    Private Sub trovati_Click()
        Dim scelta As Recordset
        Set scelta = Me.RecordsetClone
        
        Dim fld As Field
        For Each fld In scelta.Fields
            MsgBox scelta.Name    '  mi risponde solo e sempre " Select id_Vis, Nome, datanas.....)"
        Next
    
        scelta.FindFirst "[id_Vis]= " & str(Me!trovati)
        If scelta.NoMatch = True Then
            MsgBox "no match"                   '  è sempre no match
            Exit Sub
        Else
            MsgBox "Yes, it match"
        End If
        Me.Bookmark = scelta.Bookmark
        ....
    End Sub
    Mi viene il dubbio che controlli copiati brutalmente da altre maschere con copia e incolla, a volte possono dare problemi in una nuova struttura. Mi è già capitato un'altra volta.
    Pensi che sia il caso di rifare la maschera?
  • Re: Uscire da una maschera senza un click

    Il problema è proprio quando si copia/incolla codice non capito...
    Spiegazione:
    Dim fld As Field
        For Each fld In scelta.Fields
            MsgBox scelta.Name    '  mi risponde solo e sempre " Select id_Vis, Nome, datanas.....)"
        Next
    
    Premesso che questa parte di codice va eliminata....
    Secondo te Scelta cosa è...?
    La proprietà Nome dell'oggetto Scelta che è un Recordset rappresenta l'origine del Recordset quindi come fa a cambiare...?
    In quella riga con il MSGBOX eventualmente dovevi scrivere fld.Name....
    Detto questo altro errore
    str(Me!trovati)
    
    Se devi convertire in Stringa leggi la guida cosa dice di quella funzione...
    Eventualmente fosse servito qualche cosa avresti dovuto usare CSTR(..)... ma in quel caso bastava non mettere nulla in quanto la concatenazione di un numero con il resto della stringa attiva la conversione o casting implicito.

    Alla fine mi piacerebbbe capkre perche non eviti di usare un Recordset aggiuntivo che l'oggetto Recordsetclone è fatto apposta per essere usato direttamente...
    Elimina il recordset Scelta ed utilizza in modo diretto il recordsetclone.

    Ora mi chiedo perché non hai usato una Combobox che funziona da textbox ed in automatico scorre al primo corrispondente...?
    poi su AfterUpdate o Enter o Exit fai il FINDFIRST sul recordsetclone di form e poi aggiorni il bookmark...?

    P.S. Dimenticavo... altri errori gravi, 2 in 3 righe di codice:

    antocuomo ha scritto:


    ....
    Private Sub sceltanome_Change()
        Dim indizio, ricerca As String  <-------------- ### La dichiarazione della Variabile [indizio] è errata ###
        indizio = Me!sceltanome.Text
        ricerca = "Select id_vis, nome, datana from Visitatori Where ([nome] like " & Chr$(34) & "*" & indizio & "*" & Chr(34) & ");"
        Me!trovati.RowSource = ricerca
        Me!trovati.Requery <-------------- [NON SERVE] l'assegnazione del ROWSOURCE lo fa già... 
    End Sub
    Il codice giusto senza sprechi che consente DEBUG regolare sarebbe questo:
    Private Sub sceltanome_Change()
        Dim ricerca As String 
        ricerca = Me!sceltanome.Text
        ricerca = "Select id_vis, nome, datana from Visitatori Where ([nome] like " & Chr$(34) & "*" & ricerca & "*" & Chr(34) & ");"
        Me!trovati.RowSource = ricerca
    End Sub
  • Re: Uscire da una maschera senza un click

    Non ho parole: rivedo tutto, grazie Alex
Devi accedere o registrarti per scrivere nel forum
6 risposte