PDA

Visualizza versione completa : [MS Access] stringa SQL generata da VBA che funziona solo se riaperta.


albertobarone
02-01-2017, 15.12.30
Ciao a tutti,
ho un problema banalissimo, ma che mi sta facendo uscire di testa perchè non riesco a comprendere dove sia il problema.

Ho scritto un codice in VBA che genera una stringa SQL sulla base di alcuni valori recuperati da combobox e altre fonti.

Tale stringa viene composta e poi impostata in una Query pre-esistente.
Vi riporto di seguito la stringa generata dal codice VBA (semplificata al massimo, ma così è):

SELECT T01_DATI.[C-IMPORTO]
FROM T01_DATI;

Questa stringa viene correttamente impostata nella query. Quando la eseguo però, mi viene richiesto di "immettere valore parametro" di "C".

Questo succede solo nei casi in cui il campo selezionato contiene il trattino "-" all'interno del nome, mentre se non ne contiene, la query viene eseguita correttamente (cosa nota ma che non mi spiego essendoci le quadre che dovrebbero ovviare il problema).

La cosa assurda però (e qui vengo al mio problema), è che se apro la query in visualizzazione SQL (che risulta essere esattamente come sopra), e provo a fare una minima variazione e poi subito ripristinarla (esempio: vado a capo, inserisco e poi tolgo uno spazio, cancello una parentesi e la rimetto, etc) la query comincia a funzionare correttamente!

Cosa mi sfugge? :mm:
Grazie!

LoryOne
04-01-2017, 20.10.17
Dunque:
La query è sintatticamente corretta, ma prova a scriverla in una forma più semplice:
SELECT C-IMPORTO FROM T01_DATI oppure SELECT [C-IMPORTO] FROM T01_DATI
In questo modo, si dice al motore SQL: Seleziona la colonna C-Importo dalla tabella T01_DATI
Sebbene la tua query sia corretta, vediamo cosa si dice al motore SQL: Seleziona la colonna C-IMPORTO appartenente alla tabella T01_DATi dalla tabella T01_DATI.
Come vedi, c'è una ripetizione del tutto inutile.
L'utilizzo delle parentesi quadre, avviene quando devi fare riferimento a nomi di colonna o di tabella che contengono spazi.

albertobarone
05-01-2017, 08.59.35
Ciao LoryOne,
intanto grazie per la risposta!
Capisco bene quello che dici, purtroppo però è già quello che faccio, mi spiego:

Il mio codice VBA mi genera la stringa SQL senza quella ripetizione del nome tabella compreso fra SELECT e [C-IMPORTO], quindi "di fatto", viene generata proprio la stringa come mi stai consigliando di fare tu.
E' proprio nel momento in cui faccio modificare tale stringa nel codice SQL della query esistente che Access stesso "aggiunge" il nome tabella prima di ogni campo.

(questo lo fa anche costruendo manualmente la query in modalità struttura, per dire).

Quindi il mio dubbio resta, e proprio non mi spiego tale assurdità! In particolare l'aspetto che apportando una minima modifica alla stringa e poi cancellando tale stessa modifica, la query comincia a lavorare :-( ...