Mschera cerca

lunedì 07 agosto 2006 - 11.29

crily Profilo | Newbie

ciao a tutti.Cerco di spiegare brevemente il mio problema.
il mio db e' un archivio per cd.Ho creato una query che dando il nome di un artista mi cerca tutti i suoi cd.ho creato una mschera che digitando nella casella di testo il nome dell'artista,clicco sul pulsante cerca ed in una nuova maschera mi crea l'elenco nell'apposita finestra.Per far ciò ho modificato il codice vba relativo al tasto cerca....ma quando avvio la maschera e provo a digitare un nome,apre la nuova maschera ma nn mi fa vedere nessun risultato.Dove può essere l'errore?sicuramente nel vba perchè la query funziona.
Ringrazio anticipatamente chi riuscira ad aiutarmi

MarKonE Profilo | Guru

Immagino tu stia parlando di access visto che ti riferisci a vba...ma ti consiglio di spiegare meglio e più dettagliatamente il tuo problema se vuoi sperare di ottenere aiuto

Ciao!
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

risolto...che testina....nel vba ho inserito il richiamo alla query da utilizzare scrivendo il nome della stessa errato!!!!

con l'occasione ho un'altro problema : se cerco per esempio la parola ligabue,la maschera mi restituisce ora gli album di questo artista(come proprio volevo).Il problema è come fare se digito solo una parte di quello che cerco,per esempio solo Liga e fargli restituire ugualmente gli album...ora giustamente non lo fa perchè cerca il nome esatto che digito!Nella quey ho utilizzato l'operatore like...nn saprei cosa utilizzare...grazie

MarKonE Profilo | Guru

Prova a modificare il codice con

Like "TuoCampo" & "*"

per ottenere le parole che *cominciano* con Liga (per esempio)

oppure
Like "*" & "TuoCampo" & "*"

per cercare le parole che *contengono" la chiave cercata.

My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

scusami ma sono alle preime armi...

per intenderci il pezzo di codice che ho provato modificare come hai detto tu è questo

def = "SELECT ARTISTA.[NOME] AS ARTISTA_NOME, ALBUM.[TITOLO], ALBUM.[ANNO], ALBUM.[RIF_RACCOLTA], ALBUM.[NUM_IMMAGINE] FROM ARTISTA INNER JOIN ALBUM ON ARTISTA.[NOME] = ALBUM.[NOME]"
If ([Forms]![CERCA_X_NOME_ARTISTA]![Nom] <> "") Then
If ctrl = False Then
def = def & " where Artista.[NOME] LIKE ' " & [Forms]![CERCA_X_NOME_ARTISTA]![Nom] & " ' "
ctrl = True
Else
def = def & "AND [NOM] Like ' " & [Forms]![CERCA_X_NOME_ARTISTA]![Nom] & " ' "

ma se al posto degli apici metto gli * non funge!!!!

MarKonE Profilo | Guru

Per provare queste cose un trucchetto molto comodo consiste nell'aprire la query che funziona in Visualizzazione Struttura , specificare (per esempio) Liga nel campo criteri (naturalmente nella colonna contenente il campo Artista) e passare alla modalità Visualizzazione Foglio Dati.

In questa puoi vedere il *risultato* della tua query.... quindi apportare le modifiche opportune .

Quando la query ti soddisfa puoi passare alla Visualizzazione SQL e vedere il codice SQL relativo ad essa. Naturalmente a questo punto nessuno ti vieta di fare un bel copia / incolla ti tale codice all'iterno di un modulo VBA

Spero di essermi spiegato abbastanza chiaramente.

CIAO!
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

si questo lo facevo già....ma il problema è che il nome poi lo scrivo in una cesella di testo....
ho provato varie volte a modificare per esempio questa riga:

def = def & " where Artista.[NOME] LIKE " * " & '" & [Forms]![CERCA_X_NOME_ARTISTA]![Nom] & " * "" '"

