[RISOLTO] Stringa SQL generata da VBA che funziona solo se riaperta.

di il
4 risposte

[RISOLTO] Stringa SQL generata da VBA che funziona solo se riaperta.

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 ?
Grazie !

4 Risposte

  • Re: [RISOLTO] Stringa SQL generata da VBA che funziona solo se riaperta.

    albertobarone ha scritto:


    ..
    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).
    Ho provato a ricreare la tua situazione e fila tutto liscio.
    A questo punto l'unico suggerimento è di focalizzare l'attenzione sul resto del codice.
    Proverei intanto con un Debug.Print della proprietà SQL della QueryDef immediatamente prima dell'esecuzione della query, per vedere cosa contiene in quel momento e poi suggerirei di pubblicare il codice quanto più completo possibile.
  • Re: [RISOLTO] Stringa SQL generata da VBA che funziona solo se riaperta.

    Ho provato a semplificare al massimo il DB lasciando solo il minimo indispensabile per poterlo condividere con voi.

    Alcune note su come è stato strutturato:
    1) Query1 è la query preesistente che viene modificata dal codice VBA generato nel form del prossimo punto
    2) Maschera1 contiene una serie di caselle combinate che permettono all'utente di selezionare i campi che si vogliono visualizzare nella query.
    3) Il bottone "Create SQL" recupera le informazioni dalle caselle combinate e crea la stringa SQL che viene poi impostata nella Query1

    Se si prova a selezionare alcuni campi nelle combo, il problema sopra descritto si presenta solo quando in uno dei campi sono presenti trattini "-" nel nome, in caso contrario con gli altri campi la query funziona perfettamente.
    Poi appunto provando ad aprire la Query1 in visualizzazione SQL, si vedrà che tutto è corretto e alla minima modifica (spazio e cancella, linea vuota, etc), la query inizia a funzionare, pure con i trattini.

    Alcune precisazioni:
    in questo momento all'evento click sul bottone, oltre a impostare l'SQL in Query1 viene anche mostrata una msgbox contenente la stringa creata (mi torna utile in fase di creazione); Query1 invece deve poi essere eseguita manualmente (automatizzerò poi la cosa).

    Ripeto, il db è stato semplificato al massimo quindi alcune cose potrebbero sembrarvi assurde per come costruite, vi prego di non farci caso (a meno che non sia li il problema chiaro ).

    Intanto grazie
  • Re: [RISOLTO] Stringa SQL generata da VBA che funziona solo se riaperta.

    albertobarone ha scritto:


    ...
    il db è stato semplificato al massimo...
    Non so se in questa semplificazione è andato perso qualcosa ma, contrariamente a quanto hai affermato in apertura di thread, la parentesi quadrata non la aggiungi in alcun modo.
    Estratto del tuo codice
    Private Sub Doquerybtn_Click()
    
    Dim select_sql As String
    Dim fromsql As String
    Dim where_sql As String
    
    select_sql = "SELECT "
    fromsql = " FROM T01_DATA"
    where_sql = "WHERE "
    
    Dim sqlstr As String
     If IsNull(Me.cboFields.Value) = False Then
        sqlstr = Me.cboFields  '<==== cambia qui
          Else
      MsgBox "Campo Vuoto"
      End If
      ...
    Ho fatto così
    
    sqlstr = "[" & Me.cboFields & "]"
    
    e non ci sono stati problemi. Mi sono limitato alla prima combobox, ho visto che funzionava dopo la modifica e non ho approfondito oltre.
    Edit: Il tuo db allegato è sparito? ho scaricato una versione vecchia?
  • Re: [RISOLTO] Stringa SQL generata da VBA che funziona solo se riaperta.

    E' incredibile, eppure ero convinto di aver provato a metterci le quadre, ma avevo il ricordo non avesse funzionato (evidentemente ero così convinto che fosse tutto perfetto che avevo la mente offuscata).

    Si si lo avevo tolto perchè nel tagliuzzarlo avevo commesso un errore che si generava lasciando tutti i campi vuoti e lo stavo sistemando, ma tant'è

    Non so che dire se non grazie infinite, è proprio uno di quei casi in cui o parli con qualcuno del problema o non ne esci mai !
Devi accedere o registrarti per scrivere nel forum
4 risposte