Creare tabella da record maschera filtrata

di il
4 risposte

Creare tabella da record maschera filtrata

Buongiorno
ho creato una maschera che ha come origine dati una query basata su più tabelle relazionate tra loro.
Filtro i record con campi txt inseriti sulla maschera (tramite vba creo il me.filter).

Una volta che ho filtrato la maschera ho necessità di creare una tabella con i soli record filtrati.
E qui mi inghippo perché non ci riesco.

Ho provato a usare il seguente codice
DoCmd.RunSQL "Insert Into tblTemp (" & myRecordSource & ") Where " & Me.Filter
ma mi genera errore di "insert into non corretta".

Ho provato a fare debug.print dell'istruzione sql e copiarla dentro una query e in effetti mi conferma l'errore.
mySql = "Insert into tblTemp (" & myRecordSource & ") Where " & Me.Filter
il risultato del debug è:
Insert into tblTemp (SELECT Tb610_Modelli.ID_Modello, Tb610_Modelli.Attivo, Tb610_Modelli.Controllato, Tb610_Modelli.ID_BP, Tb2100_AnagraficaBP.NomeBP, Tb610_Modelli.CodiceModello, Tb610_Modelli.Descrizione, Tbv_GruppoLega.Lega, Tb690_Listino.ID_Listino, Tb690_Listino.PrezzoUnitario, Tb690_Listino.InizioValidita, Tbv_UM.Descrizione AS UMDESC, Tb690_Listino.FineValidita FROM Tbv_UM INNER JOIN (((Tb2100_AnagraficaBP RIGHT JOIN Tb610_Modelli ON Tb2100_AnagraficaBP.ID_BP = Tb610_Modelli.ID_BP) LEFT JOIN (Tb612_DatiTecnici LEFT JOIN Tbv_GruppoLega ON Tb612_DatiTecnici.ID_GruppoLega = Tbv_GruppoLega.ID_GruppoLega) ON Tb610_Modelli.ID_Modello = Tb612_DatiTecnici.ID_Modello) INNER JOIN Tb690_Listino ON Tb610_Modelli.ID_Modello = Tb690_Listino.ID_Modello) ON Tbv_UM.ID_UM = Tb690_Listino.ID_UM ) Where Lega = 'BZ' AND ID_BP =10 AND (FineValidita>Date())

in esecuzione della query mi segnala errore su SELECT e dopo su AS (dove uso l'alas AS UMDESC) e poi sinceramente mi sono fermata perché era evidente che non funzionava...

Non so...chiedo il vostro aiuto.
grazie

4 Risposte

  • Re: Creare tabella da record maschera filtrata

    Crodino ha scritto:


    in esecuzione della query mi segnala errore su SELECT e dopo su AS (dove uso l'alas AS UMDESC) e poi sinceramente mi sono fermata perché era evidente che non funzionava...
    Per leggere decentemente una SQL usa i tag code, altrimenti proprio diventa impossibile, meglio se opportunamente indentata (cosa che ho ottenuto con notepad++ ed un'estensione apposita
    INSERT INTO tblTemp 
    (
        SELECT Tb610_Modelli.ID_Modello
        ,Tb610_Modelli.Attivo
        ,Tb610_Modelli.Controllato
        ,Tb610_Modelli.ID_BP
        ,Tb2100_AnagraficaBP.NomeBP
        ,Tb610_Modelli.CodiceModello
        ,Tb610_Modelli.Descrizione
        ,Tbv_GruppoLega.Lega
        ,Tb690_Listino.ID_Listino
        ,Tb690_Listino.PrezzoUnitario
        ,Tb690_Listino.InizioValidita
        ,Tbv_UM.Descrizione AS UMDESC
        ,Tb690_Listino.FineValidita FROM Tbv_UM INNER JOIN (
        (
            (
                Tb2100_AnagraficaBP RIGHT JOIN Tb610_Modelli ON Tb2100_AnagraficaBP.ID_BP = Tb610_Modelli.ID_BP
                ) LEFT JOIN (
                Tb612_DatiTecnici LEFT JOIN Tbv_GruppoLega ON Tb612_DatiTecnici.ID_GruppoLega = Tbv_GruppoLega.ID_GruppoLega
                ) ON Tb610_Modelli.ID_Modello = Tb612_DatiTecnici.ID_Modello
            ) INNER JOIN Tb690_Listino ON Tb610_Modelli.ID_Modello = Tb690_Listino.ID_Modello
        ) ON Tbv_UM.ID_UM = Tb690_Listino.ID_UM
    )
    WHERE Lega = 'BZ'
    	AND ID_BP = 10
    	AND (FineValidita > DATE ())
    
    Prendi i pezzi di SQL, dalla più interna, e prova a lanciarla in una query che crei in visualizzazione SQL.
    La tabella TblTemp esiste già?
  • Re: Creare tabella da record maschera filtrata

    Devi correggere la sintassi dell'INSERT INTO. Guarda a questo .
    Se [tblTemp] ha esattamente gli stessi campi della query, credo ti basti togliere le parentesi
    mySql = "Insert into tblTemp " & myRecordSource & " Where " & Me.Filter
    Altrimenti devi esplicitare i campi
    mySql = "Insert into tblTemp (Campo1, campo2, campo3, ...) " & myRecordSource & " Where " & Me.Filter
  • Re: Creare tabella da record maschera filtrata

    Analizza la cosa in 2 Parti.
    Verifica che la SELECT sia funzionale, copi il predicato SQL risolto, e lo metti un una Query del QBE e vedi se aprendola restituisce dati... poi analizzi la fase di Creazione Tabella..., come suggerito da Sgruback non richiede le PARENTESI sulla parte SELECT.
    
    SELECT Tb610_Modelli.ID_Modello, 
    			Tb610_Modelli.Attivo, 
    			Tb610_Modelli.Controllato, 
    			Tb610_Modelli.ID_BP, 
    			Tb2100_AnagraficaBP.NomeBP, 
    			Tb610_Modelli.CodiceModello, 
    			Tb610_Modelli.Descrizione, 
    			Tbv_GruppoLega.Lega, 
    			Tb690_Listino.ID_Listino, 
    			Tb690_Listino.PrezzoUnitario, 
    			Tb690_Listino.InizioValidita, 
    			Tbv_UM.Descrizione AS UMDESC, 
    			Tb690_Listino.FineValidita 
    	FROM Tbv_UM 
    		INNER JOIN 
    				(((Tb2100_AnagraficaBP RIGHT JOIN Tb610_Modelli ON Tb2100_AnagraficaBP.ID_BP = Tb610_Modelli.ID_BP) 
    					LEFT JOIN (Tb612_DatiTecnici LEFT JOIN Tbv_GruppoLega ON Tb612_DatiTecnici.ID_GruppoLega = Tbv_GruppoLega.ID_GruppoLega) 
    					ON Tb610_Modelli.ID_Modello = Tb612_DatiTecnici.ID_Modello) 
    					INNER JOIN Tb690_Listino ON Tb610_Modelli.ID_Modello = Tb690_Listino.ID_Modello) ON Tbv_UM.ID_UM = Tb690_Listino.ID_UM ) 
    			
    	Where Lega = 'BZ' AND ID_BP =10 AND (FineValidita>Date())
  • Re: Creare tabella da record maschera filtrata

    Sgrubak ha scritto:


    Se [tblTemp] ha esattamente gli stessi campi della query, credo ti basti togliere le parentesi
    mySql = "Insert into tblTemp " & myRecordSource & " Where " & Me.Filter
    Considerato che tblTemp esiste... è stato una banalità. Togliendo le parentesi funziona.
    Grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte