Alternativa a Dlookup per molti controlli

di il
14 risposte

Alternativa a Dlookup per molti controlli

Buonasera,
sono certo che per voi sia una banalità ma non riesco a capire come procedere:
Devo assegnare dei valori corrispondenti a diversi velori di uno stesso campo a dei controlli.
La prima cosa che viene in mente è quella di usare la funzione dlookup ma per molti record non è la cosa migliore. Per eseguire singola assegnazione posso usare il seguente codice (con N_ID variabile tipo public):
Dim rst As DAO.Recordset

Set DBCorrente = CurrentDb

Set rst = DBCorrente.OpenRecordset("Valore_Analisi", dbOpenDynaset)
rst.FindFirst ("ID_Assegnazione=" & N_ID)
Do While Not rst.NoMatch
Form_Ins_Comb.cbo_asp.Value = rst.Fields("Valore_Analisi")
rst.FindNext ("Valore_Analisi")
Loop

rst.Close
DBCorrente.Close
I valori da assegnare ad tutti i controlli devo soddisfare queste condizioni: tutti dovranno avere la stessa ID_Assegnazione, ma valore campi ID_Analisi_Campione diversi come si potrebbe fare utilizzando la funzione dlookup:
Dim Form As Form
Set Form = Form_Ins_Comb
With Form
.cbo_asp = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=46")
.cbo_colASTM = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=21")
.txt_visc40 = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=2")
.txt_ppoint = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=8")
.txt_cpoint = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=9")
.txt_fpoint = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=5")
.cbo_reazH2O = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=36")
.txt_ridvolH2O = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=35")
.txt_demul25 = DLookup("[Valore_Analisi]", "Valore_Analisi", "ID_Assegnazione =" & N_ID & " and ID_Analisi_Campione=32")
End With
Come potrei modificare il primo codice?
Grazie.

14 Risposte

  • Re: Alternativa a Dlookup per molti controlli

    Dal momento che ID_Assegnazione non cambia invece di aprire la tabella intera apri SOLO i records con ID_Assegnazione=N_ID... e dentro questo recordset usi il findfirst pern cercare i vari ID_Analisi_Campione=46/2/4/7 ecc...
    Se tu poi avessi chiamato i controlli come i nomi dei campi sarebbe stato ancora più semplice...
  • Re: Alternativa a Dlookup per molti controlli

    Intendi qualcosa del genere?
    Dim DBCorrente As DAO.Database
    Dim rst As DAO.Recordset, strsql As String
    
    Set DBCorrente = CurrentDb
    strsql = "SELECT Valori_Analisi FROM Valori_Analisi WHERE ID_Assegnazione=" & N_ID
    Set rst = DBCorrente.OpenRecordset(strsql)
    If Not rst.BOF And Not rst.EOF Then
    Form_Ins_Comb.cbo_asp.Value = rst.FindFirst("ID_Valore_Analisi= 46")
    Form_Ins_Comb.cbo_colASTM.Value = rst.FindFirst("ID_Valore_Analisi= 21")
    End If
    rst.Close
    DBCorrente.Close
  • Re: Alternativa a Dlookup per molti controlli

    Se funziona si, metterei in ordine crescente il predicato SQL per ID_Analisi_Campione e di.conseguenza i numeri per non fare andare avanti indietro il bookmark ma solo avanti riducendo molto i tempi.
  • Re: Alternativa a Dlookup per molti controlli

    Scusami, un'altra cosa:
    Se tu poi avessi chiamato i controlli come i nomi dei campi sarebbe stato ancora più semplice...
    cosa intendi?
  • Re: Alternativa a Dlookup per molti controlli

    No nel tuo caso non è indicativa in effetti... non fai riferimento a Controlli con nomi assimilabili ma a Valori specifici quindi va bene cosi.
  • Re: Alternativa a Dlookup per molti controlli

    Ho scritto il codice utilizzando FindFirst senza provarlo. Mi da errore. Probabilmente non posso utilizzare il metodo in questo modo. Esiste una alternativa che accetta un criterio?
  • Re: Alternativa a Dlookup per molti controlli

    DAO (seek)
    ADO (Find)
  • Re: Alternativa a Dlookup per molti controlli

    Comunque sia FindFirst che FindNext accettano un criterio ...
  • Re: Alternativa a Dlookup per molti controlli

    Certo che accettano un criterio. Infatti chiedevo un metodo che pur accettando un criterio possa fare qualcosa del genere:
    Form_Ins_Comb.cbo_asp.Value = rst.FindFirst("ID_Valore_Analisi= 46")
    ma utilizzando FinfFirst non si può fare a quanto pare.
  • Re: Alternativa a Dlookup per molti controlli

    eddy1973 ha scritto:


    Ho scritto il codice utilizzando FindFirst senza provarlo. Mi da errore. Probabilmente non posso utilizzare il metodo in questo modo. Esiste una alternativa che accetta un criterio?
    Hai 136 messaggi all'attivo, magari se ci dici qual'è l'errore evitiamo di andare a tentoni!
  • Re: Alternativa a Dlookup per molti controlli

    max.riservo ha scritto:


    DAO (seek)
    ADO (Find)
    DAO espone senza problemi FindFirst:
    https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao

    Seek invece ha un problema che solitamente rende sconveniente il suo utilizzo, ovvero non funziona su Rs aperti su LinkedTable.
  • Re: Alternativa a Dlookup per molti controlli

    eddy1973 ha scritto:


    Certo che accettano un criterio. Infatti chiedevo un metodo che pur accettando un criterio possa fare qualcosa del genere:
    Form_Ins_Comb.cbo_asp.Value = rst.FindFirst("ID_Valore_Analisi= 46")
    ma utilizzando FinfFirst non si può fare a quanto pare.
    La sintassi non è corretta, si scrive così:
    
    rst.FindFirst("ID_Valore_Analisi= 46")
    If NOT rs.NoMatch then 
        Form_Ins_Comb.cbo_asp.Value = rst!NomeCampodaRestituire
    End If
    
  • Re: Alternativa a Dlookup per molti controlli

    Non ho detto che FindFirst non accetta criteri… altrimenti non avrei scritto:
    rst.FindFirst("ID_Valore_Analisi= 46")
    dove "ID_Valore_Analisi = 46" è un criterio.
  • Re: Alternativa a Dlookup per molti controlli

    Si ma quello che hai scritto è completamente sbagliato poi vedi tu.
Devi accedere o registrarti per scrivere nel forum
14 risposte