Condividi:        

ACCESS: maschere per query

Hai problemi con i file Zip, vuoi formattare l'HD, non sai come funziona FireFox? O magari ti serve proprio quel programmino di cui non ricordi il nome! Ecco il forum dove poter risolvere i tuoi problemi.

Moderatori: Dylan666, hydra, gahan

Postdi Dylan666 » 03/09/04 18:50

Che nervi! Ora la ricerca non funziona! Se non compilo nessuno dei campi il Report presenta solo il primo Record, altrimenti appare vuoto!

Dimmi tu dove ho sbagliato:

SCARICA FILE
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Sponsor
 

Postdi archimede » 04/09/04 14:21

Credo che tu abbia due ordini di problemi.

1) L'operatore SQL Like funziona solo con i campi testo: per gli altri tipi di dato dovrai usare una sintassi diversa. Tieni conto che, così com'è strutturata la query adesso, gli operatori sono in AND uno con l'altro: può andar bene o no, dipende da come vuoi che funzioni la selezione.

2) Lavorando con i db, devi capire esattamente come vengono gestiti i campi con valore Null (vedo che ce ne sono in questo caso) specialmente nelle SELECT. Non c'è uno standard assoluto, per cui ci possono essere differenze tra diversi prodotti. Detto molto in parole povere, Null equivale a Non Pervenuto: poichè, teoricamente, qualsiasi valore è possibile in quel campo l'SQL non è in grado di confrontarlo con uno specifico valore di tua scelta. Per cui, a seconda dei casi, può succedere che ti trovi records in più o in meno rispetto a quelli che ti aspetti in realtà. In breve, prova a cambiare la query così:
Codice: Seleziona tutto
SELECT * FROM Libri
WHERE NZ([Autore/i]) Like "*" & [Forms]![RICERCALibri]![autore/i] & "*" AND
NZ(Titolo) Like "*" & [Forms]![RICERCALibri]![titolo] & "*" AND
NZ(Autorità) Like "*" & [Forms]![RICERCALibri]![autorità] & "*" AND
NZ(Provvedimento) Like "*" & [Forms]![RICERCALibri]![provvedimento] & "*" AND
NZ(Numero) Like "*" & [Forms]![RICERCALibri]![numero] & "*" AND
NZ(Periodico) Like "*" & [Forms]![RICERCALibri]![periodico] & "*" AND
NZ(Collana) Like "*" & [Forms]![RICERCALibri]![collana] & "*" AND
NZ([Curatore/i]) Like "*" & [Forms]![RICERCALibri]![curatore/i] & "*" AND
NZ([Luogo Di Edizione]) Like "*" & [Forms]![RICERCALibri]![luogo di edizione] & "*";
Francamente mi sembra un po' inusuale una maschera di ricerca che contiene TUTTI i campi del record: ma se è questo che vuole il cliente...

HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Dylan666 » 04/09/04 14:58

archimede ha scritto:Francamente mi sembra un po' inusuale una maschera di ricerca che contiene TUTTI i campi del record: ma se è questo che vuole il cliente...


Purtroppo la situazione (per quanto bizzarra) è proprio questa.

Sicuro di aver scritto bene la query? Perché molti campi (Articoli, Tomo, Parte e altri) restituiscono TUTTI i record anche se metto valori che non sono contenuti i NESSUN record...

PS: NZ a cosa serve? Perché nella query non hai indicato la tabella?
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi archimede » 04/09/04 17:03

Dylan666 ha scritto:molti campi (Articoli, Tomo, Parte e altri) restituiscono TUTTI i record anche se metto valori che non sono contenuti i NESSUN record...
Articoli è una mia dimenticanza (aggiungi da qualche parte NZ(Articoli) Like "*" & [Forms]![RICERCALibri]![Articoli] & "*" AND), gli altri li ho omessi per il problema 1): devi decidere se invece di like vuoi = < > ecc.
Dylan666 ha scritto:PS: NZ a cosa serve? Perché nella query non hai indicato la tabella?
La funzione NZ (ma hai qualcosa di personale contro il tasto F1? :)) converte il valore Null in 0 oppure in una stringa vuota. Il nome della tabella è proprio dopo il FROM, per cui non so cosa intendi...

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Dylan666 » 04/09/04 17:18

archimede ha scritto:Articoli è una mia dimenticanza (aggiungi da qualche parte NZ(Articoli) Like "*" & [Forms]![RICERCALibri]![Articoli] & "*" AND)


Fatto


gli altri li ho omessi per il problema 1): devi decidere se invece di like vuoi = < > ecc.

Per tutti vorrei "=" (cioè valore da ricercare identico a quello imesso), quindi?

La funzione NZ (ma hai qualcosa di personale contro il tasto F1? :))


Assolutamente no, ma digitando NZ l'help non da risultati, e non sapendo che fosse non sapevo DOVE cercare...

Il nome della tabella è proprio dopo il FROM, per cui non so cosa intendi...


Niente, è solo che nella visualizzazione STRUTTURA non c'è la voce selezionata nel menù a discesa ma evidentemente è uguale...

Alla luce della mia risposta sulla domanda like (cioè che qualunque sia il dato immesso, numerico, data ecc io voglio che si trovino solo i record esattamente corrispondenti) come devo riscrivere il SQL?

PS: se mi riscrivi la query da capo è meglio...
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi archimede » 04/09/04 19:00

Dylan666 ha scritto:Assolutamente no, ma digitando NZ l'help non da risultati, e non sapendo che fosse non sapevo DOVE cercare...
Strano, io lo trovo (A97)...
Dylan666 ha scritto:Alla luce della mia risposta sulla domanda like (cioè che qualunque sia il dato immesso, numerico, data ecc io voglio che si trovino solo i record esattamente corrispondenti) come devo riscrivere il SQL?
Mi sa che le cose si stanno complicando un po' troppo. Proviamo un altro approccio:

1) Controlla che i nomi dei campi della maschera siano uguali ai quelli della tabella
2) Cambia il codice del bottone con questo (questa volta scritto da me):
Codice: Seleziona tutto
Private Sub Comando41_Click()
On Error GoTo Err_Comando41_Click

    Dim stDocName As String, strSQL As String, myWhere As String
    Dim ctl As Control, fieldType As Long

    strSQL = "select * from libri"
    myWhere = ""
    For Each ctl In Me.Controls
        If (ctl.ControlType = 109) Then
            fieldType = CurrentDb().TableDefs("libri").Fields(ctl.Name).Properties("Type")
            If (fieldType = 10) Then ' Testo
                If (Nz(ctl.Value) > " ") Then
                    If (myWhere = "") Then
                        myWhere = " where [" & ctl.Name & "] like '*" & ctl.Value & "*'"
                    Else
                        myWhere = myWhere & " AND [" & ctl.Name & "] like '*" & ctl.Value & "*'"
                    End If
                End If
            ElseIf (fieldType = 8) Then ' Data
                If (Nz(ctl.Value) > " ") Then
                    If (myWhere = "") Then
                        myWhere = " where [" & ctl.Name & "]=#" & ctl.Value & "#"
                    Else
                        myWhere = myWhere & " AND [" & ctl.Name & "]=#" & ctl.Value & "#"
                    End If
                End If
            ElseIf (fieldType = 4) Then ' Numerico
                If (Nz(ctl.Value) > 0) Then
                    If (myWhere = "") Then
                        myWhere = " where [" & ctl.Name & "]=" & ctl.Value
                    Else
                        myWhere = myWhere & " AND [" & ctl.Name & "]=" & ctl.Value
                    End If
                End If
            End If
        End If
    Next ctl
    strSQL = strSQL & myWhere
    stDocName = "Libri"
    DoCmd.OpenReport stDocName, acPreview, strSQL

Exit_Comando41_Click:
    Exit Sub

Err_Comando41_Click:
    MsgBox Err.Description
    Resume Exit_Comando41_Click
   
End Sub
Se funziona puoi buttare la query.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi leonard » 06/09/04 08:19

Dylan vorrei inviarti una bozza del DB che hai chiesto,solo che non so come inviarlo,come allegato, visto che non conosco, il tuo indirizzo e-mail.Non voglio essere scorteso con gli altri ma non conosco altri modi per inviare il file.
leonard
Utente Junior
 
