Ricerca record da maschera su altra tabella

di il
4 risposte

Ricerca record da maschera su altra tabella

Salve a tutti, sono nuovo e alle prime armi con Access.
sto creando un piccolo db con tre tabelle (Clienti, Fornitori e contratti).
Il db è di tipo molti a molti con le relative chiavi ID per singola Tabella.
La tabella contatti è in relazione con le due tabelle tramite i campi ID.
Ho creato una maschera per i clienti e una per fornitori con campi e bottoni per la navigazione. mentre per la ricerca ho utilizzato una casella combinata che mi riporta nei vari campi il cliente e/o fornitore selezionato.
Fin qui tutto ok.
il problema lo ho nella maschera contratti. In pratica voglio associare ad ogni cliente un fornitore e altri valori predefiniti. Vorrei , direttamente dalla maschera contratti, ricercare un cliente, già presente nella tabella clienti, e una volta selezionato far popolare i rispettivi campi.
Potreste dammi una mano su come risolvere tale problema? spero di essere stato chiaro. grazie a tutti.

4 Risposte

  • Re: Ricerca record da maschera su altra tabella

    Bif71 ha scritto:


    il problema lo ho nella maschera contratti. In pratica voglio associare ad ogni cliente un fornitore e altri valori predefiniti. Vorrei , direttamente dalla maschera contratti, ricercare un cliente, già presente nella tabella clienti, e una volta selezionato far popolare i rispettivi campi.
    Potreste dammi una mano su come risolvere tale problema? spero di essere stato chiaro. grazie a tutti.
    Ciao bif, per "popolare i rispettivi campi" intendi riempire le opportune caselle di testo della maschera? Secondo me hai bisogno di una funzione o una sub routine associata ad un pulsante che ti vada a recuperare il record voluto, cioè il cliente, nella tabella clienti e che poi imposti quello che hai bisogno nelle caselle di testo della maschera. Quanta conoscenza hai di VBA?
  • Re: Ricerca record da maschera su altra tabella

    Grazie per la risposta. Le mie conoscenze di VBA sono a livello base ma se mi dici come fare o mi fai qualche es. Magari riesco a tirar fuori qualche cosa. Da qualche parte dovrò iniziare se voglio imparare.
    Comunque sono riuscito usando la sella combinata , a far popolare i campi che volevo. Naturalmente élite una soluzione arrangiata e poco elegante. Quindi , come già detto sopra, se mi dai qualche spunto o mi fai un esempio magari studiandoci sopra, riesco a migliorare.
    Grazie ancora della disponibilità.
  • Re: Ricerca record da maschera su altra tabella

    Per accedere ai dati delle tabelle, io uso ADODB. In VBA devi aggiungere il riferimento alla libreria "Microsoft Activex Data Objects x.x Library", in base alla versione di Access che usi (io comunque uso il riferimento all versione 2.8 ). Per tutti i dettagli su ADO, se vuoi saperne di più, fai una ricerca sul web e troverai sicuramente tutto ciò che vuoi sapere.
    Non hai specificato per cosa vuoi ricercare i clienti perciò presumo che la ricerca venga effettuata per il cognome.
    Nella tua maschera, crea un tasto e nell'evento "su click" potresti scrivere una sub del genere:
    
    'Dichiarazione delle variabili
    Dim Con as ADODB.Connection
    Dim Rst as ADODB.Recordset
    Dim StrSQL as String, Cognome as String
    'Casella di Input per inserire il cognome
    Cognome = InputBox("Inserisci il Cognome:","MioDB")
    'Se la casella è vuota o annullo esce dalla sub
    If Cognome = "" then 
        Exit Sub
    end if
    'Stringa SQL di ricerca del record
    StrSQL = "SELECT * FROM Clienti WHERE='" & Cognome & "'" 
    'Creo l'oggetto Connessione e un nuovo Recordset
    Set Con = Currentproject.Connection 
    Set Rst = New ADODB.Recordset
    'Apro il Recordset in sola lettura
    Rst.Open StrSQL, Con
    'prendo i valori dei campi della tabella e li inserisco nelle caselle di testo della maschera
    Me.casella1 = Rst.Fields("Campo1")
    Me.casella2 = Rst.Fields("Campo2")
    '....
    'Chiudo il Recordset e la Connessione
    Rst.Close
    Con.Close
    'Imposto le variabili a 0
    Set Rst = Nothing
    Set Con = Nothing
    
    Questo è un esempio di codice base per la ricerca di un record specifico in una tabella.
    Fai attenzione ad una cosa però, se usi il cognome potresti avere più di un record che risponde al criterio di ricerca. Perciò ti consiglio di aggiungere una variabile integer con cui fare un conteggio preliminare dei record (Ciclo Do ... Loop) ed in base a quanti record vengono trovati modificare il comportamento della risposta della routine. Tramite una struttura If ... ElseIf ... Else ... End If, se il numero dei record è 0 allora la risposta potrebbe essere un messaggio di avviso che dice che il cognome non è stato trovato, se è 1 la risposta potrebbe essere quella che ti ho scritto mentre se la risposta è maggiore di 1 allora la cosa si complica un pochino. In quest'ultimo caso io aggiungerei una matrice dimensionata in base al numero dei record trovati in cui memorizzare i nomi e farei comparire un ulteriore scelta del nome, ilquale nome poi dovrà essere concatenato alla stringa di ricerca SQL per avere il record voluto.
    Non so se sono riuscito a spiegarmi molto bene in quest'ultimo caso ne se in situazioni del genere sia la strada più agevole ma in situazioni analoghe io ho risolto così.
  • Re: Ricerca record da maschera su altra tabella

    Secondo me non è necessario usare VBA. Dovresti solo chiarire:
    - tutti i campi di tutte le tabelle
    - quali campi vuoi vedere in maschera Contratti...o, se ho capito male...cosa vuoi vedere in maschera Contratti.
    Bisogna solo ottimizzare le caselle combinate dei campi Contratti.IDCliente e Contratti.IDFornitore.
Devi accedere o registrarti per scrivere nel forum
4 risposte