Newsgroup: it.comp.appl.access
Titolo: Costruzione automatica di istruzioni SQL

Vorrei sapere se qualcuno possiede il codice per la compilazione automatica
di istruzione SQL in base alla selezione di campi su una maschera.
In pratica vorrei fare, tramite codice, quello che si fa quando si
costruisce un query con la griglia. Di fatto viene generata un'istruzione
SQL ed, ovviamente, c'è un codice che lo fa.
Ecco, vorrei proprio quel codice...
Grazie
Stefano

 ha scritto nel
messaggio news:8eub1a$qiu$1...@serv1.iunet.it...

..Quisquillie... Pinzellacchere!!


Forse sei un pochino pretenzioso!
Ma sei proprio sicuro che per le tue esigenze non vadano altrettanto bene i filtri automatici che
Access mette a disposizione?
Puoi creare un menù di scelta rapida associato alla form o subform che ti pare, in cui inserisci le
varie opzioni di filtro predefinite (in base a selezione, esclusione selezione, Filtro Per, Rimuovi
filtro).
Puoi utilizzarle anche a catena, non è male...
Ciao.

Ti ringrazio, Silvio, per avermi risposto.
Il mio problema, purtroppo, non è cosa da poco.
Un cliente ci ha richesto un database, Ora, vuole una form in cui poter fare
una ricerca su 16 campi tutti in relazione fra di loro, in modalità AND e
OR.
Ciò significa che, a seconda dei campi che vengono riempini, dovrebbe essere
generata un'istruzione SQL diversa. Il problema è che, con 16 elementi, le
combinazioni possibili fra di loro sono almeno 700! DOVREI IN TEORIA
SCRIVERE 700 ISTRUZIONI SQL (Almeno solo la parte di instruzione WHERE, che
è l'unica che cambia... certo, c'è anche il copia-incolla, perchè molte
parti si ripetono, ma è comunque un lavoro esagerato).
In realtà, sono comvinto che il tutto potrebbe essere reso più semplice
sviluppando codice VBA appropriato, lo stesso che sicuramente c'è "sotto" la
griglia per la composizione delle query. Altrimenti, chi la scrive
l'istruzione SQL?!
Basterebbe mettersi giù, e lavorare di testa... ma non credo che sia un
problema di facile soluzione, e comunque ho delle scadenze urgenti.
Ciao

 wrote in message
8ev2co$o6h$1...@serv1.iunet.it...

Potresti crearti 16 variabili filtro di tipo variant, ognuna associata ad un
campo.
Il valore di default di ognuna di queste è -1 se usiamo .AND, 0 se usiamo
l'OR
Nell'evento dopo aggiornamento di ogni campo inserisci la routine che
assegna la stringa filtro alla variabile corrispondente.
L'istruzione che crea l'origine dei dati potrebbe quindi essere:
select ...... from ........ where filtrocampo1 and filtrocampo2 and.....
nel caso dell'and oppure
select ...... from ........ where filtrocampo1 or filtrocampo2 or.....
nel caso dell'or

Stefano
Ciao,
Personalmente preferisco la costruzione delle istruzioni SQL  all'uso
dei filtri.
Il codice te lo devi costruire da te.
Io uso delle variabili che poi incollo alla fine:
una che ti da la lista dei campi che ti servono:
StrSelec="Select tabella.campo1 tabella.campo2 etc"
una che di da la tabella ed i Joins:
StrFrom ="from tabella1 INNER JOIN Tabella1 ON Tabella2 =
tabella1.campochiave"
Una per i criteri
StrCritero 
inoltre devi considerare se i criteri sono collegati con AND o con OR:
StrUnione
Do alle Variabile Strselect, StrFrom i loro valori, poi 
controllo i campi che ti danno i valori per i criteri.
se ne e' stato scelto qualcuno li unisco nella variabile StrCriterio
if Not IsNull(Me!campox)  then 
   If StrCriterio="" then 'Primo criterio
       StrCriterio = "((tabella.campox)=" & Me!campox & ")"
   Else		'i criteri devon venir collegati con la variabile d'unione
       StrCriterio=  StrCriterio & StrUnione &  " ((tabella.campox)="
& Me!campox & ") "
End if
Alla fine, se StrCriterio e' vuoto (caso piu' semplice) la stringa SQL
e' semplicemente:
SQLStr= StrSelect & StrFrom &";"
altrimenti:
Se ci sono piu' criteri ( almeno 1 AND o 1 OR)
SQLStr= StrSelect & StrFrom & "where (" & Strcriterio & ");"
altrimenti
SQLStr= StrSelect & StrFrom & "where " & StrCriterio & ";"
Per ogni criterio devi tener conto ovviamente del tipo di valore
(stringa o numero o data) e collegarlo alla variabile adeguatamente
(con o senza apici oppure mm/dd/yyyy per le date).
PS:
Cito la procedura a memoria, e protrei sbagliarmi nel numero delle
parentesi e del formato delle date. 
Il principio e' comunque valido
Un saluto
Tommaso Cafini		       
tca...@gmx.net
Heidelberg                     
caf...@mas-mpc.de

l'istruzione SQL?!
Oh Gesu'!!!!!!!!! E' vero che programmando si tende spesso a ricercare
soluzioni complesse a problemi semplici, ma questa li batte tutti!!!
Comunque, con un po' di VBA e' tutto piuttosto semplice.
Fatti una maschera con tutti i controlli che ti servono per i filtri della
query, siano esse combo, caselle o quant'altro. Poi metti un bel pulsantone
con scritto GO! e sull'evento on click vai a costruire la tua stringa SQL.
Ovvero: "SELECT Campo1, Campo2 FROM MiaTabella WHERE Campo1 =
Forms!MiaMaschera!MioControllo", usando AND e OR come ti serve, ovviamente.
Poi passi la tua stringa SQL come recordsource della sottomaschera che avrai
preparato e gli dai un bel requery.
Saluti.
Luciano

 wrote in message
ZRsVOYLmIIwAf6...@4ax.com...
