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
vBulletin® v3.8.6, Copyright ©2000-2025, Jelsoft Enterprises Ltd.