Newsgroup: it.comp.appl.access
Titolo: Aiuto sulle query con parametri da codice

Ho il seguente codice :
txtIndice = Indice.Value
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Set conn = CurrentProject.Connection
Set rst = New ADODB.Recordset
Dim sql
sql = "SELECT Tab_Portafoglio.Indice, Tab_Portafoglio.Num1,
Tab_ContenutoPortafoglio WHERE (((Tab_Portafoglio.Indice)= " & "'" &
txtIndice "'))"
rst.Open sql, conn, , , adCmdText
 Do Until rst.EOF
    MsgBox (rst.Fields(0))
 rst.MoveNext
 Loop
Se Portafoglio.Indice e txtIndice sono testo funziona.
Come posso correggere il codice
avendo Portafoglio.Indice e txtIndice numerici ?
Grazie

 avendo Portafoglio.Indice e txtIndice numerici ?
Se vuoi mantenere la query di cui sopra, puoi normalizzare la variabile txtIndice 
ad essere sempre valutata come una stringa, cioè utilizzando al suo posto 
CStr(txtIndice).
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype: pbsoftsolution

 CStr(txtIndice).
Il mio problema nasce in questa parte di codice :
WHERE (((Tab_ContenutoPortafoglio.Indice)= " & "'" & txtIndice & "'))"
"Indice" è la chiave primaria della tabella ed è un campo contatore
"txtIndice" è una variabile numerica che prende il valore da una
casella di testo
Quando viene eseguita la query mi dice "Tipo di dati non
corrispondenti"
perche per come è scritto il codice si fa un confronto tra un numero
ed un testo
Allora ho provato a scrivere
WHERE (((Tab_ContenutoPortafoglio.Indice)=txtIndice))"
e mi dice "Nessun valore specificato per alcuni parametri necessari"
Come devo modificare la clausola Where per farlo funzionare ?
Grazie sempre per la disponibilità

 Come devo modificare la clausola Where per farlo funzionare ?
A parte che potresti anche provare ad utilizzare CLng(txtIndice) al posto 
di txtIndice e senza utilizzare gli apici in questo caso.
Comunque mi viene la pelle d'oca a rileggere quello che ho appena scritto, 
quindi non lo fare.
Credo invece che tu debba rivedere qualcosa nella struttura del database, 
perché quello che stai cercando di fare non è una cosa normale.


Forse non riesco a spiegarmi.  Se io scrivo :
SELECT Indice , Nome , Cognome , Telefono
FROM Anagrafica
WHERE Indice = 2
Io seleziono i campi della mia tabella che hanno Indice ugale a 2.
Essendo Indice chiave primaria avro una sola tupla.
Quello che voglio io è
Num=2
SELECT Indice , Nome , Cognome , Telefono
FROM Anagrafica
WHERE Indice = Num
Voglio cioe dall'esterno inserire Num e selezionare i campi
corrispondenti
in cui Indice è uguale a Num.
Nello specifico :
  Dim txtIndice As Integer
  txtIndice = Indice.Value
  SELECT......
  WHERE (((Tab_ContenutoPortafoglio.Indice)=txtIndice))"
Quale è la sintassi corretta?

 Quale è la sintassi corretta?
Innanzi tutto spero che tu non stia cercando di scrivere il codice SQL in 
linea con quello VBA: questo non è permesso.
1) Io non dichiarerei una variabile con il nome txtIndice se poi non deve 
contenere del testo.
2) Suppongo che "Indice" sia un campo del database.
3) Credo che tu possa fare a meno della variabile txtIndice.
4) Suppongo che il suddetto campo Indice sia di tipo numerico.
Dim strQuery As String
strQuery = "SELECT * FROM Tabella WHERE Indice = " & Me.Indice
Poi bisogna vedere cosa vuoi fare con questa stringa di codice SQL; in ogni 
caso, quando ce l'hai in questa forma puoi usarla come vuoi nel codice.
Ti torna? 


Gent. Gabriele,
ho fatto come hai detto tu ed ho modificato la stringa :
sql = ".... WHERE (((Tab_ContenutoPortafoglio.Indice) = " & Me.Codice &
")"
Mi da come errore di run-time :
), ] o | mancante nell'espressione della query
Cosa pensi che manca ?
Grazie Ancora....


Se controlli attentamente la stringa che hai riportato nel tuo post, vedrai 
che ci sono 3 parentesi tonde aperte e solo 2 parentesi tonde chiuse.


Grazie Gabriele, l'errore non era solo quello
mancava anche un punto un poco prima.
Domani se non ti disturba vorrei sottoporti una nuova questione
che dovrebbe completare il mio primo grado di conoscenza
di gestione DD da VBA.
A domani e grazie