PDA

Visualizza versione completa : Access 2003: Query dinamica


malena_visentin
10-02-2009, 20.02.05
Ciao a tutti, avrei bisogno di un vostro preziosissimo aiuto. Ho una query con vari campi (targa, numero telaio, marca autovettura, ecc. ecc), poi ho una maschera non associata a questa query ma con gli stessi controlli. in pratica al clic di un pulsante posizionato in questa maschera filtro la query in questo modo:
forms!nomemiamaschera!nomemiocontrollo.
facendo però in questo modo, sono costretta ad inserire tutti i criteri altrimenti non mi restituisce nulla. in realtà devo interrogare la query a volte usando un criterio e a volte più di uno. spero di essere stata chiara come spero di ricevere un vostro aiutino in merito. Nell'attesa auguro a tutti Voi una buona serata :)

miciomao
11-02-2009, 10.58.20
ciao, non ho cmq capito cosa alimenta la form

ma in pratica ti serve una maschera di ricerca dove poter visualizzare i dati filtrando N campi ?


Ciao
Alex

malena_visentin
11-02-2009, 11.14.02
Ciao Alex, grazie per aver dato interesse alla mia discussione. Si a me serve filtrare N campi utilizzando questa maschera. Però il problema sta nel fatto che a volte filtro un solo campo a volte più di un campo.

malena_visentin
11-02-2009, 11.28.14
inrete ho trovato un db che fa quello che chiedo. in pratica al clic di un pulsante usa questo codice:

Private Sub Comando29_Click()
On Error GoTo Err_Comando29_Click

' Dim stDocName As String

' stDocName = "QRYRICERCA"
' DoCmd.OpenQuery stDocName, acNormal, acEdit

Dim v_ctrl As Control

Dim v_value(6), v_name(6), v_sql, v_cond, v_data As String

Dim v_ind, v_ind_max, v_len, v_conta As Integer

Dim v_query As QueryDef

For Each v_query In CurrentDb.QueryDefs
If v_query.Name = "QRYRICERCA" Then
CurrentDb.QueryDefs.Delete "QRYRICERCA"
End If
Next v_query

v_ind = 0

v_cond = " "

For Each v_ctrl In Me.Form
If v_ctrl.Name = "N" Or v_ctrl.Name = "RIF" Or v_ctrl.Name = "NRIC" Or v_ctrl.Name = "NDIST" Or v_ctrl.Name = "COD" Or v_ctrl.Name = "DATAE" Then
If Not IsNull(v_ctrl.VALUE) Then
v_value(v_ind) = v_ctrl.VALUE
v_name(v_ind) = v_ctrl.Name
v_ind = v_ind + 1
End If
End If
Next v_ctrl

v_ind_max = v_ind - 1

v_sql = "select * from TLIBCAS where "

For v_ind = 0 To v_ind_max Step 1
If v_name(v_ind) = "DATAE" Then
v_cond = v_cond & "DATAE" & " = "
v_data = "#" & Format(v_value(v_ind), "mm/dd/yyyy") & "#"
v_cond = v_cond & v_data & " and "
Else
If v_name(v_ind) = "N" Or v_name(v_ind) = "NRIC" Or v_name(v_ind) = "NDIST" Or v_name(v_ind) = "COD" Then
v_cond = v_cond & v_name(v_ind) & " = "
v_cond = v_cond & "str(" & v_value(v_ind) & ") and "
Else
v_cond = v_cond & v_name(v_ind) & " = """
v_cond = v_cond & v_value(v_ind) & """ and "
End If
End If
Next v_ind

If v_cond <> " " Then
v_len = Len(v_cond)
v_len = v_len - 4
v_cond = Mid(v_cond, 1, v_len)
v_sql = v_sql & v_cond
Else
v_sql = "select * from TLIBCAS"
End If

Debug.Print v_sql

CurrentDb.CreateQueryDef("QRYRICERCA").SQL = v_sql

v_conta = DCount("*", "QRYRICERCA")

If v_conta = 0 Then
MsgBox "Non esistono dati per i criteri impostati"
Me.N.SetFocus
Else
DoCmd.OpenQuery "QRYRICERCA"
End If

Exit_Comando29_Click:
Exit Sub

Err_Comando29_Click:
MsgBox Err.Description
Resume Exit_Comando29_Click

End Sub


Logicamente non so adattarlo al mio caso

miciomao
11-02-2009, 11.34.03
Capito, puoi scrivermi tutti i nomi dei campi che vuoi filtrare ?

ne bastano anche 5/6 l'importante è che mi descrivi anche il tipo campo se numerico testo o altro

malena_visentin
11-02-2009, 11.45.34
ok Alex. i campi sono tanti, diciamo quelli che mi interessano sono "targa" che è testo, "data_immatricolazione" che è data e "pratica" che è numerico.

miciomao
11-02-2009, 12.46.49
Ok
ti allego qui l'esempio, sarebbe troppo complicato spiegare...
Vedi se è quello che cercavi

Cmq studialo bene sia la funzione della qry e la struttura dei relativi filtri, sia le routine associate ai controlli di ricerca, dovrai crearne altri per il resto delle colonne da filtrare.
Occhio anche alla differenza di filtri tra campi di tipo testo/data/numero

Buon divertimento

Ciao
Alex

malena_visentin
11-02-2009, 15.24.55
Grazie Alex, dire che funziona è inutile, ma dirti che sei un GENIO è d'obbligo. Ancora grazieeeeeeee!

miciomao
11-02-2009, 16.07.24
Grazie
Buona giornata