È ansible passare i parametri a livello di programmazione in una query di aggiornamento di Microsoft Access?

Ho una query piuttosto ampia, che unisce più di una dozzina di tabelle e voglio ritirare i record in base a un campo id ( ad es . : between nStartID and nEndID ).

Ho creato due parametri e li ho testati come criteri e funzionano bene.

Il problema è che ho bisogno di eseguire una query di inserimento da questa query principale, e ho bisogno dei parametri dove sono, nella query principale. Quindi, ho bisogno di passare i parametri ad esso a livello di programmazione.

Qualcuno ha idea di come questo può essere fatto?

Grazie.

Ho appena provato questo e funziona in Access 2010.

Supponi di avere una query SELECT con parametri:

 PARAMETERS startID Long, endID Long; SELECT Members.* FROM Members WHERE (((Members.memberID) Between [startID] And [endID])); 

Esegui quella query in modo interattivo e ti chiede [startID] e [endID]. Funziona, quindi si salva quella query come [MemberSubset].

Ora crei una query UPDATE basata su quella query:

 UPDATE Members SET Members.age = [age]+1 WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset]))); 

Esegui questa query in modo interattivo e ti viene chiesto di [startID] e [endID] e funziona bene, quindi lo salvi come [MemberSubsetUpdate].

È ansible eseguire [MemberSubsetUpdate] dal codice VBA specificando i valori [startID] e [endID] come parametri per [MemberSubsetUpdate], anche se in realtà sono parametri di [MemberSubset]. Questi valori di parametro “gocciolano verso il basso” dove sono necessari e la query funziona senza l’intervento umano:

 Sub paramTest() Dim qdf As DAO.QueryDef Set qdf = CurrentDb.QueryDefs("MemberSubsetUpdate") qdf!startID = 1 ' specify qdf!endID = 2 ' parameters qdf.Execute Set qdf = Nothing End Sub 

Prova a usare QueryDefs. Crea la query con i parametri. Quindi utilizzare qualcosa come questo:

 Dim dbs As DAO.Database Dim qdf As DAO.QueryDef Set dbs = CurrentDb Set qdf = dbs.QueryDefs("Your Query Name") qdf.Parameters("Parameter 1").Value = "Parameter Value" qdf.Parameters("Parameter 2").Value = "Parameter Value" qdf.Execute qdf.Close Set qdf = Nothing Set dbs = Nothing 

Mille grazie per le informazioni sull’utilizzo della collezione QueryDefs! Mi sono chiesto questo per un po ‘.

L’ho fatto in un modo diverso, senza utilizzare VBA, utilizzando una tabella contenente i parametri di query.

Es .: SELEZIONA a_table.a_field FROM QueryParameters, a_table DOVE a_table.a_field TRA QueryParameters.a_field_min E QueryParameters.a_field_max

Dove QueryParameters è una tabella con due campi, a_field_min e a_field_max

Può anche essere utilizzato con GROUP BY, se si includono i campi del parametro di query nella clausola GROUP BY e l’operatore FIRST nei campi dei parametri nella clausola HAVING.

Puoi anche usare TempVars – nota ‘!’ la syntax è essenziale Puoi anche usare TempVars - nota '!' la sintassi è essenziale