Post: 86
Iscritto il: 21/07/03 08:49
Località: cagliari

Postdi Dylan666 » 08/09/04 11:39

archimede ha scritto:1) Controlla che i nomi dei campi della maschera siano uguali ai quelli della tabella
2) Cambia il codice del bottone con questo (questa volta scritto da me):
[...]
Se funziona puoi buttare la query.


Veramente se butto la queri non funziona più perché la cerca al momento di creere il report...

leonard ha scritto:Dylan vorrei inviarti una bozza del DB che hai chiesto,solo che non so come inviarlo,come allegato, visto che non conosco, il tuo indirizzo e-mail.Non voglio essere scorteso con gli altri ma non conosco altri modi per inviare il file.


Ti ho madato un messaggio privato: lo hai letto?
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi archimede » 08/09/04 12:15

Dylan666 ha scritto:Veramente se butto la queri non funziona più perché la cerca al momento di creere il report...
Dimenticanza mia: metti la tabella come origine record del report e dovresti poter eliminare la query. Ho anche notato un paio di errori nel codice da me postato; questo dovrebbe essere definitivo:
Codice: Seleziona tutto
Private Sub Comando41_Click()
On Error GoTo Err_Comando41_Click

    Dim stDocName As String, strSQL As String, myWhere As String
    Dim ctl As Control, fieldType As Long

    strSQL = "select * from libri"
    myWhere = ""
    For Each ctl In Me.Controls
        If (ctl.ControlType = 109) Then
            fieldType = CurrentDb().TableDefs("libri").Fields(ctl.Name).Properties("Type")
            If (fieldType = 10 Or fieldType = 12) Then ' Testo
                If (Nz(ctl.Value) > " ") Then
                    If (myWhere = "") Then
                        myWhere = " where [" & ctl.Name & "] like '*" & ctl.Value & "*'"
                    Else
                        myWhere = myWhere & " AND [" & ctl.Name & "] like '*" & ctl.Value & "*'"
                    End If
                End If
            ElseIf (fieldType = 8) Then ' Data
                If (Nz(ctl.Value) > " ") Then
                    If (myWhere = "") Then
                        myWhere = " where [" & ctl.Name & "]=#" & ctl.Value & "#"
                    Else
                        myWhere = myWhere & " AND [" & ctl.Name & "]=#" & ctl.Value & "#"
                    End If
                End If
            ElseIf (fieldType = 4 Or fieldType = 3) Then ' Numerico
                If (Nz(ctl.Value) > 0) Then
                    If (myWhere = "") Then
                        myWhere = " where [" & ctl.Name & "]=" & ctl.Value
                    Else
                        myWhere = myWhere & " AND [" & ctl.Name & "]=" & ctl.Value
                    End If
                End If
            End If
        End If
    Next ctl
    strSQL = strSQL & myWhere
    stDocName = "Libri"
    DoCmd.OpenReport stDocName, acPreview, strSQL

Exit_Comando41_Click:
    Exit Sub

Err_Comando41_Click:
    MsgBox Err.Description
    Resume Exit_Comando41_Click
   
End Sub
HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Dylan666 » 08/09/04 12:22

Perfetto (sperimento ancora un po' ma per ora pare ok al 100%). L'unico mio rammarico e di non aver potuto usare le query, che magari avrei imparato a usare e modificare (per esigenze che nasceranno inseguito magari) più facilmente.
Ma con tutto l'aiuto che mi è stato dato non mi posso lamentare :P
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi leonard » 08/09/04 13:20

si grazie, ;) spero che le informazioni del tuo db,da me modificato,ti siano state utili
;)
leonardo
leonard
Utente Junior
 
Post: 86
Iscritto il: 21/07/03 08:49
Località: cagliari

Postdi Dylan666 » 08/09/04 14:08

Scusa, problemi con la casella "Posta indesiderata" che si comporta come gli pare...
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi Dylan666 » 08/09/04 14:20

leonard ha scritto:si grazie, ;) spero che le informazioni del tuo db,da me modificato,ti siano state utili
;)
leonardo