ma nulla
eppure la query funziona come voglio perchè ho modificato come mi hai detto tu
ti ringrazio per la tua disponibilità

MarKonE Profilo | Guru

Non capisco se la query ti genera un errore o se non ti ritorna nessun record.

Per favore cerca di spiegarti più precisamente se puoi.

Tornando alla tua query.... non ho modo di fare prove ora ma mi sembra ci siano troppi spazi attorno agli asterischi. Non devi cercare * liga * ma *liga* .... no ?

Ciao
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

Dunque la query funziona correttamente e in modalità struttura ritorna i record perfettamente.La sua struttura è la seguente:

SELECT ARTISTA.NOME AS ARTISTA_NOME, ALBUM.TITOLO, ALBUM.ANNO, ALBUM.RIF_RACCOLTA, ALBUM.NUM_IMMAGINE
FROM ARTISTA INNER JOIN ALBUM ON ARTISTA.NOME=ALBUM.NOME
WHERE (((ARTISTA.NOME) Like "*" & 'cla' & "*"));

ora riportando il pezzo finale del where in vba,nn funziona.Da notare che al posto di 'cla' ho il frammento di codice in cui vado a pescare il testo che digito nella casella di testo della maschera

dici che sono gli spazi che creano casino?

ti ringrazio ancora

MarKonE Profilo | Guru

Gli spazi ora gli hai tolti

Per inserire all'interno della query valori contenuti in campi delle form puoi usare il wizard (l'icona con la bacchetta magica corrispondente al comando Genera) dopo esserti posizionato sulla cella Criteri.....

Lo scopo è ottenere la query finale in visualizzazione struttura..... non modificarla a manina perchè in quel modo non hai possibilità di provarla comodamente.

Tutto chiaro ?
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

dunque...in struttura sql funziona....è quando devo mettere il tutto in vba che non va....nella struttura della riga c'è qualcosa che non va:

def = def & " where Artista.[NOME] Like " * " & [Forms]![CERCA_X_NOME_ARTISTA]![Nom] & " * " " '"

ho fatto il copia e incolla del like in avanti ma nn va...mah...devo smanettarci
GRazie di tutto

MarKonE Profilo | Guru

Ma gli spazi prima e dopo gli asterischi te li mette in automatico ?????
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

io scrivo "*" e lui me lo cambia in " * "......uff

MarKonE Profilo | Guru

Più tardi spero di avere il tempo di fare delle prove a casa.
Ciao
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

grazie....attendo tue notizie se riesci risolvere

MarKonE Profilo | Guru

Questa a me funziona :

SELECT Tabella1.Nome, Tabella1.Cognome FROM Tabella1 WHERE (((Tabella1.Nome) Like "*" & [Forms]![Maschera1]![Testo0] & "*"));


Testo0 è il nome della casella di testo che contiene il nome che inserisco.
Nel tuo caso dovrebbe chiamarsi "Nom" .

Fammi sapere se ti funziona.

Ciao
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

forse non ci siam capiti...a me la query funziona...ed è più o meno come la tua....è quando la metto in vba che non funge dato che la query la devo usare in una maschera....mah

MarKonE Profilo | Guru

Allora posta un po' di codice perchè non capisco il tuo problema.

Ciao
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

allora questa è la query che funziona perfettamente digitando solo il nome esatto dell'artista:

SELECT ARTISTA.NOME AS ARTISTA_NOME, ALBUM.TITOLO, ALBUM.ANNO, ALBUM.RIF_RACCOLTA, ALBUM.NUM_IMMAGINE
FROM ARTISTA INNER JOIN ALBUM ON ARTISTA.NOME = ALBUM.NOME
WHERE (((ARTISTA.NOME) Like 'u2'));

questo è il codice relativo al pulsante cerca che mi apre una nuova maschera con un elenco di quello che ha trovato nel db:

Private Sub Comando3_Click()
Dim ctrl As Boolean
Dim def As String


ctrl = False
def = "SELECT ARTISTA.[NOME] AS ARTISTA_NOME, ALBUM.[TITOLO], ALBUM.[ANNO], ALBUM.[RIF_RACCOLTA], ALBUM.[NUM_IMMAGINE] FROM ARTISTA INNER JOIN ALBUM ON ARTISTA.[NOME] = ALBUM.[NOME]"
If ([Forms]![CERCA_X_NOME_ARTISTA]![Nom] <> "") Then
If ctrl = False Then
def = def & " where Artista.[NOME] Like '" & [Forms]![CERCA_X_NOME_ARTISTA]![Nom] & "'"
ctrl = True
Else
def = def & "AND [NOM] Like '" & [Forms]![CERCA_X_NOME_ARTISTA]![Nom] & "'"

End If



End If


Dim dbs As Database, qdf As QueryDef


Set dbs = CurrentDb

On Error Resume Next
DoCmd.DeleteObject acQuery, "Album Query"
Set qdf = dbs.CreateQueryDef("Album Query", def)

DoCmd.OpenForm "Risultati_ricerca_artista_per_nome", acNormal


End Sub

Nom è il nome dato alla casella di testo in cui si inserisce il nome dell'artista da cercare
Album query è il nome della query.Oltre al mio problema come mai se rinomino la query e il nuovo nome lo sostituisco nel codice vba non funziona più?
Se riesci ad aiutarmi ti ringrazio molto....devo solo impostare il like con gli asterischi giusti...ma se la query oggi pome son riuscito a farla funzionare la maschera e il codice vba non son mai riuscito.Grazie

crily Profilo | Newbie

non sapete aiutarmi???

MarKonE Profilo | Guru

>non sapete aiutarmi???

Vedo un po' di confusione nel codice...cose che non capisco ma magari sbaglio io.

Per esempio a che cosa serve ctrl ? Cosa ti cambia che sia vero o falso ?

Bisognerebbe avere tutto il codice perchè così è difficile provarlo.

Se vuoi sono disposto ad aiutarti ma mi servirebbe il file, è un problema ?


Partendo da una semplicissima query qualsiasi riesci a visualizzare qualche risultato nella nuova maschera ? Non mi sembra che il problema sia la ricerca dopo l'inserimento parziale del nome....ma la gestione della query e della maschera, no ?

Ciao
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

dUNQUE LA MASCHERA E LA QUERY FUNZIONANO SE DIGITO IL NOME COCPLETO DA CERCARE MA SE DIGITO UNA PARTE DI ESSO NON RESTITUISCE ALCUN RISULTATO.OGGI HO VISTO CHE ALCUNI NOMI PERò NON LI PRENDE E NON CAPISCO PERCHè.sE SEI DISPOSTO AD AIUTARMI TI RINGRAZIO.COSA TI DEVO INVIARE E DOVE?

MarKonE Profilo | Guru

Se non è un problema inviami il db zippato all'indirizzo mark09 AT tin.it .

Mi par di capire che i problemi che riscontri siano molteplici.... il miglior approccio sarebbe quello di completare un passetto piccolo alla volta.


Ciao
My Blog... http://blogs.dotnethell.it/Mark/

MarKonE Profilo | Guru

Allora ... alcune cose che ho visto....

Se rinomini una query devi ricordarti di rinominare allo stesso modo *tutte* le occorrenze della stessa.

In particolare se controlli le proprietà della casella di riepilogo Elenco6 (dove vedi i risultati) noterai che alla voce
Dati -> Origine Riga è specificata la query ALBUM Query .... che probabilmente non hai rinominato .

Una cosa comoda che puoi fare, per slegarti un po' di più dall'IDE e per gestire il tutto da codice , è dare un'occhiata alla proprietà ROWSOURCE della casella di riepilogo.
Stavo cercando un link in inglese ma mi sa che la cosa più comoda è:
- aprire la form RISULTATI_RICERCA_ARTISTA_PER_NOME
- cliccare su visualizza codice
- sul modulo che si apre digitare Me.Elenco6.RowSource
- Selezionare RowSource e premere F1 per la guida in italiano

In pratica con questa proprietà puoi specificare da codice la query associata al tuo controllo... e la query può essere dinamica...cioè dipendere dai valori dei controlli delle form.


Un'altra cosa che ho notato... nella struttura della query "Album Query" , nei criteri del campo NOME, specifichi Like 'zuc*' con l'apice singolo...... meglio le doppie virgolette --> Like "zuc*" .
Non capisco perchè funzioni lo stesso ... ma se scrivi solamente LIKE ZUC* e ti sposti dalla cella noterai che l'IDE ti aggiunge in automatico le doppie virgolette.


Poi .... la variabile booleana ctrl..... non assume mai il valore TRUE.... quindi è inutile e la puoi completamente rimuovere.


Per ora direi che dovresti avere abbastanza materiale per muoverti

Buon lavoro e non esitare a postare se hai dubbi !

CIAO
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

ho provato....

dunque nel codice della maschera dei risultati ho aggiunto le seguenti righe:


Me.Elenco6.RowSource

Forms!CERCA_PER_NOME_ARTISTA!Nom.RowSourceType = "Table/Query"
Forms!CERCA_PER_NOME_ARTISTA!Nom.RowSource = "Album Query"

da errore sulla prima riga....

una cosa che non capisco è se devo lasciare il codice vba del pulsante cerca altrimenti come fa a sapere cosa deve aprire quando clicco su cerca?Se cancello la vba dovrò creare una macro...

gia che ci sono un'altra cosa:
se il record è vasco rossi e digito solo vas,ovviamente me lo trova.Ma se digito rossi non mi trova nulla.Non si può ovviare a questo problema?

GRazie e scusa ancora

MarKonE Profilo | Guru

>ho provato....
>
>dunque nel codice della maschera dei risultati ho aggiunto le
>seguenti righe:
>
>
>Me.Elenco6.RowSource

Questa riga non dice nulla.... serviva solo per poter evidenziare RowSource e cercare nella guida con F1


>
>Forms!CERCA_PER_NOME_ARTISTA!Nom.RowSourceType = "Table/Query"
>Forms!CERCA_PER_NOME_ARTISTA!Nom.RowSource = "Album Query"


Allora secondo me c'è un po' di confusione..... RowSource specifica l'Origine Riga... ed ha senso in una casella di riepilogo. Nom.RowSource tenta di specificare l'origine di una casella ti testo... non credo si possa fare in questo modo.

>
>da errore sulla prima riga....
>
>una cosa che non capisco è se devo lasciare il codice vba del
>pulsante cerca altrimenti come fa a sapere cosa deve aprire quando
>clicco su cerca?Se cancello la vba dovrò creare una macro...
>

Il codice rimane al suo posto
Devi semplicemente stare attento se ci sono dei controlli associati a Query , tabelle ecc.

>gia che ci sono un'altra cosa:
>se il record è vasco rossi e digito solo vas,ovviamente me lo
>trova.Ma se digito rossi non mi trova nulla.Non si può ovviare
>a questo problema?

Per cercare se un testo è -contenuto- puoi cercarlo aggiungendo un asterisco sia prima che dopo .....

Esempio :

LIKE "*" & nomecampo & "*"

Se cerchi "oss" dovrebbe trovarti sia vasco che 99posse


>
>GRazie e scusa ancora

Prego ma...scusa di che ?

My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

scusa,perchè continuo a romperti con le miei confusioni!!

Se modifico la query con i doppi apici e asterisco dopo una query me li converte.....

Per quanto riguarda i risultati della query nella maschera risultati, non riesco a capire.....è importatnte anche creare il pulsante in modo giusto?cioè quello per le operazioni sui report oppure basta crearne uno che tanto poi modifico io il codice....
Mah per ora mi rimane tutto in dubbio!!!
Ciao e grazie

MarKonE Profilo | Guru

>Se modifico la query con i doppi apici e asterisco dopo una query
>me li converte.....

