Newsgroup: it.comp.appl.access
Titolo: istruzione SQL

Buona sera , 
 
ho una casella di testo TxtCercaAnno e relativo pulsante di comando che mi filtra record secondo Anno scritto sulla stessa casella di testo ,
Ha questa istruzione :
 
Private Sub Cmd11_Click()
Dim H As String
 
 
 
   H = "SELECT IDPAY,IDMese,IDAnno,Mesi,Anni,Data,ImportoPay FROM AMRTblCostiMesePaypal Where Anni Like '*" & TxtCercaAnno.Value & "*' ;"
 
 
        Form_AMRMascheraPaypal.RecordSource = H
        Form_AMRMascheraPaypal.Requery
 
End Sub
 
puoi vedere  qui  
https://we.tl/t-DxJXuAwCVh
 
 
Vorrei sapere se e come posso aggiungere 
anche la ricerca e filtro per il mese ,oppure devo inserire altra casella testo e altro pulsante 
 
Grazie

Se hai il campo DATA, perchè hai anche un campo ANNO...?
Sono diversi...?
Di solito si usa sempre e solo il campo data per tutto, sfruttando le funzioni di ESTRAZIONE periodi... Anno/Mese/Giorno/Settimana...
 
Quindi YEAR(Data) è l'anno.
 
PEr come cotruisci la WHERE quel campo è stringa, se fosse numerico non si usa il LIKE con i JOLLY...
 
In fine se devi cercare per Mese/anno... si usa sempre il campo data ed hai 2 Opzioni...
 
PRIMA
2 TextBox impostando in ognuna le ValidationRule e le InputMask per inserire solo Numeri e, nel caso degli anni nel range che ti serve, e dei gioni >0 e <32
Questo per evitare di scrivere codice di VALIDAZIONE se uno scrive "AA" nelle textbox e tu ti aspetti un numero...
Quindi componi la WHERE concatenando Anno e Mese estraendoli dalla data concatenandoli con l'operatore Booleano AND.
 
"SELECT * FROM T2 WHERE Year(CampoData)=" & Me!txtAnno & " AND Month(CampoData)=" & Me!txtMese
 
Altrimenti usi una sola textbox, sempre inserendo l'InputMask per 2Numeri/2Numeri, e ti basi sempre il campo Data, estranedo con Format mm/yy e confrontandoli con la tectBox ma sapendo che va considerato testo.
 
"SELECT * FROM T2 WHERE Format('mm/yy',CampoData)='" & Me!TxtMMYY & "'"
 
Stai sempre sereno.
 
@Alex


personalmente se esiste un campo data uso sempre la ricerca dei 
movimenti da data a data che mi permette senza tanti sbattimenti di 
filtrare per anno, mese, settimana, periodo specifico
quindi con due caselle che contengono le due date limite e la stringa 
sql con il classico  where  tuadata Between ... and...
 
dalla immagine mi viene da pensare che anno e mese sono riferite al 
accredito su paypal mentre la data è la data che di trasferimento in 
conto? Quindi si parla di due date differenti?
se cosi non fosse usa la ricerca tra date e sei ok
 
ciao
BFS
 

 Quindi si parla di due date differenti?
 
Esatto
 
Sull'evento clic del pulsante  ho scritto 
 
H = "SELECT IDPAY,IDMese,IDAnno,Mesi,Anni,Data,ImportoPay FROM AMRTblCostiMesePaypal Where Anni Like '*" & TxtCercaAnno.Value & "*' ;"  
 
E fino qui va bene mi filtra la maschera secondo l'anno inserito 
 
però non riesco ad aggiungere anche il filtro per Mese 
Campo "Anni" (testo)
Campo "Mesi" (testo)
Casella testo  " TXTCercaMese "
 
il campo "Mesi"  non riesco a concatenarlo con il campo "Anni"
in modo che la risposta all'evento click del pulsante 
mi restituisca la maschera filtrata in base al mese e anno desiderati
 
ho provato così ma non va bene 
 
H = "SELECT IDPAY,IDMese,IDAnno,Mesi,Anni,Data,ImportoPay FROM AMRTblCostiMesePaypal Where Anni like '*" & Me!TxtCercaAnno.Value & " AND Where Mese like '*" & Me!TxtCercaMese.Value & "*' ;"
 
