Ciao e buon Santo Stefano a tutti,
ho creato questa routine che mi crea una query al volo costruendo una stringa SQL e me la apre come foglio dati, viene poi distrutto il queryDef quando il foglio dati viene chiuso.
se faccio partire il codice dall'editor VBA funziona tutto benissimo, se invece faccio partire la routine con l''evento click di un pulsante di una form il foglio dati si apre ma non mi è permesso selezionare nulla con il mouse, la tastiera invece funziona.
Selezionando un'altra app (anche il desktop) e tornando ad access il mouse torna a lavorare correttamente, non ho trovato molto in rete al riguardo ma forse non ho fatto le ricerche giuste.
Sembrerebbe che il focus vada sul navigationPane (ho dovuto infatti dopo la creazione del queryDef nasconderlo perchè veniva aperto)
qualche dritta?
grazie in aticipo
Public Sub genQdfAndOpen()
Dim strSQL As String
Dim strQueryName As String
'=============================================================================================================================
'inizio stringa SQL
'=============================================================================================================================
strSQL = "SELECT "
If (Forms!maschera_accesso!GidProduzione.Value) = True Then
strSQL = strSQL & "DB_produzione.IDproduzione, "
End If
If (Forms!maschera_accesso!GidOrdine.Value) = True Then
strSQL = strSQL & "DB_produzione.IDordine, "
End If
If (Forms!maschera_accesso!Glotto.Value) = True Then
strSQL = strSQL & "DB_produzione.lotto, "
End If
If (Forms!maschera_accesso!Gaddetto.Value) = True Then
strSQL = strSQL & "DB_produzione.addetto, "
End If
If (Forms!maschera_accesso!Gmese.Value) = True Then
strSQL = strSQL & "DB_produzione.mese, "
End If
If (Forms!maschera_accesso!Gsettimana.Value) = True Then
strSQL = strSQL & "DB_produzione.settimana, "
End If
If (Forms!maschera_accesso!Gturno.Value) = True Then
strSQL = strSQL & "DB_produzione.turno, "
End If
If (Forms!maschera_accesso!Gdata.Value) = True Then
strSQL = strSQL & "DB_produzione.data, "
End If
If (Forms!maschera_accesso!Gprodotto.Value) = True Then
strSQL = strSQL & "DB_produzione.codiceSAP, "
strSQL = strSQL & "DB_prodotti_terni.denominazioneProdotto, "
End If
strSQL = strSQL & "DB_produzione.reparto, "
strSQL = strSQL & "Sum(DB_produzione.pezziProdotti) AS pezzi, "
strSQL = strSQL & "Sum(DB_produzione.pezziScarto) AS pzScarto, "
strSQL = strSQL & "Sum(DB_produzione.pezziTotali) AS pzTot, "
strSQL = strSQL & "round(Sum(DB_produzione.tonProdotte),2) AS Ton, "
strSQL = strSQL & "round(Sum(DB_produzione.tonScarto),2) AS TonScarto, "
strSQL = strSQL & "round(Sum(DB_produzione.tonTotali),2) AS TonTotali, "
strSQL = strSQL & "round(Avg(DB_produzione.peso),3) AS MediaDipeso, "
strSQL = strSQL & "round(IIf([DB_produzione].[reparto] <> ""Verde Terni"", Sum([pezziProdotti]/[DB_produzione].[pezziCarro]), Null), 2) AS carri, "
strSQL = strSQL & "round(IIf([DB_produzione].[reparto] = ""Verde Terni"" or [DB_produzione].[reparto] = ""Secco Terni"", Sum([pezziProdotti]/[DB_produzione].[pezziCarrello]), Null), 2) AS carrelli, "
strSQL = strSQL & "round(IIf([DB_produzione].[reparto] = ""Cotto Solaio Terni"" or [DB_produzione].[reparto] = ""Cotto Forati Terni"", Sum([pezziProdotti]/[DB_produzione].[pezziPacco]), Null), 2) AS pacchi, "
strSQL = strSQL & "round((Sum(pezziScarto)/Sum(pezziProdotti))*100, 2) AS scarto "
strSQL = strSQL & "FROM "
strSQL = strSQL & "DB_produzione LEFT JOIN DB_prodotti_terni ON (DB_produzione.codiceSAP = DB_prodotti_terni.codiceSap) "
strSQL = strSQL & "GROUP BY "
If (Forms!maschera_accesso!GidProduzione.Value) = True Then
strSQL = strSQL & "DB_produzione.IDproduzione, "
End If
If (Forms!maschera_accesso!GidOrdine.Value) = True Then
strSQL = strSQL & "DB_produzione.IDordine, "
End If
If (Forms!maschera_accesso!Glotto.Value) = True Then
strSQL = strSQL & "DB_produzione.lotto, "
End If
If (Forms!maschera_accesso!Gaddetto.Value) = True Then
strSQL = strSQL & "DB_produzione.addetto, "
End If
If (Forms!maschera_accesso!Gmese.Value) = True Then
strSQL = strSQL & "DB_produzione.mese, "
End If
If (Forms!maschera_accesso!Gsettimana.Value) = True Then
strSQL = strSQL & "DB_produzione.settimana, "
End If
If (Forms!maschera_accesso!Gturno.Value) = True Then
strSQL = strSQL & "DB_produzione.turno, "
End If
If (Forms!maschera_accesso!Gdata.Value) = True Then
strSQL = strSQL & "DB_produzione.data, "
End If
If (Forms!maschera_accesso!Gprodotto.Value) = True Then
strSQL = strSQL & "DB_produzione.codiceSAP, "
strSQL = strSQL & "DB_prodotti_terni.denominazioneProdotto, "
End If
strSQL = strSQL & "DB_produzione.reparto "
strSQL = strSQL & "ORDER BY "
If (Forms!maschera_accesso!GidProduzione.Value) = True Then
strSQL = strSQL & "DB_produzione.IDproduzione DESC, "
End If
If (Forms!maschera_accesso!GidOrdine.Value) = True Then
strSQL = strSQL & "DB_produzione.IDordine DESC, "
End If
If (Forms!maschera_accesso!Glotto.Value) = True Then
strSQL = strSQL & "DB_produzione.lotto DESC, "
End If
If (Forms!maschera_accesso!Gaddetto.Value) = True Then
strSQL = strSQL & "DB_produzione.addetto DESC, "
End If
If (Forms!maschera_accesso!Gmese.Value) = True Then
strSQL = strSQL & "DB_produzione.mese DESC, "
End If
If (Forms!maschera_accesso!Gsettimana.Value) = True Then
strSQL = strSQL & "DB_produzione.settimana DESC, "
End If
If (Forms!maschera_accesso!Gturno.Value) = True Then
strSQL = strSQL & "DB_produzione.turno DESC, "
End If
If (Forms!maschera_accesso!Gdata.Value) = True Then
strSQL = strSQL & "DB_produzione.data DESC, "
End If
If (Forms!maschera_accesso!Gprodotto.Value) = True Then
strSQL = strSQL & "DB_produzione.codiceSAP, "
strSQL = strSQL & "DB_prodotti_terni.denominazioneProdotto DESC, "
End If
strSQL = strSQL & "DB_produzione.reparto DESC; "
'=============================================================================================================================
'fine stringa SQL
'=============================================================================================================================
strQueryName = "DB_produzione_qry"
Call deleteQdfIfExist(strQueryName)
Set db = CurrentDb
Set qdf = db.CreateQueryDef(strQueryName, strSQL)
DoCmd.OpenQuery strQueryName, acViewNormal, acReadOnly
'DoCmd.SetWarnings False
DoCmd.SelectObject acQuery, strQueryName, True
'SendKeys "%{TAB}"
Call nascondiRiquadroSpostamento
While (SysCmd(acSysCmdGetObjectState, acQuery, strQueryName)) 'cicla finchè la query è aperta
DoEvents
Wend
db.QueryDefs.Delete strQueryName
'DoCmd.SetWarnings True
Set qdf = Nothing
Set db = Nothing
End Sub