Quello che hai fatto però (per chi lo vuole vedere lo scarichi da qui) è simile al filtro in base maschera, non elenca i risultati in un Report...
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi Dylan666 » 08/09/04 21:01

Oltra a quanto detto sopra la tua soluzione è anche affetta dagli stessi problemi che avevo prima della creazione del codice del tasto fatto da archimede: in pratica (per fare un esempio coi record contenuti nel file che ho likato prima) se scrivo 10 come "autorità" vengono riportati TUTTI i record, mente il primo ha per quel campo valore 3 (e quindi dovrebbe essere escluso)...
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi leonard » 09/09/04 15:00

Non ho capito cosa cambia visualizzare i dati in una maschera invece che in un report;secondo vedi bene che i campi per effetuare la ricerca sono evidenziati i verde quindi e ovvio che se tu scrivi sul campo "autorità" 10 appariranno tutti i record.Come già ti avevo scritto,per quanto io sappia nella query,quel tipo di query, non puoi compilare più di tre campi.Ora sta a te decidere quali campi vuoi usare per effetuare le tue ricerche cambiando l'ordine dei criteri ;)

Leonardo
leonard
Utente Junior
 
Post: 86
Iscritto il: 21/07/03 08:49
Località: cagliari

Postdi Dylan666 » 09/09/04 15:06

leonard ha scritto:Non ho capito cosa cambia visualizzare i dati in una maschera invece che in un report;

Cambia la comodità di visualizzazione (soggettiva) e la volontà di quello che deve usare il programma (che spesso dovrà stampare i risultati)! ;)

non puoi compilare più di tre campi.Ora sta a te decidere quali campi vuoi usare per effetuare le tue ricerche cambiando l'ordine dei criteri ;)


Questo mi era fuggito: ora mettiamo caso che il nostro "ricercatore" non utilizzi mai più di 3 campi per volta, ma che potenzialmente possa sceglere quei 3 (o anche meno) fra TUTTI i campi disponibili.
C'è un modo di scrivere una query adatta?
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Postdi leonard » 10/09/04 08:59

Per quanto riguarda la visualizzazione e la stampa puoi creare un report mediante la creazione guidata selezionando la "LibriQuery"contenente i dati su cui si desidera basare il report.Nella maschera "ricerca" devi creare un pulsante,sempre mediante la creazione guidata,dove comanderai l'apertura del report da te precedentemente creato.Per la query non ho capito bene il problema,ma se vogliamo cambiare i campi di ricera basta inserire i codici in campi diversi ricordandoci di cancellare gli altri ;)

Leonardo
leonard
Utente Junior
 
Post: 86
Iscritto il: 21/07/03 08:49
Località: cagliari

Postdi leonard » 10/09/04 11:01

:-? ho comesso un errore nel dirti di creare il pulsante nella maschera "ricerca",lo devi creare nella maschera "Libri Query"


Leonardo
leonard
Utente Junior
 
Post: 86
Iscritto il: 21/07/03 08:49
Località: cagliari

Postdi archimede » 10/09/04 11:22

Dylan666 ha scritto:L'unico mio rammarico e di non aver potuto usare le query, che magari avrei imparato a usare e modificare (per esigenze che nasceranno inseguito magari) più facilmente.
Non so a che esigenze ti riferisci, ma se intendi modifiche alla maschera di ricerca dovresti poter aggiungere e togliere campi a tuo piacimento senza toccare il codice. Le uniche limitazioni sono:

1) Il nome del controllo sulla maschera dev'essere uguale al nome del corrispondente campo sulla tabella
2) Il controllo dev'essere una casella di testo (quindi niente radio buttons, menu a tendina, ecc. -- altrimenti bisogna mettere mano al codice)

HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Dylan666 » 10/09/04 11:28

Ecco, neanche a farlo apposta l'idea dei menù a tendina per i termini più ricorrenti mi stava sfiorando... ma nulla di definitivo per ora
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

PrecedenteProssimo

Torna a Software Windows


Topic correlati a "ACCESS: maschere per query":


Chi c’è in linea

Visitano il forum: Nessuno e 80 ospiti