IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Access
  New Posts New Posts RSS Feed - Demo - Filtro Stringa Sql Dinamica per Condizione Where
  FAQ FAQ  Forum Search   Events   Register Register  Login Login


REGISTRATEVI su IALWeb forum!

Topic ClosedDemo - Filtro Stringa Sql Dinamica per Condizione Where

 Post Reply Post Reply
Author
Message
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post Topic: Demo - Filtro Stringa Sql Dinamica per Condizione Where
    Posted: 24/Mag/2010 at 16:42

'(By65Franco) CREA FILTRO DIMAMICO WHERE PER UNA STRINGA SQL
' La function restituisce una stringa in formato sql da utilizzare come condizione where
' al richiamo di una form, come condizione where per la function me.filter da
' assegnare ad una form e altri possibili usi...
' Parametri Richiesti:
' - strSearch       > stringa di testo da ricercare
' - strNameField    > stringa nome del campo filed dove effettuare la ricerca
' - lngTypeField    > rappresenta il tipo di Fields 1=char 2=numeric 3=date
' - lngRelation     > (facoltativo) rappresenta l'operatore logico di relazione della ricerca da effettuare 1=And 2=Or
' - lngOper         > (facoltativo) rappresenta il tipo di ricerca da effettuare 1=Parola Esatta  2=Ogni Parola
'
Public Function myFilterDinamicWhere(ByVal strSearch As Variant, _
                                   ByVal strNameField As String, _
                                   ByVal lngTypeField As Integer, _
                                   Optional lngRelation As Integer = 2, _
                                   Optional lngOper As Integer = 2) As String
Dim lngI As Long
Dim strOper As String
Dim strSepar As String
Dim arySplit() As String
Dim strRelation As String
' default value function
myFilterDinamicWhere = Space(0)
' if text string egual empty else exit function and return empty
If Trim(strSearch) = Space(0) Then Exit Function
' control parameters - type fields
Select Case lngTypeField
Case 1
    strSepar = "'"
Case 2
    strSepar = Space(0)
Case 3
    strSepar = "#"
Case Else
    strSepar = "'"
End Select
' control parameters - operator
Select Case lngRelation
Case 1
    strRelation = "="
Case 2
    strRelation = " Like "
Case Else
    strRelation = "="
End Select
' control parameters - relation
Select Case lngOper
Case 1
    strOper = " And "
Case 2
    strOper = " Or "
Case Else
    strOper = " Or "
End Select
' extracting individual words from the text search
arySplit = Split(strSearch, Space(1))
' create sql string
For lngI = 0 To UBound(arySplit)
    myFilterDinamicWhere = myFilterDinamicWhere & _
                        IIf(myFilterDinamicWhere = Space(0), Space(0), strOper) & _
                        strNameField & _
                        strRelation & _
                        strSepar & _
                        IIf(lngRelation = 2, "*", Space(0)) & _
                        IIf(lngTypeField = 3, Format(arySplit(lngI), "mm/dd/yyyy"), arySplit(lngI)) & _
                        IIf(lngRelation = 2, "*", Space(0)) & _
                        strSepar
Next lngI
End Function

Come richiesto da un partecipante del Forum, ho sviluppato queste poche e semplici righe di codice messe all'interno di una function che permettono di ottenere una stringa Sql da porre come condizione Where quando si richiama un filtro .... nel caso della Demo la stringa viene passata a Me.Filter della from come riportato qui di seguito


Come funziona la demo ?  .... riporto quanto riportato nell'help della stessa:

Scopo della Function:
La function restituisce una stringa in formato sql da utilizzare come condizione where che può essere utilizzata in più ambiti come per esempio al richiamo di una form passando come condizione where il risultato della function, oppure come condizione where per la function Me.Filter da assegnare ad una Form e/o SubFrom...etc.
I Parametri Richiesti sono :
- strSearch       > stringa di testo da ricercare
- strNameField    > stringa nome del campo filed dove effettuare la ricerca
- lngTypeField    > rappresenta il tipo di Fields 1=char 2=numeric 3=date
- lngRelation     > (facoltativo) rappresenta l'operatore logico di relazione della ricerca da effettuare 1=And 2=Or
- lngOper         > (facoltativo) rappresenta il tipo di ricerca da effettuare 1=Parola Esatta  2=Ogni Parola

Nella demo messa a disposizione si esegue un filtro sul recordset della maschera.
Inserire le parole da ricercare e spuntando le Opzioni di "Relazione di Ricerca" e "Corrispondenza di Ricerca" si noterà come cambia l'impostazione all'interno della stringa Sql e come passare i parametri alla function "myFilterDinamicWhere()" che viene richiamata.

Notare che il Parametro "strTypeFields" (tipo di dati del campo dove eseguire la ricerca) non risulta impostabile nella form ma viene impostato in automatico da codice. Questo permette alla function di sapere come comportarsi per i campi di tipo testo, data, numerico e altri tipi.

In basso alla form vengono visualizzate due informazioni:
- la stringa di comando con i parametri passati di come deve essere richiamata la funtion "myFilterDinamicWhere()"
- la stringa Sql per la Where che viene restituita dalla function "myFilterDinamicWhere()"


Questo il Link per scaricare la demo: http://myfreefilehosting.com/f/580f3fa031_0.3MB

Come di consueto lascio a discrezione del carissimo Gregorio di valutare se la function può essere inserita nella sezione demo.

Nella speranza di aver fatto cosa utile a tutti ... ciaooo



Edited by 65.franco
Franco...
Back to Top
Sponsored Links


Back to Top
almorel View Drop Down
Veterano
Veterano
Avatar

Joined: 05/Set/2009
Location: Napoli
Status: Offline
Points: 1908
Direct Link To This Post Posted: 24/Mag/2010 at 18:50
Ciao Franco, ottimo !
un 107 e lode non te lo toglie nessuno !
Carissimi saluti.
Alberto
Back to Top
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post Posted: 24/Mag/2010 at 19:04

mmm, niente di speciale carissimo Alberto... solo una function che costruisce una stringa...  però semplifica se uno vuole scrivere meno righe di codice possibile.

Grazie 1000 per i complimenti e detto da te ne sono onorato ....

Un salutone....  ciaoooo

Franco...
Back to Top
Tommy_G View Drop Down
Veterano
Veterano
Avatar

Joined: 15/Mag/2007
Status: Offline
Points: 1470
Direct Link To This Post Posted: 24/Mag/2010 at 19:40








Tommy
Back to Top
Libeccio865 View Drop Down
Veterano
Veterano
Avatar

Joined: 03/Dic/2008
Status: Offline
Points: 1442
Direct Link To This Post Posted: 24/Mag/2010 at 22:56
Alla fine di una immensa giornata...
Riesco a rimanere stupefatto delle tue meraviglie carissimo 65.franco...
Ma quante ne sai...
E poi la precisione e la professionalità non si può che ammirare.
Sinceri complimenti... (con un pizzico di invidia )...
Un caro saluto... a tutti...

Libeccio865...passo e chiudo...


Se le cose sembrano andar meglio, c'è qualcosa di cui non stiamo tenendo conto.
Back to Top
65.franco View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 19/Apr/2009
Location: Italy
Status: Offline
Points: 4108
Direct Link To This Post Posted: 25/Mag/2010 at 08:19
Carissimi Tommy e Libeccio....
mi fate diventare rosso

Siete sempre troppo gentili....   un salutone, ciaooooooo
Franco...
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,063 seconds.