Dove modifichi ? Sei in visualizzazione struttura ? A me non sembrava.


>Per quanto riguarda i risultati della query nella maschera risultati,
>non riesco a capire.....è importatnte anche creare il pulsante
>in modo giusto?cioè quello per le operazioni sui report oppure
>basta crearne uno che tanto poi modifico io il codice....

Ogni controllo deve avere il giusto codice..... l'unica cosa da capire è che hai alcuni controlli , come elenco6 (casella di riepilogo) , che tra le proprietà riportano Dati --> Origine Riga --> query...

Questo vuol dire che appena viene "attivata" la casella di riepilogo cerca di caricare i dati che derivano dalla query impostata..... se invece non specifichi nulla da IDE e utilizzi RowSource il controllo attende tuoi ordini per riempirsi

>Mah per ora mi rimane tutto in dubbio!!!

Un po' sono stati chiariti ?

>Ciao e grazie
CIAO
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

SE non ho capito male:
-dalla casella di riepilogo ho lasciato origine riga e tipo origine riga vuote;
-Sul pulsante cerca oltre al codice vba,devo inserire->codice la riga riguardante il comando RowSource.

Esatto?

Che casino!!!!

MarKonE Profilo | Guru

>SE non ho capito male:
>-dalla casella di riepilogo ho lasciato origine riga e tipo origine
>riga vuote;

Esatto

>-Sul pulsante cerca oltre al codice vba,devo inserire->codice
>la riga riguardante il comando RowSource.
>

Probabilmente la chiave del discorso è cominciare a ragionare per "Eventi".
Cioè nel momento in cui premi Cerca viene eseguita una query e successivamente, impostando la proprietà RowSource della casella di riepilogo in modo che corrisponda alla query che ti interessa, carichi i record a video.

>Che casino!!!!
Basta entrare nell'ordine di idee.... Impostare rowsource da codice ti da un'estrema versatilità.

My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

Ciao
Son riuscito a risolvere,ma senza usare il rowSource.Il tuo concetto era chiaro ma non sapevo dove mettere le mani...
Ho modificato solo la riga in vba....in effetti prima sbalgiavo solo come mettevo gli asterisci...la nuova riga è diventata la seguente:

def = def & " where Artista.[NOME] Like ""*" & [Forms]![CERCA_X_NOME_ARTISTA]![Nom] & "*"""

un problema risolto!

Se ho invece una query "Statica"(per intenderci che non pesca il valore da una form) come faccio ad associarla ad una maschera per far uscire sempre il risultato in una maschera_risultati?Avevo letto che si poteva importare la query sql cosi come si è scritta in vba ma non ricordo cosa si doveva definire!!!

Grazie di tutto

MarKonE Profilo | Guru

Se la query è sempre la stessa hai due possibilità :

Ritrorni all'impostazione iniziale --> Dati --> Origine riga ed imposti "Tabella/query" specificando la query che ti interessa.

Oppure


RowSource da impostare via codice prima di ogni visualizzazione della casella di riepilogo...allo stesso modo di prima.
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

TUTTO RISOLTO....ADESSO DEVO CONTINUARE!!!
mI PIACEREBBE ABBELLIRE IL VBA...TIPO CON DELLE FINESTRE DI AVVISO QUANDO PER ESEMPIO NON TROVA UN NOME OPPURE NON SI DIGITA NULLA!E' COMPLESSO O FATTIBILE SECONDO TE?

MarKonE Profilo | Guru

E' tutto fattibile anzi direi quasi divertente

Credo che però sarebbe meglio chiudere questo post ed aprirne altri più specifici, in modo che possano essere più utili e meno confusi

Che ne dici ?

CIAO
My Blog... http://blogs.dotnethell.it/Mark/

crily Profilo | Newbie

ok va bene....apro un altro topic!!
Altro che divertente....mi è passata via un'ora alla velocità della luce e qualcosa son riuscito a combinare
A risentirci
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5