Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6][SQL][DAO] - problema query

Salve a tutti
vorrei fare una cosa piuttosto semplice ma nn ci riesco:
Nome Tabella: Calendario
l'operazione da fare č:
andare a cercare nella tabella calendario ad una determinata giornata, e
prendere solo il campo che "assomiglia" al parametro che passo
Dim q(0) as dao.recordset
    Set q(0) = db.OpenRecordset("Select * from Calendario WHERE lid_giornata
= " & Combo1.ListIndex + 1 & " AND [Calendario].[ CHE CI METTO QUI DENTRO?]
LIKE Wildcard")
quel CHE CI METTO QUI DENTRO č scritto in maiuscolo solo per far cadere
l'occhio.
Come faccio a fargli capire quello che mi serve?
Sto usando database access2000 con dao 3.6
La tabella Calendario (che contiene il calendario di un campionato) č fatta
in questo modo:
lid_giornata    1        2        3        4
1                    1-4    3-6    2-7    5-8
2
...
Grazie mille!!!

 Come faccio a fargli capire quello che mi serve?
Il campo in cui ricercare è uno solo? Con che nome e tipo?
S uno solo e testo la Like va bene, ma presume di racchiudere fra apicini '
la wildcard ed è possibile (anzi, doveroso) usare * (% per ADO, ed
eventualmente altri caratteri che la guida spiega)
Se i campi sono più d'uno devi necessariamente specificare delle OR testando
tutti i campi.
Un'altra tecnica (sporca, ma si fa di necessità virtù) è quella di
recuperare tutti i campi accodandoli come se fosse uno solo e applicare la
like su quello. Per esempio:
Select c1 & c2 & c3 As campi_accodati Where c1 & c2 & c3 Like
'*stringa_da_cercare*'

 '*stringa_da_cercare*'
Se hai QuteFixe vedrai stringa_da_cercare in grassetto.
In effetti è
 apicino asterisco stringa_da_cercare asterisco apicino
senza spazi

 tutti i campi.
Dim q(0) as dao.recordset
    Set q(0) = db.OpenRecordset("Select * from Calendario WHERE
lid_giornata= " & Combo1.ListIndex + 1 &  _
        " AND [Calendario].[" & "1" & "] OR [Calendario].[" & "2" & "] OR
[Calendario].[" & "3" & "]  OR [Calendario].[" & "4" & "]  LIKE
'*Wildcard*'")
Ho provato cosě.
La query funziona, ma non mi restituisce quello che voglio :(
se io gli passo wildcard=4
lui deve prendere solo il campo contenente la partita in cui ha giocato la
squadra 4, invece mi tira fuori tutti i campi...
credo che io stia commettendo un errore concettuale, ma nn capisco dove.
Forse č quel Select *, bah un aiutino? :)
Grazie Lupo.
P.S. ho provato la "tecnica sporca" con scarsissimi risultati (<elemento non
trovato in questo insieme>) (sono una capra)...
Set q(0) = db.OpenRecordset("Select [Calendario].[" & "1" & "] &
[Calendario].[" & "2" & "] & [Calendario].[" & "3" & "]  & [Calendario].[" &
"4" & "] from Calendario WHERE lid_giornata= " & Combo1.ListIndex + 1 & _
        " AND [Calendario].[" & "1" & "] & [Calendario].[" & "2" & "] &
[Calendario].[" & "3" & "]  & [Calendario].[" & "4" & "]  LIKE
'*Wildcard*'")

 i nomi sono proprio quelli: 1, 2, 3, 4
dimenticavo: i campi sono in formato Testo
esempio: 4-8
(sarebbe squadra 4 contro squadra 8)

 [Calendario].[" & "4" & "]  LIKE '*Wildcard*'")
Prova cosě:
Select *
From Calendario
Where
1 & 2 & 3 & 4
Like
'*Wildcard*'
Quindi:
Set q(0) = db.OpenRecordset("Select * From Calendario Where 1 & 2 & 3 & 4
Like '*Wildcard*'")
Ovviamente Wildcard sono i caratteri che devi cercare all'interno dei 4
campi accodati...

[*Lupo* = 
LupoOrmaiR...@libero.it
 in
news:bqa43e$20j4hs$
1...@ID-174464.news.uni-berlin.de
] ha scritto:
Ripeto, se vedi wildcard in grassetto, devi immaginare * prima e dopo la
parola stessa

 '*Wildcard*'")
ipotizzando di avere nella variabile crt i caratteri da cercare, diventa
(vado a capo per leggerla meglio):
Set q(0) = db.OpenRecordset
(
"
 Select * from Calendario
 WHERE
 lid_giornata= " & Combo1.ListIndex + 1
 & " AND
(1 Like '*" & crt & "*' OR 2 Like '*" & crt & "*' OR 3 Like '*" & crt & "*'
OR 4 Like '*" & crt & "*')
"
)
Nota le parentesi che racchiudono tutti gli OR
Non l'ho provata...

 dove. Forse č quel Select *, bah un aiutino? :)
Dunque, attenzione, il fatto che ti tiri fuori tutti i campi dipende dal
Select *
Se invece vuoi dire che ti seleziona righe/records nelle quali non compare
il carattere "4" č perchč di fatto hai testato la like solo sul campo 4. Ora
capisco anche che wildcard per te č una variabile, allora vedi nell'altro
post dove ho ipotizzato la variabile crt che per te si chiama wildcard.
Dovrebbe bastare sostituirne il nome.

 campi accodati...
:D
si si

 Il problema č che poi dopo mi si dice: nessun record corrente
Beh, non ha trovato alcun record... ti basta (anzi, dovresti) testare
q(0).EOF subito dopo aver composto il recordset. Se True significa che non
ha trovato alcun record.
Facciamo una cosa (ma al volo che devo andare, se no ci si risente):
Pubblica l'istruzione di composizione del recordset com'č ora e conferma se
i contenuti della tabella sono quelli del primo post. Indica anche cosa c'č
nella variabile wildcard (ma credo che ci sia il "4")...

 il "4")...

 )
...e considerando quanto hai detto nel post successivo, ho provato cosě:
    Set q(0) = db.OpenRecordset(" Select * from Calendario Where
lid_giornata = " & Combo1.ListIndex + 1 & " AND (1 Like '*" & Wildcard & "*'
OR 2 Like '*" & Wildcard & "*' OR 3 like '*" & Wildcard & "*' OR 4 Like '*"
& Wildcard & "*')")
questa funziona, ma il problema č che acchiappa proprio tutto
ma a me serve che acchiappi solo il campo in cui c'č la stringa 4
e come dici tu dipende da quel Select *
come si fa ad ovviare al problema? perchč non mi č dato di sapere a priori
in quale campo si trovi la mia squadra...
graze

 nella variabile wildcard (ma credo che ci sia il "4")...
La tabella è sempre quella del primo post, tutto uguale
La funzione è questa
Private Function ShowPrivateMatch(Wildcard As String)
    Dim teams() As String
    Set q(0) = db.OpenRecordset(" Select * from Calendario Where
lid_giornata = " & Combo1.ListIndex + 1 & " AND (1 Like '*" & Wildcard & "*'
OR 2 Like '*" & Wildcard & "*' OR 3 like '*" & Wildcard & "*' OR 4 Like '*"
& Wildcard & "*')")
        teams = Split(QUI CI VA IL CAMPO CHE DOVREI RENDERE DALLA QUERY IN
ESAME, "-", , vbTextCompare)
ecc...
End Function

 graze

 end if
Ma non deve essere nome_campo=wildcard
bensì contenuto_campo=wildcard
devo sappare, perdo il treno
torno domani sera tardi
GRAZIE per l'impegno profuso :D

 priori in quale campo si trovi la mia squadra...
Ripensandoci ... dovresti ristrutturare il database.
Anzichč avere una tabella che contiene tutte le partite (1, 2, 3, 4) di una
giornata, dovresti avere la tabella fatta solo di giornata e partita, magari
con un ID autoincrementante (sempre che lid_giornata non sia
autoincrementante) per garantirsi una chiave univoca.
A questo punto anzichč vedere le cose cosě:
lid_giornata    1        2        3        4
1                    1-4    3-6    2-7    5-8
2                    ...        ...        ...        ...
Le vedi cosě:
lid_giornata   sq    ID
1                    1-4    1
1                    3-6    2
1                    2-7    3
1                    5-8    4
2                    ...        5
2                    ...        6
2                    ...        7
2                    ...        8
E tutto č piů facile...

 bensě contenuto_campo=wildcard
Ma wildcard non contiene i caratteri che vuoi cercare? E dove avrei scritto
contenuto_campo?