Newsgroup: it.comp.appl.access
Titolo: query pass through ricerca full  text sql server errore

Ciao a tutti, mi date una mano?
Query pass through per la ricerca full text
Ricerca multicampo. Sintassi
 
SQL= ..... CONTAINS((TITOLO, AUTORE),'testo da ricercare')....
 
errore. Syntax Error [COMMA]. Il problema è la virgola tra AUTORE e TITOLO
Ma se incollo la query direttamente su SQL server va senza problemi. 
Quindi? Drivers? Altro? come risolvo?
Grazie a tutti

Ciao,
potresti specificare meglio l'sql e il messaggio d'errore postandoli per intero?
In che contesto usi la query? Origine di form o report, vba?
Versione di sql server? Versione di access?
 
Mat.


Allora, SQL SERVER 2014, Access 2007
 
Questa funziona
SQL= "SELECT [un botto di roba] WHERE CONTAINS(TITOLO, " & (P_CriterioFullText) & ") AND "
 
Questa no
SQL= "SELECT [un botto di roba] WHERE CONTAINS((AUTORE,TITOLO), " & (P_CriterioFullText) & ") AND "
 
Messaggio di errore
L'azione ha provocato il seguente errore (3075). Syntax error (comma) in the query expression 'CONTAINS ((AUTORE,TITOLO),'eco AND rosa')'
 
La uso per alimentare una form continua. Se la incollo nell'editor SQL funziona. Indici Full text composti corretti. Grazie


Ciao,
hai provato ha ricostruire il full text catalog? In ssms: [Il tuo db]/strorage/full text catalogs/[il tuo catalogo] click destro su Rebuild (rispondi Sì alla domanda di eliminazione e ricostruzione).
Hai provato ad usare il solo campo AUTORE per vedere se la query viene eseguita?
In "teoria" il codice passato a sql server tramite una query Pt dovrebbe essere eseguito nello stesso modo in cui viene eseguito nel management studio, quindi c'è qualcosa che non torna. Potresti, anche se è lungo, postare l'sql che non funziona?
Che driver usi per la connessione? 
Di che tipo sono i campi? che collation possiedono?
 
Ciao
Mat.


Si, ho già ricostruito il catalogo. Nulla di fatto
Si, con AUTORE funziona
Il driver è SQL Native Client
I campi sono tipo testo
 
ecco l'SQL
"SELECT LIBRI_BASE.EAN, LIBRI_BASE.COD_ALT, LIBRI_BASE.AUTORE, " & _
            "LIBRI_BASE.TITOLO, LIBRI_BASE.COLLANA, LIBRI_BASE.COLLANA_N, " & _
            "LIBRI_BASE.PREZZO, LIBRI_BASE.DISP_DA, DISPONIBILITA.SIGLA AS DISP_SIGLA, " & _
            "TIPO_MATERIALE.MaterialeDescrizione, TIPO_SCU.DESCRIZIO AS SCUOLA, LIBRI_BASE.SPESE_FISSE, " & _
            "LIBRI_BASE.CLASSIFICAZIONE, LIBRI_BASE.SOGGETTO, LIBRI_BASE.ARGOMENTO, LIBRI_BASE.COLLOCAZIONE, " & _
            "LIBRI_BASE.GiacDiff AS GIACENZA_DIFF, LIBRI_BASE.ESCLUSO_CARD_COSMO, LIBRI_BASE.ANNO_ED, " & _
            "LIBRI_BASE.IMMAGINE_PERC, LIBRI_BASE.PAGINE, " & _
            "LIBRI_BASE.VOLUME, EDITORI.RAG_SOC_E, Sum(GIACENZE.COPIE) AS GIACENZA, DISPONIBILITA.DISPONIBILITA AS DISP_ESTESA, " & _
            "DISPONIBILITA_DETTAGLI.DispDettagliDescrizioneA AS DISPONIBILITA, LIBRI_BASE.DATA_RISTAMPA, LIBRI_BASE.DATA_FC, " & _
            "LIBRI_BASE.DATA_PUBBLICAZIONE, DISPONIBILITA_ARIANNA.DispDescrizioneA, COLLOCAZIONE.SIGLA AS COLLOCAZIONE_SIGLA, " & SubQ & ", " & SubRese & _"FROM (((((DISPONIBILITA RIGHT JOIN (TIPO_SCU RIGHT JOIN ((EDITORI RIGHT JOIN LIBRI_BASE ON " & _
            "EDITORI.COD_EDIT = LIBRI_BASE.EDITORE) LEFT JOIN GIACENZE ON LIBRI_BASE.EAN = GIACENZE.EAN) ON " & _
            "TIPO_SCU.TIPO_SCU = LIBRI_BASE.SCUOLA) ON DISPONIBILITA.COD_DISPONIBILITA = LIBRI_BASE.DISP_CLESP) " & _
            "LEFT JOIN DISPONIBILITA_ARIANNA ON LIBRI_BASE.DISP_ARIANNA = DISPONIBILITA_ARIANNA.IdDisponibilitaA) " & _
            "LEFT JOIN DISPONIBILITA_DETTAGLI ON LIBRI_BASE.DISP_DETT_ARIANNA = DISPONIBILITA_DETTAGLI.IdDispDettagliA) " & _
            "LEFT JOIN TIPO_MATERIALE ON LIBRI_BASE.TIPO_MATERIALE = TIPO_MATERIALE.IdMateriale) " & _
            "LEFT JOIN COLLOCAZIONE ON " & _
            "LIBRI_BASE.COLLOCAZIONE = COLLOCAZIONE.ID_COLLOCAZIONE) "
    "WHERE "CONTAINS((AUTORE,TITOLO), " & FormattaStringaPT(P_CriterioFullText) & ") AND " & _
            "GROUP BY LIBRI_BASE.EAN, LIBRI_BASE.COD_ALT, LIBRI_BASE.AUTORE, LIBRI_BASE.TITOLO, " & _
            "LIBRI_BASE.COLLANA, LIBRI_BASE.COLLANA_N, LIBRI_BASE.PREZZO, LIBRI_BASE.DISP_DA, DISPONIBILITA.SIGLA, " & _
            "TIPO_MATERIALE.MaterialeDescrizione, TIPO_SCU.DESCRIZIO, LIBRI_BASE.SPESE_FISSE, LIBRI_BASE.CLASSIFICAZIONE, LIBRI_BASE.SOGGETTO, " & _
            "LIBRI_BASE.ARGOMENTO, LIBRI_BASE.COLLOCAZIONE, LIBRI_BASE.ESCLUSO_CARD_COSMO, LIBRI_BASE.ANNO_ED, LIBRI_BASE.IMMAGINE_PERC, " & _
            "LIBRI_BASE.ANNOTAZIONI, LIBRI_BASE.CURATORE, LIBRI_BASE.ESCLUSO, LIBRI_BASE.PAGINE, LIBRI_BASE.VOLUME, EDITORI.RAG_SOC_E, LIBRI_BASE.GiacDiff, " & _
            "DISPONIBILITA.DISPONIBILITA, DISPONIBILITA_DETTAGLI.DispDettagliDescrizioneA, LIBRI_BASE.DATA_RISTAMPA, LIBRI_BASE.DATA_FC, " & _
            "LIBRI_BASE.DATA_PUBBLICAZIONE, DISPONIBILITA_ARIANNA.DispDescrizioneA, COLLOCAZIONE.SIGLA"
 
