query multiselect

  • Creatore Discussione Creatore Discussione ferdi74
  • Data di inizio Data di inizio

ferdi74

Utente Attivo
2 Ago 2008
47
0
0
ciao a tutti..ho questa difficoltà..( premessa: parlo di asp js e access )
ho creato una form per una ricerca utenti in base al sesso,l'età,lo stato sociale ed una motivazione di presenza..la form invia i valori immessi ad un'altra pagina che interroga il db ed estrae i recordset degli utenti in base al tipo di ricerca..
se escludo l'età ho una query che interroga il db in questo modo è funziona:

Recordset1.Source = "SELECT * FROM utenti WHERE sesso & stato_sociale & qui_per ='"+ sesso.replace(/'/g, "''") + stato_sociale.replace(/'/g, "''") + qui_per.replace(/'/g, "''") +"'";

il problema è l'età..nella form do diverse possibilità di scelta..tipo dai 20 in su..dai 30 in su ecc..e singolarmente non ho problemi facendo una query del genere:

Recordset1.Source = "SELECT * FROM utenti WHERE RIGHT (data_di_nascita,4) < '"+ data_di_nascita.replace(/'/g, "''") + "'";

in modo che in base alle ultime 4cifre(cioè l'anno di nascita ) seleziono una fascia d'età o un'altra..

ma come faccio a fare un'unica query?..ci sto provando così ma mi dice che c'è un'errore di sintassi perchè manca un'operatore..

Recordset1.Source = "SELECT * FROM utenti WHERE RIGHT sesso & stato_sociale & qui_per & (data_di_nascita,4) < ='"+ sesso.replace(/'/g, "''") + stato_sociale.replace(/'/g, "''") + qui_per.replace(/'/g, "''") + data_di_nascita.replace(/'/g, "''") +"'";

qualcuno puo aiutarmi a correggerla?..grazie..:-)
 
Ciao :)

Questo tuo problema è l'esatta dimostrazione del motivo per cui detesto i software WYSIWYG come Dw. Ti creano di quei codici a volte così assurdi, da creare una sacco di problemi di gestione anche fra le cose più semplici.

La differenza che si presenta quando nella ricerca metti anche la data di nascita (da quel che capisco), è che l'anno di nascita, al contrario degli altri valori è un numerico, che quindi per esser concatenato ad una stringa ha bisogno di essere convertito in quest'ultima tipologia di variabile (ovvero string).

Prova a controllare in questa direzione.
Facci sapere!
:byebye:
 
ciao mio carissimo salvatore Pole.:-)..scusa se ti rispondo un po in ritardo..solo che purtroppo l'unica cosa che so è che il mio campo è di tipo data con formato predefinito gg/mm/aaaa..e non so come fare il test che mi hai chiesto..:-(..ho provato ad impostare il campo di tipo testo ma niente..poi ho provato ( sempre in access ) a dargli un valore predefinito cm stringa ma nn so cm si fa..:-(..ma questo valore stinga che dici bisogna impostarlo in access o in asp?..e in entrambe i casi..saresti così gentile da spiegarmi cm si fa?..scusami e grazie sempre..;-)
 
ciao mio carissimo salvatore Pole.:-)..
..scusami e grazie sempre..;-)
Eh eh, aspetta a ringraziare, prima devi vedere la parcella :D

SCherzi a parte, per confrontare le date devi fare un qualcosa del genere:

SELECT * FROM tabella WHERE campo_data > #valoredata#;

Ovvero la data va messa tra "cancelletti" (#)
Per confrontare la data di nascita, preleva l'anno tramite ASP dalla data inserita dall'utente, e fai una query del genere:

"SELECT * FROM tabella WHERE campo_data >= #01/01/" & valore_anno_data & "# AND campo_data <= #31/12/" & valore_anno_data & "#;"

Poi basta aggiungere a tali condizioni anche quelli già presenti (ce comunque Dw ti struttura in maniera assurda) e sei a posto.

Ps. Ti posto un link dove si spiega come funzionano e si utilizzano NORMALMENTE le SELECT in SQL, giusto per farti capire (paragonandolo) che schifo di codice genera Dw ;)
https://www.mrw.it/sql/guide/select-interrogazione-tabella_192.html
 
grazie mio salvatore..:-)..scusa se ci ho messo un po a rispondere ma ho sbattuto un bel po la testa tra prove e riprove..
dunque della questione delle date non ci ho capito niente e sono andato al manicomio..
la selct l'ho risolta seguendo il link che mi hai postato ed ho creato questa query che risponde alle mie esigenze..

"SELECT * FROM utenti WHERE sesso & stato_sociale & qui_per = '"+ sesso.replace(/'/g, "''") + stato_sociale.replace(/'/g, "''") + qui_per.replace(/'/g, "''") + "' AND RIGHT (data_di_nascita,4 )< '"+ data_di_nascita.replace(/'/g, "''") +"'";

grande..:-)..

ma non ho capito il discorso della data..io qui ho risolto così com'era..cioè di tipo data con formato predefinito gg/mm/aaaa...
( quando imposti il campo nel db cm data il valore è numerico?..e se si cm si converte in stringa nel db stesso o cn quelle query che mi hai postato?)
e poi quegli esempi di query che mi hai postato erano per ricavare l'età?..o per la query multiselct...scusa sn un po confuso..:-P..

cmq ho fatto un po di prove con quegli esempi che mi hai postato per cercare di tirar fuori qlcs e capine di più ma niente..
quello che fondamentalmente non ho capito ancora..prima di tutto..come si devono impostare le date nel db?..cm è meglio?..e le differenze tra i valori stringa, o numerico..cioè cm le riconosco cm si presentano fisicamente..e quali conviene usare o meno..:-(..

aiuto...credo che se mi avessi lì mi picchieresti per tutte queste domande..scusami ho ancora tanto tanto da imparare..:-P..cmq grazie di tutto intanto la query è risolta..:-)..ciaoooo...;-)
 
Ancora una volta non l'avrei risolta così.......ho imparato negli anni che non conoscere a fondo gli strumenti utilizzati è un grave problema.

Access è abbastanza potente da fornire funzioni per risolvere una situzione come la corrente. Access infatti è dotato di funzioni di DATA come ASP e quindi può tranquillamente fare una cosa del genere:

"SELECT * FROM tabella WHERE year(campo_data) < " + year(data_nascita)


mi sembra molto + semplice e affidabile come soluzione.... :byebye:
 
eh!...anche questa è una bella dritta..grazie..:-)...credo che nn smetterò mai di imparare in questo lavoro..;-)...grazie ciaoooo...
 

Discussioni simili