Ciao a tutti.
Mi stanno chiedendo di fare un lavoro che credo sia al di là delle mie capacità ... ma ci sto provando.
Devo fare una sorta di previsione tramite i dati del conto economico dell'azienda.
Il conto economico elenca le voci dei conti che, credo, siano standard per quasi tutte le aziende italiane (almeno le srl).
Da una tabella che raccoglie i dati periodici (identificabili con una chiave tipo: anno+mese+codice) devo fare una previsione. Ad esempio per gli acquisti di materie prime che corrispondono al conto 004010 (è un esempio, non so se è realmente così), prendo i valori degli anni precedenti nel mese di competenza e faccio una sorta di previsione. I dati storici sono ad esempio:
- 2019080004010 (agosto 2019 voce 004010);
- 2020080004010 (agosto 2020 voce 004010);
- 2021080004010 (agosto 2021 voce 004010);
Ho una tabella di tutti questi dati storici (i conti tipo 00... sono circa 200), prendo come base i 3 anni precendenti a quello in corso e tutte le voci le trasferisco su una tabella temporanea. Su questa devo inserire poi delle righe con i valori di "previsione"
ad esempio la voce 202208004010 avrà un valore che dipende da quelli sopra elencati ma aumentata o diminuita a seconda del criterio (in una release successiva si potrà impostare un criterio differente per ogni conto .... oltre 200 criteri, ma lasciamo perdere per il momento).
La tabella che elenca tutti i tipi di conto (oltre 2000) deve essere filtrata con solo quelli che servono, in modo che per ciascuno possa andarmi a calcolare il valore previsionale (per ciascuna voce), la selezione deve essere fatta su più campi ma non capisco perché non riesco:
dim rst3 as ADODB.Recordset
dim t3 as String 'tabella da filtrare
dim strFiltro as String
t3="nome_tabella_"
strFiltro="(campo_1 Like '004%' OR campo_1 Like '005%' OR campo_1 Like '006%' ) AND (campo_2 <> Null)"
Set rst3=New ADODB.Recordset
rst3.open t3, CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTable
Debug.print "N° record: " & rst3.RecordCount 'mi serve per vedere i valori prima del filtro
Set rst3.filter(strFiltro)
Debug.Print "N° record dopo filtro: " & rst3.RecordCount
Non trovo il problema perché se il filtro è:
strFiltro="(campo_1 Like '004%' OR campo_1 Like '005%' OR campo_1 Like '006%' )"
oppure
strFiltro="(campo_2 <> Null)"
il codice funziona e mi restituisce il recordset filtrato (ovviamente il numero di record sarà diverso a seconda dei casi)
ma se uso la sequenza originaria, in cui il filtro è quello riportato nel codice mi restituisce un errore di runtime 3001.
Ho provato a mettere gli "*" al posto dei "%" come caratteri jolly, ho riquadrato i nomi dei campi con parentesi e naturlamente ho cercato ovunque su google e sui manuali che ho a disposizione, ma la sintassi dovrebbe essere quella che ho scritto.
I nomi dei campi nella tabella originaria (che non è fatta da me ma dal gestionale) hanno l'underscore non so se questo può essere un problema, solo che dovrebbe esserlo sempre, non capisco perché quando compongo il filtro su 2 campi diversi vada in errore.
Il codice sopra per il momento è in una public function, sto facendo solo delle prove.
Con Find sono riuscito ad estrarre i dati dalla tabella principale ed accodarli in quella di appoggio (nella quale ho aggiunto 2 campi, uno in cui la funzione now mi scrive il momento in cui l'inserimento del record viene eseguito e uno per differenziare questo ti po di record che è un dato storico dai record di previsione che saranno inseriti quando risolverò questo problema e andrò avanti).
Grazie in anticipo