qual'è la giusta sintassi 
 
Grazie 
 
 
 
 


hai un where di troppo
 
prova cosi
 
  Where Anni like '*" & Me!TxtCercaAnno.Value & " AND Mese like '*" & 
Me!TxtCercaMese.Value & "*' ;"
 
 
se vuoi approfondire
https://support.office.com/it-it/article/istruzione-select-56615a70-3458-4e7c-8580-bd1d19a5de91
 
 
ciao
 
 

 

dimenticavo
togli gli asterischi che non hanno senso
infatti con la tua sintassi se metti anno 2019 e mese 1 nel risultato 
della ricerca ti verrebbe furoi anche il mese 10 11  e 12
 
ciao
BFS

 Me!TxtCercaMese.Value & "*' ;"
 
ti sei perso anche un apice dopo l'anno
 
Where Anni like '" & Me!TxtCercaAnno.Value & "' AND Mese like '" & 
Me!TxtCercaMese.Value & "' ;"
 
se vorrai fare la ricerca per il solo anno e ingnorando il mese, metti 
nella casella del mese *
 
 
ciao
BFS


Perfetto così  funziona 
 
    Where Anni like '" & Me!TxtCercaAnno.Value & "' AND Mesi like '" & Me!TxtCercaMese.Value & "' ;"
 
Ciao  e grazie mille 
Giuseppe

Il like si applica a confronto tra stringhe... l'uso su campi numerici è discutibile, ovviamente gli asterischi sono, come detto all'inizio, errati per le considerazioni di ricerca allargata...
 
L'utilozzo di like implica 2 cose:
 
1) viene forzato il Casting dei 2 valori di confronto da numero a stringa
2) l'efficienza del like confronto all'uguale, operatore corretto per i numeri è meno performante.
 
Funziona ugualmente...? SI... e qui mi fermo.
 
https://support.office.com/en-us/article/like-operator-b2f7ef03-9085-4ffb-9829-eef18358e931
 
 
@Alex


confemo che il like non è consigliato ma lui dice che sono due campi di 
tipo testo e credo (spero) un motivo ci sia perchè siano testo e non 
numerici
Magari quella lista di dati lui la esporta da qualcosa, forse il portale 
di paypal, e magari nel campo anno e mese nel sono solo presenti i 
valori numerici di anni o mesi ma magari simboli o scritte particolari
 
che ne so tipo
2019	9	euro 600			
2019  	10   	euro 1526
2019	<in attesa> euro 0
--	--	euro 0
 
 
oppure guardando la videata potrebbre essere che il campo mese sia 
scritto con il nome del mese (supposizione) e quindi non numerico
 
poi per sua amissione programmare è un passatempo, non credo che due 
casting in più ammazzi le prestazioni di un banale filtro su una 
manciata di dati
 
 
 

 
 
Si i due campi sono tipo testo perché importati direttamente in quel formato 
con anno  in formato testo e mese scritto come nome mese 
 
il tutto funziona perfettamente per l'esigenza che ho,anche perchè come affermi il filtro è banale e i record di questa tabella sono poco più di 100   
 
questo il risultato : 
https://we.tl/t-ypY27Lg902
 
 
 
Come andrebbe sostituito il like e l'asterisco per eventuali campi numerici?
come diventerebbe  questa istruzione :
 
  Where Anni like '" & Me!TxtCercaAnno.Value & "' AND Mesi like '" & Me!TxtCercaMese.Value & "' ;"
 
la vorrei utilizzare in altre occasioni 
 
Grazie 
Giuseppe


Where Anni=" & Me!TxtCercaAnno.Value & " AND Mesi =" & 
Me!TxtCercaMese.Value & " ;"
 
 
in pratica togli gli apici e metti uguale al posto di liker
 
ciao
BFS
 

 BFS
 
Benissimo , 
Ho provato a fare una casella di testo per avere il totale del mese e anno scelto con il pulsante
 
sull'origine controllo della casella testo:
 
=DSum("ImportoPAY";"AMRTblCostiMesePaypal";" Mesi = " & "TXTCercaMese" And "Anni =" & "TxtCercaAnni")
 
però mi da un risultato errato
dove sbaglio ?
 
Giuseppe