SubQ e SubRese sono 2 subquery
 
L'errore viene generato da Access, non da SQL server, è quello che non mi torna e che non riesco a risolvere. Manco ci arriva al server
Grazie


Quello che hai postato è il codice vba con cui costruisci la stringa sql... quello che serve vedere è l'sql che viene generato da tutte queste concatenazioni, li sta l'inghippo probabilmente.
Scusa se non mi ero spiegato.
Ciao
Mat.
 
p.s. non hai preso in considerazione l'opzione di trasferire tutto su una stored procedure?


Ecco SQL puro
 
SELECT LIBRI_BASE.EAN, LIBRI_BASE.COD_ALT, LIBRI_BASE.AUTORE, LIBRI_BASE.TITOLO, LIBRI_BASE.COLLANA, LIBRI_BASE.COLLANA_N, LIBRI_BASE.PREZZO, LIBRI_BASE.DISP_DA, DISPONIBILITA.SIGLA AS DISP_SIGLA, TIPO_MATERIALE.MaterialeDescrizione, TIPO_SCU.DESCRIZIO AS SCUOLA, LIBRI_BASE.SPESE_FISSE, LIBRI_BASE.CLASSIFICAZIONE, LIBRI_BASE.SOGGETTO, LIBRI_BASE.ARGOMENTO, LIBRI_BASE.COLLOCAZIONE, LIBRI_BASE.GiacDiff AS GIACENZA_DIFF, LIBRI_BASE.ESCLUSO_CARD_COSMO, LIBRI_BASE.ANNO_ED, LIBRI_BASE.IMMAGINE_PERC, LIBRI_BASE.PAGINE, LIBRI_BASE.VOLUME, EDITORI.RAG_SOC_E, Sum(GIACENZE.COPIE) AS GIACENZA, DISPONIBILITA.DISPONIBILITA AS DISP_ESTESA, DISPONIBILITA_DETTAGLI.DispDettagliDescrizioneA AS DISPONIBILITA, LIBRI_BASE.DATA_RISTAMPA, LIBRI_BASE.DATA_FC, LIBRI_BASE.DATA_PUBBLICAZIONE, DISPONIBILITA_ARIANNA.DispDescrizioneA, COLLOCAZIONE.SIGLA AS COLLOCAZIONE_SIGLA, (SELECT Sum(GIACENZE_USATI.Copie) AS USATI FROM GIACENZE_USATI WHERE EAN=LIBRI_BASE.EAN) AS GIACENZA_USATI , (SELECT Sum(SCARICO_RIGHE.Copie) AS LIMBO FROM SCARICO_R
IGHE INNER JOIN SCARICO_TESTATA ON (SCARICO_RIGHE.ScaricoData = SCARICO_TESTATA.ScaricoData) AND (SCARICO_RIGHE.IdDocumento = SCARICO_TESTATA.IdDocumento) AND (SCARICO_RIGHE.IdScarico = SCARICO_TESTATA.IdScarico) WHERE SCARICO_TESTATA.InPreparazione=1 AND EAN=LIBRI_BASE.EAN) AS GIACENZA_LIMBO FROM (((((DISPONIBILITA RIGHT JOIN (TIPO_SCU RIGHT JOIN ((EDITORI RIGHT JOIN LIBRI_BASE ON EDITORI.COD_EDIT = LIBRI_BASE.EDITORE) LEFT JOIN GIACENZE ON LIBRI_BASE.EAN = GIACENZE.EAN) ON TIPO_SCU.TIPO_SCU = LIBRI_BASE.SCUOLA) ON DISPONIBILITA.COD_DISPONIBILITA = LIBRI_BASE.DISP_CLESP) LEFT JOIN DISPONIBILITA_ARIANNA ON LIBRI_BASE.DISP_ARIANNA = DISPONIBILITA_ARIANNA.IdDisponibilitaA) LEFT JOIN DISPONIBILITA_DETTAGLI ON LIBRI_BASE.DISP_DETT_ARIANNA = DISPONIBILITA_DETTAGLI.IdDispDettagliA) LEFT JOIN TIPO_MATERIALE ON LIBRI_BASE.TIPO_MATERIALE = TIPO_MATERIALE.IdMateriale) LEFT JOIN COLLOCAZIONE ON LIBRI_BASE.COLLOCAZIONE = COLLOCAZIONE.ID_COLLOCAZIONE) WHERE CONTAINS((AUTORE,TITOLO), 'eco AND rosa') GROUP BY LIBRI_BASE.EA
N, LIBRI_BASE.COD_ALT, LIBRI_BASE.AUTORE, LIBRI_BASE.TITOLO, LIBRI_BASE.COLLANA, LIBRI_BASE.COLLANA_N, LIBRI_BASE.PREZZO, LIBRI_BASE.DISP_DA, DISPONIBILITA.SIGLA, TIPO_MATERIALE.MaterialeDescrizione, TIPO_SCU.DESCRIZIO, LIBRI_BASE.SPESE_FISSE, LIBRI_BASE.CLASSIFICAZIONE, LIBRI_BASE.SOGGETTO, LIBRI_BASE.ARGOMENTO, LIBRI_BASE.COLLOCAZIONE, LIBRI_BASE.ESCLUSO_CARD_COSMO, LIBRI_BASE.ANNO_ED, LIBRI_BASE.IMMAGINE_PERC, LIBRI_BASE.ANNOTAZIONI, LIBRI_BASE.CURATORE, LIBRI_BASE.ESCLUSO, LIBRI_BASE.PAGINE, LIBRI_BASE.VOLUME, EDITORI.RAG_SOC_E, LIBRI_BASE.GiacDiff, DISPONIBILITA.DISPONIBILITA, DISPONIBILITA_DETTAGLI.DispDettagliDescrizioneA, LIBRI_BASE.DATA_RISTAMPA, LIBRI_BASE.DATA_FC, LIBRI_BASE.DATA_PUBBLICAZIONE, DISPONIBILITA_ARIANNA.DispDescrizioneA, COLLOCAZIONE.SIGLA
 
