Newsgroup: it.comp.appl.access
Titolo: Problemi con QueryDef e RowSource...

Ringrazio in anticipo chiunque riesca a darmi un suggerimento...
Ho questo problema,
Devo testare se una determinata query restituisce dei record, se non
restituisce nessun record esco dalla form senza eseguire il grafico.
Ho due problermi: 
1) L'esecuzione della query fatta da codice vba restituisce sempre dei
record anche quando il recordset dovrebbe essere vuoto. Infatti la
stessa query con gli stessi parametri eseguita da Query di Access
risulta vuota. Non è che devo fare qualche impostazione sui campi Data
della form in cui ho inserito i campi Data (dfDal e dfAl)?
2) Ho dovuto creare questo meccanismo in quanto se il recordset della
query è vuoto le proprietà RowSourceType e RowSource danno RuntimeError,
come se la proprietà "RowsourceType" non esista.
Allego la procedura e la query coinvolte.
Grazie di nuovo a tutti,
Andrea
...............................................................
Private Sub Form_Load()
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
 
 
    If [Forms]![IMAC]![opz_TipoEstraz].Value = 1 Then
         Set dbs = CurrentDb
         Set qdf = dbs.QueryDefs("IMAC_PERGRAF_TRIM")
         qdf.ReturnsRecords = True
         qdf.Parameters(0) = Forms!IMAC.dfBancaSel
         qdf.Parameters(1) = Forms!IMAC.dfDal
         qdf.Parameters(2) = Forms!IMAC.dfAl
         qdf.Parameters(3) = Forms!IMAC!opz_Urgenze.Value
 
         Set rst = qdf.OpenRecordset
 
         If rst.RecordCount > 0 Then
             Me.Grafico15.RowSourceType = "Tabella/Query"
             Me.Grafico15.RowSource = "IMAC_PERGRAF_TRIM"
         Else
             MsgBox "Nessun Record da Processare", 
             vbCritical, "RECORDSET VUOTO"
             DoCmd.Close acForm, "m_imac_sla_GRAFICO"
         End If
         rst.Close
         qdf.Close
         Set dbs = Nothing
         Me.Grafico15.RowSourceType = "Tabella/Query"
         Me.Grafico15.RowSource = "IMAC_PERGRAF_TRIM"
    ElseIf [Forms]![IMAC]![opz_TipoEstraz].Value = 2 Then
         Set dbs = CurrentDb
         Set qdf = dbs.QueryDefs("IMAC_PERGRAF_MESE")
         qdf.ReturnsRecords = True
         qdf.Parameters(0) = Forms!IMAC.dfBancaSel
         qdf.Parameters(1) = Forms!IMAC!opz_Urgenze.Value
         qdf.Parameters(2) = Format(Forms!IMAC.dfDal, "yyyy/mm/dd")
         qdf.Parameters(3) = Format(Forms!IMAC.dfAl, "yyyy/mm/dd")
 
         Set rst = qdf.OpenRecordset
 
         If rst.RecordCount > 0 Then
             Me.Grafico15.RowSourceType = "Tabella/Query"
             Me.Grafico15.RowSource = "IMAC_PERGRAF_MESE"
         Else
             MsgBox "Nessun Record da processare", 
             vbCritical, "RECORDSET VUOTO"
             DoCmd.Close acForm, "m_imac_sla_GRAFICO"
         End If
 
         rst.Close
         qdf.Close
         Set dbs = Nothing
         Me.Grafico15.RowSourceType = "Tabella/Query"
         Me.Grafico15.RowSource = "IMAC_PERGRAF_MESE"
    End If
End Sub
SELECT ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.Urgenza, 
(IIf([Forms]![IMAC]![dfBancaSel]<>"",[BANCHE].[Codice],"Tutte")) AS
Banca,
DatePart("q",DateAdd("s",[ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST].[Data_di_Chiusura]+7200,"01-01-1970"))
AS Trimestre,
(IIf(Data_di_Chiusura-ACT_Fine_Prevista>0,"FUORI","DENTRO")) AS
STATOATT,
Sum(ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.Quantita) AS SommaDiQuantita
FROM ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST INNER JOIN BANCHE ON
ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.Societa = BANCHE.Filiale
WHERE (((ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.Workflow)="Chiusa" Or
(ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.Workflow)="Terminata") AND
((IIf([Forms]![IMAC]![dfBancaSel]<>"",([BANCHE].[Codice])=[Forms]![IMAC]![dfBancaSel],([BANCHE].[Codice])
Like "*"))<>False) AND
((Left([ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST].[Urgenza],1))=[Forms]![IMAC]![opz_Urgenze])
AND
((IIf([ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST].[Data_di_Chiusura]>0,(DateAdd("s",[ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST].[Data_di_Chiusura]+7200,"01-01-1970")
Between [Forms]![IMAC]![dfDal] And
[Forms]![IMAC]![dfAl]),False))<>False) AND
((ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.Tipo_Richiesta) Not Like
"*prog*") AND ((ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.TipoAttivita) Not
Like "*trasp*"))
GROUP BY ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST.Urgenza,
(IIf([Forms]![IMAC]![dfBancaSel]<>"",[BANCHE].[Codice],"Tutte")),
DatePart("q",DateAdd("s",[ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST].[Data_di_Chiusura]+7200,"01-01-1970")),
(IIf(Data_di_Chiusura-ACT_Fine_Prevista>0,"FUORI","DENTRO"))
ORDER BY
DatePart("q",DateAdd("s",[ARAdmin_LSS_RM__JOIN_ATTIVITA_RICHIEST].[Data_di_Chiusura]+7200,"01-01-1970"));
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

          qdf.Parameters(2) = Forms!IMAC.dfAl
Forse qui devi trasformare le tue date nel formato mm/gg/aaaa circondate da
#
Prova a inserire delle date che se valutate come mm-gg comunque non ti danno
valori e vedi cosa succede.
Infine, personalmente, preferisco non utilizzare i parameters ma mi creo
sempre l'intera stringa sql da codice.
Ma de gustibus...
Antonio

 Antonio
Non vedo come darti torto infondo fino a qualche tempo fa programmavo 
in "Centura Team Developer" e non avevo altro modo che scrivere sql nel
codice. Ma ora sono "costretto" a lavorare con Access, per necessità 
del cliente ed ho trovato molto utile costruire le query nidificate 
utilizzando delle "Query" semplici legandole assieme con access, è 
innegabile che in questo modo si renda la lettura, e quindi la 
manutenzione più amichevole e immediata.
Comunque se mi scontro con questi limiti proverò a costruire la mia
query
sql da codice... è che sono almeno quattro Select nidificate.. speriamo
bene..
Grazie comunque della tua risposta..
Andrea


 Antonio
Finalmente sembra che ho risolto ... Dovevo usare la dichiarazione
"PARAMETERS"
e dichisrare esplicitamente i parametri della query assegnano ad ognuno
il tipo dati corretto.
ora funziona correttamente. Senza trasformare i campi data.
Grazie.
Andrea
