|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 6
|
[Access] Maschera con campi di ricerca
Ciao a tutti,
sto cercando di creare un piccolo programmino in access. Una maschera con dei campi di ricerca. Il mio database è già creato, quindi le tabelle sono già state create. Quello che ho fatto è stato di collegare le tabelle che mi servivano e crearmi una query (Qscarti) che mi estrapolasse i dati a me necessari. Sulla maschera che ho creato vorrei che l'utente potesse scegliere/scrivere i dati da ricercare nelle combobox che ho creato(es: anno, numero ordine, lavorazione,data,ecc) e succesivamente premere un pulsante che mi aprisse la mia query filtrata Questo è il codice che ho tentato di scrivere: Private Sub cmd_ricerca_Click() Dim anno As Variant cmb_anno.SetFocus If cmb_anno.Text = "" Then anno = "is not null" Else anno = "=" & cmb_anno.Text End If Dim numero As Variant cmb_num.SetFocus If cmb_num.Text = "" Then numero = "is not null" Else numero = "=" & cmb_num.Text End If Dim lavorazione As Variant cmb_lav.SetFocus If cmb_lav.Text = "" Then lavorazione = "is not null" Else lavorazione = "=" & cmb_lav.Text End If Dim strsql As String strsql = "SELECT * from Qscarti" & "where dbo_movlav.ml_rese " & anno & "AND dbo_movlav.ml_rnum " & numero & "AND dbo_movlav.ml_codlav" & lavorazione Dim stDocName As String stDocName = "Qscarti" DoCmd.OpenQuery stDocName, acNormal, acEdit End Sub Non mi da errori ma ci mette una vita e restituisce tutti i dati presenti nella query e non quelli che imputo io nelle combobox. Dove sbaglio? Grazie a tutti |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Vedi mia risposta al post #4. In ogni caso non è chiaro perchè costruisci la strsql parametrizzandola giustamente con i valori delle combobox, per poi piantarla lì e chiamare una Stored Query... Quando hai costruito la strsql hai già tutto quello che ti serve. Bastava aggiungere : Codice:
Maschera.RecordSource = strsql Maschera.Requery |
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 6
|
Ti ringrazio!
Scusami ma con il codice di access nn sono molto ferratto... In teoria la stringa sql la creo per recuperare i campi dalla mia query.no? In teoria poi dovrebbe aprire la query filtrata Togliendo: Dim stDocName As String stDocName = "Qscarti" DoCmd.OpenQuery stDocName, acNormal, acEdit e inserendo: (frmscarti è il nome della mia maschera/form) frmscarti.RecordSource = strsql frmscarti.Requery mi da il seguente errore: Necessario oggetto Grazie ancora per l'aiuto |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
L'unica è, se puoi, postare il DB. Magari lascia qualche dato, che so, una ventina di records per tabella...
Senza vedere come hai fatto la maschera e la query non sono in grado. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 6
|
se mi dai la tua email ti mando il tutto.
il file mi pesa troppo. Ciao e grazie ancora |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Anzitutto una sistemata alla strsql. Così proprio non va :
strsql = "SELECT * from Qscarti" & "where dbo_movlav.ml_rese " & anno & "AND dbo_movlav.ml_rnum " & numero & "AND dbo_movlav.ml_codlav" & lavorazione Devi rispettare gli spazi ! Codice:
strsql = "SELECT * FROM Qscarti" & _
" WHERE dbo_movlav.ml_rese " & anno & _
" AND dbo_movlav.ml_rnum " & numero & _
" AND dbo_movlav.ml_codlav " & lavorazione
- anno : se a DB è numerico va bene così, se è Data, no. - lavorazione non va, devi metterlo tra apici singoli perchè a quanto vedo nel DB è stringa : Codice:
Dim lavorazione As Variant cmb_lav.SetFocus If cmb_lav.Text = "" Then lavorazione = "is not null" Else lavorazione = "=" & "'" & cmb_lav.Text & "'" End If Ultima modifica di MarcoGG : 06-11-2008 alle 14:04. |
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 6
|
Ciao Marco,
scusa ma ieri proprio nn ho avuto tempo di prendere in mano access. Ho modificato il codice in questo modo, ma non funziona ancora: Private Sub cmd_ricerca_Click() Dim anno As Variant cmb_anno.SetFocus If cmb_anno.Text = "" Then anno = "is not null" Else anno = "=" & cmb_anno.Text End If Dim numero As Variant txt_num.SetFocus If txt_num.Text = "" Then numero = "is not null" Else numero = "=" & txt_num.Text End If Dim lavorazione As Variant cmb_lav.SetFocus If cmb_lav.Text = "" Then lavorazione = "is not null" Else lavorazione = "=" & "'" & cmb_lav.Text & "'" End If Dim strsql As String strsql = "SELECT * FROM Qscarti" & _ " WHERE dbo_movlav.ml_rese " & anno & _ " AND dbo_movlav.ml_rnum " & numero & _ " AND dbo_movlav.ml_codlav " & lavorazione Form.RecordSource = strsql Form.Requery End Sub Il campo anno e lavorazione sono di tipo testo e il campo numero è numero. Ti anticipo che non posso modificare il tipo di dati, perchè il mio programma lo sto costruendo su un database gia fatto. Quindi quello che faccio è collegarmi/importarmi le tabelle e poi costruirmi query e maschera. Cosi facendo mi restituisce l'errore runtime '2001' OPERAZIONE PRECEDENTE ANNULLATA. Debug su linea Form.RecordSource = strsql Ho fatto anche delle prove con il codice sql. Copiando il codice nella finestra immediata ?"SELECT * FROM Qscarti" & _ " WHERE dbo_movlav.ml_rese " & anno & _ " AND dbo_movlav.ml_rnum " & numero & _ " AND dbo_movlav.ml_codlav " & lavorazione mi restituisce questo: SELECT * FROM Qscarti WHERE dbo_movlav.ml_rese =2008 AND dbo_movlav.ml_rnum =36 AND dbo_movlav.ml_codlav is not null ma provandolo all'interno di una query nn mi restituisce nessuno valore se invece la imposto cosi: SELECT * FROM Qscarti WHERE dbo_movlav.ml_rese ="2008" AND dbo_movlav.ml_rnum =36 AND dbo_movlav.ml_codlav is not null è perfetta! Scusa per il papiro, ma sto diventando matto magari per una stupidata. Grazie! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Se Anno è stringa, allora modificherei anche questa : Codice:
Dim anno As Variant cmb_anno.SetFocus If cmb_anno.Text = "" Then anno = "is not null" Else anno = "=" & "'" & cmb_anno.Text & "'" End If Molto probabilmente questo non sarà ancora sufficiente a risolvere il problema, perchè a quanto pare la maschera non ha controlli associati. Da ciò che mi hai mandato vedo solo una frmscarti con 3 controlli non associati... Per prima cosa devi creare una maschera da creazione guidata, associarla alla tua query, in modo che prenda tutti i dati che interessano e salvarla. Poi alla frmscarti AGGIUNGI le combo che fanno da filtro, e solo a quel punto potrai eseguire : Codice:
frmscarti.Recordset = strsql frmscarti.Requery |
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 6
|
Ti ringrazio Marco, ma forse non mi sono spiegato bene.
Quello che io vorrei fare, non è visualizzare i dati sulla stessa form dove ho le mie combo box. Una volta inseriti i dati nelle combo box (potendo scrivere o scegliere dalla lista) e premuto il pulsante RICERCA vorrei che mi aprisse in una altra finestra la mia query Qscarti filtrata secondo i campi che io imputo. Mi scuso se non sono stato chiaro. Grazie. Ciao |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Comunque è possibile rimediare agli errori che hai fatto ( se volevi una query parametrica, era meglio fare una query parametrica, anzichè una query che va a fare una SELECT su un'altra query... ). Prova a far eseguire questo al Click, dopo che strsql è completa : ( devi prima referenziare le librerie DAO ! ) Codice:
Dim queryTemp As QueryDef
For Each queryTemp In CurrentDb.QueryDefs
If queryTemp.Name = "queryTemp" Then
DoCmd.DeleteObject acQuery, "queryTemp"
Exit For
End If
Next
Set queryTemp = CurrentDb.CreateQueryDef("queryTemp", strsql)
DoCmd.OpenQuery ("queryTemp")
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:44.




















