Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
BOOX Go 6 Gen II porta per la prima volta il supporto allo stilo su un e-reader da 6 pollici, affiancando 3 GB di RAM al collaudato Snapdragon 665 e un design rivisto con scocca posteriore a costolature. Su carta la proposta è interessante, ma Android 11 fuori supporto, l'assenza di un alloggiamento per il pennino e un'autonomia ridotta rispetto agli e-reader tradizionali sono i compromessi da accettare
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-11-2008, 10:03   #1
marcobg80
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
marcobg80 è offline   Rispondi citando il messaggio o parte di esso
Old 05-11-2008, 10:46   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da marcobg80 Guarda i messaggi
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
Somiglia tanto tanto a questo Thread : http://www.hwupgrade.it/forum/showthread.php?t=1834250

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
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 05-11-2008, 11:25   #3
marcobg80
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
marcobg80 è offline   Rispondi citando il messaggio o parte di esso
Old 05-11-2008, 13:01   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
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.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 05-11-2008, 14:13   #5
marcobg80
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
marcobg80 è offline   Rispondi citando il messaggio o parte di esso
Old 05-11-2008, 15:41   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da marcobg80 Guarda i messaggi
se mi dai la tua email ti mando il tutto.
Pvt inviato.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2008, 08:47   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
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
Inoltre :
- 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 13:04.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 08:34   #8
marcobg80
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!
marcobg80 è offline   Rispondi citando il messaggio o parte di esso
Old 07-11-2008, 13:15   #9
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da marcobg80 Guarda i messaggi
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!
Anno è testo ? Non finisco mai di stupirmi della creatività di chi fa i DB !
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
La mia stringa SELECT rimane valida.

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
Non so se mi sono spiegato. Ti avevo linkato quella discussione proprio perchè il tuo problema l'avevo già risolto per un altro utente.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2008, 09:56   #10
marcobg80
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
marcobg80 è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2008, 10:53   #11
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
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 continuo a pensare che questo fosse il metodo migliore.
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")
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea Oltre il contante e le crypto: tutto sull'Euro D...
Batterie a terra per Varta, bancarotta v...
Elon Musk: l'intelligenza artificiale su...
Ryzen 7 9800HX3D: il miglior processore ...
Google porta Gemini Live sui vecchissimi...
Corsair Platform:4 in offerta: la scriva...
Il creatore di Disagea sull'addio dei gi...
Fastweb + Vodafone entra nello SmartCity...
AI Act europeo: dal 2 agosto partono i n...
Da 1,3 a 10 miliardi in due mesi: chi è ...
Schede video RTX: NVIDIA comunica nuovi ...
GTA 6, i 60 fps stabili potrebbero esser...
Questa Smart TV QLED da 40 pollici con H...
Ring in sconto fino al 57%: videocitofon...
Pubblicità su Windows con i monit...
Azioni sul PC e coding solo chiedendo: O...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v