+ Rispondi al Thread
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 14 su 14

Discussione: Filtrare una query con valori da casella di riepilogo

  1. #11
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,549
    Quote Originariamente inviato da Zio_Panzu Visualizza il messaggio
    Ciao Alex,
    grazie per i consigli: tutti seguiti e, naturalmente, l'esito è stato positivo.
    Potresti spiegarmi come mai il requery non funzionava in questo caso?
    Il Requery riesegue la Query... ma in questo caso il RecordSource è cambiato...!
    Quando scriviamo codice, ogni Metodo genera azioni... in questo caso serve fargli capire che non è semplicemente da Rieseguire la query iniziale, ma va ripristinato tutto come se la Form venisse riaperta...
    Quote Originariamente inviato da Zio_Panzu Visualizza il messaggio
    Hai ragione, ma non riuscivo a capire come "resettare" i filtri della query originaria (eliminare nella query dalla clausola "WHERE" in poi...).
    Consigli?
    Scriviti la Query SENZA Filtri da qualche parte... così è sempre disponibile.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  2. #12
    Zio_Panzu non è in linea Scolaretto
    Post
    61
    Scriviti la Query SENZA Filtri da qualche parte... così è sempre disponibile.
    E' quel che ho fatto...solo che la query è un tantinello complessa ed al posto di incollarla come stringa, l'ho inserita in un oggetto Query.

    Questa è la query esclusa la clausola where:
    codice:
    SELECT 
    AnagraficaParti.Parte, Causa.ID, [Tipologia causa].Tipologia, IIf(Causa.[Posizione processuale]=1,'Attore','Convenuto') AS [Posizione processuale],Causa.Oggetto, Causa.[Data inizio], Causa.[Data fine], [Tipologia stato causa].Descrizione AS StatoCausa, 
    
    
    IIF(Causa.[Posizione processuale]=2, 
    	(IIF(
    			(Pagaz.Definitivo = 0 AND Pagaz.Saldato = 0 AND Pagaz.DilazDaSaldare = 0), Causa.[Valore stimato max], 
    			(
    				IIF(Pagaz.Definitivo = 0, 0, Pagaz.Definitivo)+IIF(Pagaz.Saldato = 0, 0, Causa.[Valore stimato max]-Pagaz.Saldato)+IIF(Pagaz.DilazDaSaldare = 0, 0, Pagaz.DilazDaSaldare)
    			)
    		)
    	), NULL) AS PassivitaPotMax,
    
    IIF(Causa.[Posizione processuale]=1, 
    	(IIF(
    			(Pagaz.Definitivo = 0 AND Pagaz.Saldato = 0 AND Pagaz.DilazDaSaldare = 0), Causa.[Valore stimato max], 
    			(
    				IIF(Pagaz.Definitivo = 0, 0, Pagaz.Definitivo)+IIF(Pagaz.Saldato = 0, 0, Causa.[Valore stimato max]-Pagaz.Saldato)+IIF(Pagaz.DilazDaSaldare = 0, 0, Pagaz.DilazDaSaldare)
    			)
    		)
    	), NULL) AS AttivitaPotMax, Pagaz.[Num Delibera]
    
    FROM 
    
    ((((Causa INNER JOIN [Tipologia causa] ON [Tipologia causa].ID = Causa.Tipologia)
    
    LEFT JOIN (	SELECT DISTINCT [Causa-Parte].[ID Causa], ConcatRelated("[Anagrafica Parti].[Cognome Ragione sociale] & ' ' & [Anagrafica Parti].[Nome]", "[Causa-Parte] INNER JOIN [Anagrafica Parti] ON [Causa-Parte].[ID Parte] = [Anagrafica Parti].ID", "[ID Causa] = " & [ID Causa]) AS Parte
    			FROM [Causa-Parte]
    			) AS AnagraficaParti ON Causa.ID = AnagraficaParti.[ID Causa])
    
    LEFT JOIN (	SELECT [Storico causa].[ID Causa], [Tipologia stato causa].ID, [Tipologia stato causa].Descrizione
    			FROM ([Storico causa] LEFT JOIN [Tipologia stato causa] ON [Tipologia stato causa].ID = [Storico causa].[ID Stato])
    			LEFT JOIN (
    				SELECT MAX([Storico causa].[Data]) AS MaxData, [Storico causa].[ID Causa] 
    				FROM [Storico causa]
    				WHERE (Forms![Elenco Cause]![FiltroDataFine] Is Null OR [Storico causa].Data <= Forms![Elenco Cause]![FiltroDataFine].Value)
    				GROUP BY [Storico causa].[ID Causa]) MaxD ON MaxD.[ID Causa] = [Storico causa].[ID Causa] 
    			WHERE MaxD.MaxData = [Storico causa].Data
    			) AS Storico ON Causa.ID = Storico.[ID Causa])
    
    LEFT JOIN 
    
    (
    
    SELECT Pagamento.[ID Causa], Pagamento.Importo AS Definitivo, 0 AS Saldato, 0 AS DilazDaSaldare, Pagamento.[Num Delibera]
    FROM Pagamento INNER JOIN [Tipologia Pagamenti] ON Pagamento.[ID Tipologia] = [Tipologia Pagamenti].ID  
    WHERE [Tipologia Pagamenti].Definitivo = TRUE
    AND [Tipologia Pagamenti].DaCalcolare = FALSE
    AND (Forms![Elenco Cause]![FiltroDataFine] Is Null OR Pagamento.Data <= Forms![Elenco Cause]![FiltroDataFine].Value)
    AND NOT EXISTS (SELECT * FROM Pagamento INNER JOIN [Tipologia Pagamenti] ON Pagamento.[ID Tipologia] = [Tipologia Pagamenti].ID  
    WHERE [Tipologia Pagamenti].Definitivo = TRUE AND [Tipologia Pagamenti].DaCalcolare = TRUE
    AND (Forms![Elenco Cause]![FiltroDataInizio] Is Null OR Pagamento.Data >= Forms![Elenco Cause]![FiltroDataInizio].Value)
    AND (Forms![Elenco Cause]![FiltroDataFine] Is Null OR Pagamento.Data <= Forms![Elenco Cause]![FiltroDataFine].Value))
    
    UNION
    
    SELECT Pagamento.[ID Causa], 0 AS Definitivo, SUM(Pagamento.Importo) AS Saldato, 0 AS DilazDaSaldare, NULL AS [Num Delibera]
    FROM Pagamento INNER JOIN [Tipologia Pagamenti] ON Pagamento.[ID Tipologia] = [Tipologia Pagamenti].ID  
    WHERE [Tipologia Pagamenti].Saldata = TRUE
    AND (Forms![Elenco Cause]![FiltroDataInizio] Is Null OR Pagamento.Data >= Forms![Elenco Cause]![FiltroDataInizio].Value)
    AND (Forms![Elenco Cause]![FiltroDataFine] Is Null OR Pagamento.Data <= Forms![Elenco Cause]![FiltroDataFine].Value)
    AND NOT EXISTS (SELECT * FROM Pagamento INNER JOIN [Tipologia Pagamenti] ON Pagamento.[ID Tipologia] = [Tipologia Pagamenti].ID  
    WHERE [Tipologia Pagamenti].Definitivo = TRUE
    AND (Forms![Elenco Cause]![FiltroDataInizio] Is Null OR Pagamento.Data >= Forms![Elenco Cause]![FiltroDataInizio].Value)
    AND (Forms![Elenco Cause]![FiltroDataFine] Is Null OR Pagamento.Data <= Forms![Elenco Cause]![FiltroDataFine].Value))
    GROUP BY Pagamento.[ID Causa]
    
    UNION
    
    SELECT DISTINCT Pagamento.[ID Causa], 0 AS Definitivo, 0 AS Saldato, Transaz.Importo-TransazSald.Importo AS DilazDaSaldare, Transaz.[Num Delibera]
    FROM (Pagamento INNER JOIN 
    
    (SELECT Pagamento.[ID Causa], Pagamento.Importo, Pagamento.[Num Delibera]
    FROM Pagamento INNER JOIN [Tipologia Pagamenti] ON Pagamento.[ID Tipologia] = [Tipologia Pagamenti].ID  
    WHERE [Tipologia Pagamenti].Definitivo = TRUE
    AND [Tipologia Pagamenti].DaCalcolare = TRUE
    AND (Forms![Elenco Cause]![FiltroDataInizio] Is Null OR Pagamento.Data >= Forms![Elenco Cause]![FiltroDataInizio].Value)
    AND (Forms![Elenco Cause]![FiltroDataFine] Is Null OR Pagamento.Data <= Forms![Elenco Cause]![FiltroDataFine].Value)
    ) AS Transaz ON Pagamento.[ID Causa] = Transaz.[ID Causa])
    LEFT JOIN
    (SELECT Pagamento.[ID Causa], SUM(Pagamento.Importo) AS Importo
    FROM Pagamento INNER JOIN [Tipologia Pagamenti] ON Pagamento.[ID Tipologia] = [Tipologia Pagamenti].ID
    WHERE [Tipologia Pagamenti].Definitivo = FALSE
    AND [Tipologia Pagamenti].DaCalcolare = TRUE
    AND (Forms![Elenco Cause]![FiltroDataInizio] Is Null OR Pagamento.Data >= Forms![Elenco Cause]![FiltroDataInizio].Value)
    AND (Forms![Elenco Cause]![FiltroDataFine] Is Null OR Pagamento.Data <= Forms![Elenco Cause]![FiltroDataFine].Value)
    GROUP BY Pagamento.[ID Causa]) AS TransazSald ON Pagamento.[ID Causa] = TransazSald.[ID Causa]
    
    )AS Pagaz ON Causa.ID = Pagaz.[ID Causa])
    L'altra idea che mi era venuta era la gestione della query in un file ma poi mi sarei dovuto ricordare ogni volta di distribuire anche questo file, assieme al pacchetto.
    Ogni consiglio per migliorare è ben accetto.

  3. #13
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,549
    Puoi usare questo metodo oppure salvare il predicato in una Tabella dedicata... proprio per i predicati SQL...!
    Valuta se, inserire un Carattere o sequenza caratteri che con un REPLACE ti consenta di sostituire o inserire nel tuo caso la WHERE COND...!
    Es:
    codice:
    SELECT * FROM T1 [%WHERE%]
    In questo caso ti basta con un REPLACE fare questo
    codice:
    strSQL=REPLACE(Dlookup("SQL",TPredicati,"Query='NomeQuery'"),"[%WHERE%]",strWHERE)
    Chiaramente scritta così è solo per farti capire...
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  4. #14
    Zio_Panzu non è in linea Scolaretto
    Post
    61
    Questa seconda opzione mi piace molto: ottimo metodo per fare ordine nelle query di un'applicazione molto strutturata.
    La riutilizzerò di certo, anche se non credo di usarla in questa che contiene si e no 3 query "corpose".

    Grazie mille per la nuova prospettiva!

+ Rispondi al Thread
Pagina 2 di 2 primaprima 12

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi