Newsgroup: it.comp.appl.access
Titolo: Richiamare SQL e gestirne il risultato in una form.

Ciao a tutto il NG,
desideravo inserire una istruzione SQL sull'evento AfterUpdate di un
controllo in una form per verificare l'esistenza di record in una Tabella
e, in base al risultato, gestire l'evento. In pratica:
1. scelgo un valore in una ComboBox della Form;
2. viene eseguita un'istruzione SQL di selezione in base al valore scelto;
3. se il risultato della query è nullo allora mostro un messaggio e apro
una form PopUp altrimenti proseguo l'iserimento nella Form.
Le domande sono: come posso scrivere l'istruzione in VBA e, quindi, come
riconosco un risultato nullo per la query?
Grazie,
NEMO2K
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


al posto di un'istruzion sql interroga il db con il dlookup (vedi help) cosě hai un risultato, poi di conseguenza fai il resto
ciao
Nick 

 Nick
Potresti, cortesemente, esemplificare con riferimento alla mia precedente
come impostare la tua soluzione? Tieni conto che dovrò confrontare il dato
scelto nella ComboBox con un altro valore contenuto in Tabella non
esistente.
In verità sono riuscito a creare la query e questo è il codice SQL
sottostante:
SELECT DettagliOrdini.IDMateriale, DettagliOrdini.Misura,
DettagliOrdini.Colore, DistintaBase.Materiale, DistintaBase.Taglia,
DistintaBase.Colore
FROM DistintaBase LEFT JOIN DettagliOrdini ON DistintaBase.Materiale =
DettagliOrdini.IDMateriale
WHERE (((DettagliOrdini.Misura)=[DistintaBase]![Taglia]) AND
((DettagliOrdini.Colore)=[DistintaBase]![Colore]));
ma non riesco a trasferirla nella Form in modo "trasparente" e tale per
cui possa intercettare un risultato nullo da gestire come ho spiegato
prima.
Ciao,


 NEMO2K
ciao
Nick 

 Nick
Ho cambiato il tipo dato di "Controllo" perchè, in effetti, era una
stringa e "colore" con DettagliOrdini.Colore nel primo parametro di
DLookup ma quando aggiorno la Combo mi appare un messaggio che dice "The
field is to small to accep the amount of data you attempted to add. Try
inserting or pasting less data". Sai dirmi perchè?
grazie,
Nemo2K.



strano, prova a cambiare la istrsql con una query e vedi se ti da cmq l'errore..
oppure nel campo colore ci son troppi caratteri ma mi pare strano...
non capisco, prova a postare il tuo codice finale 

 non capisco, prova a postare il tuo codice finale
Ho provato una modifica, per la quale ti posto il codice della routine:
Dim strSQl As String, Estrazione As Recordset, Conteggio As Integer,
DBAttuale As Object
strSQl = " SELECT SELECT DettagliOrdini.IDMateriale,
DettagliOrdini.Misura, DettagliOrdini.Colore,
DistintaBase.MaterialeComposto, DistintaBase.TagliaComposto,
DistintaBase.ColoreComposto" & _
" FROM DistintaBase LEFT JOIN DettagliOrdini ON
DistintaBase.MaterialeComposto = DettagliOrdini.IDMateriale" & _
" WHERE (((DettagliOrdini.Misura)=[DistintaBase]![TagliaComposto]) AND
((DettagliOrdini.Colore)=[DistintaBase]![ColoreComposto]))"
Set DBAttuale = CurrentDb
Set Estrazione = DBAttuale.OpenRecordset(strSQl, dbOpenDynaset)
Estrazione.MoveLast
Conteggio = Estrazione.RecordCount
Me.Prova = Conteggio
"Prova" è il mio campo nella form.
Mi restituisce "Sintax error in query expression 'SELECT DettagliOrdini.
IDMateriale'
Any idea?
Muchas gracias,
NEMO2K


 ha scritto
nel messaggio
news:cicbna$8fj$1...@news.newsland.it...

Fossi in lui mi incacchierei anche io se tu
scrivessi
SELECT SELECT ...
MAssimiliano


 MAssimiliano
Ops! Mi era completamente sfuggito; delle volte il copia/incolla crea più
danni che vantaggi.
Ho apportato la correzione ma, ora mi appare il messaggio "Errore di
run-time '3021': No current record" e, aprendo la finestra di Debug viene
evidenziata l'istruzione Estrazione.MoveLast.
L'Help in linea mi dice:
 "Questo errore si verifica dopo l'applicazione non riuscita di uno dei
metodi Find o del metodo Seek, quando l'oggetto Recordset sottostante non
contiene nessun record oppure il record è stato eliminato. Spostarsi su un
altro record o selezionarlo, quindi ritentare l'operazione. Se l'oggetto
Recordset è vuoto, non è possibile posizionarsi su un record corrente.
Verificare le proprietà BOF e EOF."
Dal momento che, per i valori che utilizzo in fase di test, sia
DistintaBase che DettagliOrdini contengono dati, qual'è il senso di non
trovare alcun record?
Grazie,


 ha scritto
nel messaggio
news:cie93a$8r2$1...@news.newsland.it...

Perchè invece non usi una query parametrica per
caricare il rst??
c'è un esempio sul sitocomune.
MAssimiliano

 MAssimiliano
Diciamo la verità,
mi sto perdendo per strada e, forse, complicando la vita. In verità, il
mio intento era solo quello di verificare (attraverso un conteggio dei
record) se un materiale avesse o meno la Di.Ba.: in caso negativo avrei
chiesto se si voleva caricarla e, in caso affermativo, avrei aperto una
Form di caricamento.
Parzialmente ho trovato l'inizio della strada da percorrere:
ho creato un controllo non associato che mi conta i record in DistintaBase
che abbiano come codice materiale (MaterialeComposto) il valore del
materiale dell'ordine (IDOrdine). Non è sufficiente, perchè devono
esistere anche la TG ed il Colore dell'ordine. Come posso sostituire il
criterio singolo con tutti e tre?
Grazie,
NEMO2K
Me!Prova = DCount("[ColoreComposto]", "DistintaBase",
"[MaterialeComposto]=" & Me!IDMateriale)


 ha scritto
nel messaggio
news:cievig$set$1...@news.newsland.it...

Fatti una query con i criteri che ti servono e
contane i record
MAssimiliano