report da query campo data calcolato (con campi in errore) non filtra per data

Anonimo
2024-10-18T06:05:42+00:00

Buongiorno a tutti, chiedo aiuto per questo. ho una query di raggruppamento. In un campo chiamato datafinescorta calcolo una data con la funzione DateAdd. Non tutti i record della query producono una data utile perchè per alcuni mancano i dati ( scorta iniziale e data di inizio calcolo) necessari al calcolo della data nel campo datafinescorta. Quindi per questi record il campo datafinescorta esce con #errore#.

Da questa query ho comunque fatto un report con il quale vorrei filtrare tutte le date del campo datafinescorta del mese corrente o della settimana corrente. Ma non lo fa e mi dice tipo di dati non rispondenti. Inoltre appena apro il report ricevo un messaggio attesa connessione alla stampante che non capisco da dove viene fuori.

grazie dell'aiuto!

Sara

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2024-10-21T17:12:07+00:00

Ecco l'istruzione Sql corretta:

SELECT [piano terapia].ospite, Sum([piano terapia].qtà) AS SommaDiqtà, [piano terapia].medicinale, [piano terapia].specificasomministrazione, Min([piano terapia].[qtà ingresso]) AS scorta, Min([piano terapia].[data inizio calcolo]) AS MinDataInizioCalcolo, Min([piano terapia].appoggio) AS MinDiappoggio, Min([piano terapia].datamodifica) AS MinDidatamodifica, consumogiornalieroqry.[consumo giornaliero], [lista medicinali].[Qtà cfz], [SommaDiqtà]*[consumogiornalieroqry]![consumo giornaliero] AS qtaconsgg, DateDiff("d",[MinDataInizioCalcolo],Date()) AS ggtrasc, ([scorta]-([qtaconsgg]*7))/[qtaconsgg] AS ggconsumoscorta, [scorta]-([qtaconsgg]*[ggtrasc]) AS qtanow, DateDiff("d",[MinDataInizioCalcolo],[MinDidatamodifica]) AS ggtrascmodifica, IIf(IsNull([MinDataInizioCalcolo]),Null,DateAdd("d",Nz([ggconsumoscorta],0),[MinDataInizioCalcolo])) AS datafinescorta, [scorta]-([qtaconsgg]*[ggtrascmodifica]) AS qtamod, Format([datafinescorta],"dd-mm-yyyy") AS dfs, Min([piano terapia].IDpianoterapia) AS MinDiIDpianoterapiaFROM [lista medicinali] INNER JOIN (AnagraficaOspite INNER JOIN ([piano terapia] INNER JOIN consumogiornalieroqry ON [piano terapia].specificasomministrazione = consumogiornalieroqry.specifichegiorni) ON AnagraficaOspite.IDOspite = [piano terapia].ospite) ON [lista medicinali].ID = [piano terapia].medicinaleWHERE ((([piano terapia].[terapia in corso])=No) AND ((AnagraficaOspite.Presente)=Yes))GROUP BY [piano terapia].ospite, [piano terapia].medicinale, [piano terapia].specificasomministrazione, consumogiornalieroqry.[consumo giornaliero], [lista medicinali].[Qtà cfz]HAVING ((([piano terapia].specificasomministrazione)<>49));

mi dispica dirlo ma il database ha una struttura fatta male:

  • manca l'uso corretto delle proprietà dei campi (vedi Cognome dovrebbe avere impostato a sì, in quanto deve essere garantito sempre il suo inserimento per poter salvare un record, ecc...)
  • manca la normalizzazione dei dati (vedi seconda dose terza dose, assistente assegnata, ecc...)
  • manca l'integrità referenziale fra molte tabelle
  • i nomi dei vari oggetti Tabelle, query, ecc... debbono essere privi di spazi per non complicarti la vita soprattutto usando il codice
  • un database di 5068 KB è divendato di 25000 KB non avendo impostato la Compattazione dello stesso in chiusura.
  • ecc...

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2024-10-18T14:34:16+00:00

    Ti ringrazio tanto ora ci provo. se dovessi mettere iif Is null data inizio calcolo ma anche Is null Scorta come devo fare per dare due condizione

    grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2024-10-18T13:54:06+00:00

    Devi sostituire :

    DateAdd("d",[ggconsumoscorta],[MinDidata inizio calcolo]) AS datafinescorta

    con:

    IIf(IsNull([MinDidata inizio calcolo]),Null,DateAdd("d",[ggconsumoscorta],[MinDidata inizio calcolo])) AS datafinescorta

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-10-18T11:56:25+00:00

    Grazie! ora ti posto sql query nella quale calcolo il datafinescorta . Credo che risolvendo il campo calcolato poi il report dovrebbe funzionare. Attualmente il campo datafinescorta quando lo visualizzo nel report non lo riconosce nemmeno come campo data

    ecco sql:

    SELECT [piano terapia].ospite, Sum([piano terapia].qtà) AS SommaDiqtà, [piano terapia].medicinale, [piano terapia].specificasomministrazione, Min([piano terapia].[qtà ingresso]) AS scorta, Min([piano terapia].[data inizio calcolo]) AS [MinDidata inizio calcolo], Min([piano terapia].appoggio) AS MinDiappoggio, Min([piano terapia].datamodifica) AS MinDidatamodifica, consumogiornalieroqry.[consumo giornaliero], [lista medicinali].[Qtà cfz], [SommaDiqtà]*[consumogiornalieroqry]![consumo giornaliero] AS qtaconsgg, DateDiff("d",[MinDidata inizio calcolo],Date()) AS ggtrasc, ([scorta]-([qtaconsgg]*7))/[qtaconsgg] AS ggconsumoscorta, [scorta]-([qtaconsgg]*[ggtrasc]) AS qtanow, DateDiff("d",[MinDidata inizio calcolo],[MinDidatamodifica]) AS ggtrascmodifica, DateAdd("d",[ggconsumoscorta],[MinDidata inizio calcolo]) AS datafinescorta, [scorta]-([qtaconsgg]*[ggtrascmodifica]) AS qtamod, Format([datafinescorta],"dd-mm-yyyy") AS dfs, Min([piano terapia].IDpianoterapia) AS MinDiIDpianoterapia

    FROM [lista medicinali] INNER JOIN (AnagraficaOspite INNER JOIN ([piano terapia] INNER JOIN consumogiornalieroqry ON [piano terapia].specificasomministrazione = consumogiornalieroqry.specifichegiorni) ON AnagraficaOspite.IDOspite = [piano terapia].ospite) ON [lista medicinali].ID = [piano terapia].medicinale

    WHERE ((([piano terapia].[terapia in corso])=No) AND ((AnagraficaOspite.Presente)=Yes))

    GROUP BY [piano terapia].ospite, [piano terapia].medicinale, [piano terapia].specificasomministrazione, consumogiornalieroqry.[consumo giornaliero], [lista medicinali].[Qtà cfz]

    HAVING ((([piano terapia].specificasomministrazione)<>49));

    Grazie mille!

    sara

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2024-10-18T09:44:06+00:00

    Per il calcolo della datafinescorta non serve il dato scorta iniziale.

    Per non far apparire l'errore #errore# basta che scrivi datafinescorta: IIf(IsNull(data di inizio calcolo);Null;DateAdd("sigla del tipo di dato da aggiungere";il valore del dato da aggiungere;data di inizio calcolo))

    Fai vedere l'istruzione che crea il filtro dati.

    La risposta è stata utile?

    0 commenti Nessun commento