107 messaggi dal 11 giugno 2001
Sembrerà una richiesta strana ma ho necessità di eseguire una query tipo

SELECT * FROM clienti WHERE citta = '" & citta & "'

che, nel caso in cui la variabile citta="roma" ... allora estra tutti i clienti di Roma. Sa dal form di richiesta ... il campo "citta" è un campo vuoto ... allora non estrae alcun record. E questo era prevedibile. Invece, vorrei che, se invio il form di richiesta lasciando il campo "citta" vuoto, allora l'istruzione sql estrae TUTTI i record indifferentemente.
Mi viene da pensare che devo fare una cosa tipo
if citta = "" then
citta = "TUTTI????"
end if

Cosa posso mettere al posto di TUTTI???? per far estrarre tutti i record?

Grazie

-----------------
Se qualcosa non ti è chiaro ... guardalo da un'altra angolazione, probabilmente sei controluce!
aliosciaperr@biztonet.it
www.biztonet.it
-----------------

-----------------
Se qualcosa non ti è chiaro ... guardalo da un'altra angolazione, probabilmente sei controluce!
aliosciaperr@biztonet.it
www.biztonet.it
-----------------
Devi fare così:

if citta = "" then
sql= "SELECT * FROM clienti"
else
sql= "SELECT * FROM clienti WHERE citta = '" & citta & "'"
end if

Ciao

107 messaggi dal 11 giugno 2001
Avevo già pensato a una soluzione simile ... ma il problema è più complesso. Supponiamo che i campi da filtrare siano numerosi tipo
CITTA, NAZIONE, NUM_ACQUISTI, ecc ecc,
Se un utente lascia uno o più campi vuoti nel form allora l'istruzione sql non dovrà Filtrare quei campi ma solo i campi selezionati. In maniera molto meccanica si può fare allo stesso modo con
if citta = "" then .... ecc ecc
ma dovrei scrivere una istruzione per ogni caso possibile .... a scapito della fluidità del codice.
Allora ripropongo il quesito. Se scrivo la stringa

SELECT * FROM clienti WHERE citta = '" & citta & "'

è possibile passare al parametro "citta" un certo valore che l'sql intermpreti come "seleziona tutti" ?

Grazie

-----------------
Se qualcosa non ti è chiaro ... guardalo da un'altra angolazione, probabilmente sei controluce!
aliosciaperr@biztonet.it
www.biztonet.it
-----------------

-----------------
Se qualcosa non ti è chiaro ... guardalo da un'altra angolazione, probabilmente sei controluce!
aliosciaperr@biztonet.it
www.biztonet.it
-----------------
60 messaggi dal 13 febbraio 2002
nel corpo del programma metti una cosa del genere:

if i_cln="" and sz_tipo="" and sz_stato="" and dt_periodo1="" and dt_periodo2="" and sz_acquisitore="" then

'apertura recordset estrapolando tutti i dati
sz_sql="select * from trattative order by periodo_acq ;"
rs_trattative.Open sz_sql, obj_conn, adOpenstatic, adlockreadonly

else

'chiamo la funzione per la creazione della stringa sql
sz_sql=costr_sql(i_cln, sz_tipo, sz_stato, dt_periodo1, dt_periodo2, sz_acquisitore)

end if


la funzione costr_sql sraà fatta così:

Function costr_sql(i_cln, sz_tipo, sz_stato, dt_periodo1, dt_periodo2, sz_acquisitore)
costr_sql="select * from trattative where "

if i_cln<>"" then
costr_sql=costr_sql & "id_ext_cln='" & i_cln & "' "
end if

if sz_acquisitore<>"" then
if i_cln="" then
costr_sql=costr_sql & "ext_staff='" & sz_acquisitore & "' "
else
costr_sql=costr_sql & "and ext_staff='" & sz_acquisitore & "' "
end if
end if

if sz_tipo<>"" then
if i_cln="" and sz_acquisitore="" then
costr_sql=costr_sql & "ext_tipologia='" & sz_tipo & "' "
else
costr_sql=costr_sql & "and ext_tipologia='" & sz_tipo & "' "
end if
end if

if sz_stato<>"" then
if i_cln="" and sz_tipo="" and sz_acquisitore="" then
costr_sql=costr_sql & "ext_stato='" & sz_stato & "' "
else
costr_sql=costr_sql & "and ext_stato='" & sz_stato & "' "
end if
end if

if dt_periodo1<>"" and dt_periodo2<>"" then
if i_cln="" and sz_tipo="" and sz_stato="" and sz_acquisitore="" then
costr_sql=costr_sql & "periodo_acq between '" & dt_periodo1 & "' and '" & dt_periodo2 & "' "
else
costr_sql=costr_sql & "and periodo_acq between '" & dt_periodo1 & "' and '" & dt_periodo2 & "' "
end if
end if

if dt_periodo1<>"" and dt_periodo2="" then
if i_cln="" and sz_tipo="" and sz_stato="" and sz_acquisitore="" then
costr_sql=costr_sql & "periodo_acq>='" & dt_periodo1 & "' "
else
costr_sql=costr_sql & "and periodo_acq>='" & dt_periodo1 & "' "
end if
end if

if dt_periodo1="" and dt_periodo2<>"" then
if i_cln="" and sz_tipo="" and sz_stato="" and sz_acquisitore="" then
costr_sql=costr_sql & "periodo_acq between '1950/01/01' and '" & dt_periodo2 & "' "
else
costr_sql=costr_sql & "and periodo_acq between '1950/01/01' and '" & dt_periodo2 & "' "
end if
end if

end function

ps: ovviamente io avevo tali parametri in entrata e tu ne avrai degli altri, comunque lo schema è questo e funziona!!!!!!la funzione io l'ho messa in un file include!!!!!


ciao vaargard

107 messaggi dal 11 giugno 2001
Ciao Vaargard, grazie per i codici ... in effetti anche io avevo pensato a una cosa così ... però speravo veramente che l'sql avesse un codice JOLLY per far passare tutti i campi in caso di parametro di ricerca vuoto.

Ad ogni modo seguirò il tuo esempio, grazie.

-----------------
Se qualcosa non ti è chiaro ... guardalo da un'altra angolazione, probabilmente sei controluce!
aliosciaperr@biztonet.it
www.biztonet.it
-----------------

-----------------
Se qualcosa non ti è chiaro ... guardalo da un'altra angolazione, probabilmente sei controluce!
aliosciaperr@biztonet.it
www.biztonet.it
-----------------
34 messaggi dal 06 settembre 2002
Prova cosi a me funziona:

sql = "SELECT * FROM clienti WHERE 1=1"
if citta <> "" then
sql = sql & "and citta='" & citta &"'"
end if
if nazione <> "" then
sql = sql & "and nazione ='" & nazione &"'"
end if
if num_acquisti <> "" then
sql = sql & "and num_acquisti = " & num_acquisti
end if
.......

set ricerca = cn.execute(sql)

Se tu non metti nulla nei campi di ricerca lui prende tutti i record.

Ciao
Maito



Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.