si, infatti lo farò. In teoria però la query PT dovrebbe fare la stessa cosa....non mela posso prendere....


l'errore, ovviamente avviene alla costruzione della query ed esattamente
 
Set Q_Ricerca = Dbs.CreateQueryDef("RicercaPT", StrSql)
 
quando passo l'SQL. Mah.....mistero. Non trovo documentazione da nessuna parte
Grazie

Ok, forse ci siamo. 
Il problema potrebbe essere nel modo in cui crei la query pt: usando createquerydef per creare la Pt devi prima impostate la proprietà connect e solo dopo specificare la stringa sql, quindi:
Set qPt=currentdb.createquerydef("RicercaPt")
qPt.connect=...
qPt.sql=...il tuo sql
 
Prova un po'...
Ciao
Mat.


Che mi venga......nessun errore. Ora devo solo vedere se è quello che mi serve....Grazie, quella forma non l'avevo valutata. A buon rendere
 

Praticamente specificando la stringa sql immediatamente alla creazione il codice sql viene probabilmente controllato come se fosse destinato ad Access e non a sql server. 
Vista la dimensione della stringa sql e ka quantità di concatenamenti che devi fare valuta davvero l'opportunità di trasferire tutto in una stored pricedure.
Ciao è stato un piacere. 
Mat.