Newsgroup: it.comp.appl.access
Titolo: Interagire con i singoli dati di un Database Tramite VBA

Salve a tutti! Stò facendo uno stage in un azienda che mi vede
costretto a dover imparare da 0 access, e devo dire che senza questo
NG non sarei riuscito a fare molto! Qui c'è veramente di tutto, grazie
a tutti quelli che hanno contribuito a crearlo ed ampliarlo, oltre
all'aver fatto il sitocomune che è una miniera di informazioni
ovviamente :D
Però c'è una cosa che nonostante tutte le ricerche fatte nel NG non
riesco a risolvere, anche se è stata trattata + volte.
Ho creato una piccola query che và ad agire su una tabella. Tale
tabella ha un campo chiamato "Accettato" di tipo Boolean. La query fà
un semplice GROUP BY su tale campo il cui valore sia "False", in modo
tale da darmi come output o un campo settato su "false" o nessun
campo.
Il mio scopo è riuscire a vedere tramite il VBA il risultato di questa
query, ovvero se è vuota o se contiene un campo settato su "false".
Da quanto ho capito bisogna usare i recordset tramite libreria DAO, ma
nonostante tutti i tentativi che stò facendo non riesco a tirare un
ragno dal buco. Potrei avere un esempio di codice da usare in questo
caso?
Ripeto che mi interessa solamente sapere se c'è il primo campo o se il
risultato della query è appunto una tabella vuota :D
Grazie a tutti anticipatamente, spero di essere stato sufficentemente
chiaro! Ciauz!

 ha scritto nel messaggio 
news:1182255652.3...@k79g2000hse.googlegroups.com...






[risposta]
Non è necessariamente così; puoi utilizzare la funzione DCount:
es.
Dim numeroRecordAccettati as integer
numeroRecordAccettati = dcount("*","nomeQuery","Accettato=-1")
if numeroRecordAccettati >0 then
    Msgbox "Ci sono: " & numeroRecordAccettati & ", Accettati."
else
    Msgbox "Non sono presenti record accettati."
end if
Ciao.
-- 
Sergio MAZZA 

Grazie mille! Ora funziona tutto, non puoi immaginare quanto diavolo
di tempo ci abbia perso con ado e dao quando poi c'era questa funzione
semplicissima :D Grazie ancora! ;)

 semplicissima :D Grazie ancora! ;)
Beh anche con i recordset non è difficile...
esempio
    Dim strSQL As String
    Dim RS As Recordset
    strSQL = "select accettato  from nometabella wher nomecampo = false "
    Set RS = CurrentDb.OpenRecordset(strSQL)
     If rs.eof then 'EOF sta per End Of File
        Msgbox(" ci sono records con campo accettato = False")
    else
                Msgbox(" NON ci sono records con campo accettato = False")
    end if
    RS.Close
    CurrentDb.Close
Ciauz a te

Ciao! Per completezza ho voluto provare anche con i recordset, ma
quando eseguo quel codice mi dice "Parametri insufficienti, richiesto
1". Cliccando debug mi seleziona questa riga del codice "Set RS =
CurrentDb.OpenRecordset(strSQL)" .. ho aggiunto le librerie ado per
questa prova, ne devo aggiungere altre? Ci tengo a risolvere questo
problema visto che probabilmente mi si ripresenterà in futuro :P
Grazie mille ancora ;)

 ha scritto nel messaggio 
news:1182259236.4...@k79g2000hse.googlegroups.com...

problema visto che probabilmente mi si ripresenterą in futuro :P
Grazie mille ancora ;)
Giusto!
Questo č DAO.... Aggiungi ai riferimenti Microsoft DAO 3.6 Object Library
hai modificato  strSQL = "select accettato  from nometabella wher nomecampo 
= false " ?
Tra le virgolette metti il codice sql della tua query...
Ciao 

 ha scritto nel messaggio
news:1182259236.4...@k79g2000hse.googlegroups.com...

problema visto che probabilmente mi si ripresenterą in futuro :P
Grazie mille ancora ;)
[risposta]
Con i recordset puoi provare:
Dim rs As ADODB.Recordset
rs.open "Select count(*) From nometabella/query Where Accettato=-1",
currentproject.connection, adOpenKeyset, adLockOptimistic
if rs.recordcount > 0 then
    msgbox "ci sono..."
else
    msgbox "non ci sono..."
end if
set rs = nothing
Ciao.
-- 
Sergio MAZZA

Ciao e grazie ancora della risposta :D Ho aggiunto la libreria
Microsoft Dao 3.6 Object Library e disattivato la Ado messa
precedentemente.. ma l'errore è sempre quello :( Si aspetta un
parametro :( Magari sbaglio il metodo di inserimento della libreria?
Per aggiungerla mi limito ad andare (dalla schermata del visual basic)
su Strumenti -> Riferimenti, metto la V sulla voce che mi interessa e
dò ok, infatti se riapro stà li :O Sicuro che proprio non ne servono
altre? Non capisco perchè mi dia quest'errore :( Ciau e grazie
ancora :)
p.s. si ho modificato la stringa SQL in quella che mi serviva :)

 ha scritto nel messaggio 
news:1182260291.9...@c77g2000hse.googlegroups.com...


[risposta]
Le librerie ADO e DAO possono anche essere incluse entrambi; basta che al 
momento della creazione/utilizzo degli oggetti tu indichi il tipo esatto:
es.
Dim rsADO as ADODB.Recordset
Dim rsDAO as DAO.Recordset
...
Ciao.
-- 
Sergio MAZZA 

@Sergio: Grazie, ho provato anche con ADO come hai consigliato.. ma
stavolta invece di darmi errori crasha per intero access.. ed anche
una volta riavviato se riprovo ricrasha. Questi 2 errori (riavvio con
ADO e errore di parametro mancante con DAO) sono gli stessi che avevo
prima di postare qui, avevo lasciato stare questi metodi perchè stavo
per impazzire XD Stò usando access 2002 su windows xp service pack 2.
Qualche idea in merito a questi problemi? :( Grazie ancora! :D

 ha scritto nel messaggio 
news:1182261089.3...@w5g2000hsg.googlegroups.com...

[risposta]
Strano.
Te lo fa anche in un altro mdb?
Hai installato tutte le SP di Office?
Ciao.
-- 
Sergio MAZZA 

Si, a quanto pare dà lo stesso errore anche con un nuovo mdb.. ho
appena provato e si riavvia access anche in questo caso :( Cmq ho
notato che nonostante sia access 2002 i database sono fatti in formato
access 2000 (sicuramente un impostazione dell'amministratore) e pare
non ci siano SP installati in office. Purtroppo anche volendo non
posso farne installare altri perchè andrebbero installati su tutti i
pc dell'azienda :( Grazie ancora :)

 ha scritto nel messaggio 
news:1182260291.9...@c77g2000hse.googlegroups.com...


Scusa... ma sei sicura che  l'SQL funzioni... fai una prova copia la stringa 
SQL in una query ed eseguila... non ti da errori?
Quando dice parametri insufficienti è perchè la stringa SQL non è 
corretta... puoi posatrla.
Ciao

si ho provato e funziona perfettamente. Preciso che la query prende un
parametro da un form.. ed ho usato query simili in passato senza
problemi :( Cmq come ho scritto sopra ho anche provato a fare un nuovo
DB, ci ho messo una situazione simile ma con query non parametrica.. e
il risultato è sempre quello :(  Penso di essere ad un punto morto,
access ha vinto questa battaglia ;_; Grazie a tutti per la
disponibilità che avete dimostrato, un saluto :D

 ha scritto nel messaggio 
news:1182323199....@c77g2000hse.googlegroups.com...

I computer hanno sempre ragione! Ma noi non dobbiamo mai arrenderci e 
dobbiamo sforzarci di capire. Posta la query.... Il parametro non deve 
essere messo tra le virgolette ma concatenato con &
Ex con parametro testo: strSQL = "select * from tabella where NomeCampo = '" 
& Forms!NomeCampo & "'"
Se usi un parametro numerico devi: "select * from tabella where NomeCampo = 
" & Forms!NomeCampo
Ciao

hihi Grazie per l'interesse che ci stai mettendo nell'aiutarmi :D
io come stringa sql ho scritto:
strSQL = "SELECT Specifiche.Accettato FROM Specifiche WHERE
(((Specifiche.[Codice Inventario])=[Forms]![Caricamento Tarature]!
[nome_strumento]) AND ((Specifiche.Accettato)=False)) GROUP BY
Specifiche.Accettato"
Tutto su una riga per evitare problemi nella concatenazione :(
In pratica prima controllo che il codice dello strumento sia quello
scritto nel form (si sceglie da una lista di campi non modificabile),
poi controlla che ci siano campi accettati settati su "false"
raggruppandoli..
Ovviamente avviando la query mi dà sempre il risultato voluto, non dà
nessun tipo di fastidio.
Il problema è che avevo fatto questa prova anche in un altro DB con
una query banale, dove mi prendeva tutti i campi senza condizioni o
raggruppamenti. Ed ho sempre gli stessi problemi :( Gli manca il
parametro :( Ovviamente provando con ADO c'è sempre il problema del
crash di access.. probabilmente l'unica soluzione consiste
nell'installare i Service Pack di office, cosa che non posso fare :
( Oppure (mi ripeto) magari ho sbagliato il metodo per selezionare le
librerie ado e dao, sembrerebbe anche questa una soluzione plausibile :
(
Grazie ancora di tutto, è bello sapere che c'è gente disposta ad
aiutarti così insistentemente :D Grazie ancora ;)

 ha scritto nel messaggio 
news:1182326249.9...@n15g2000prd.googlegroups.com...

Beh, io non sono uno degli espertoni, ma mi applico (anche perchè è il mio 
lavoro) e ogni giorno si impara sempre di più... e tra qualche anno 
chissà...
Io cerco di dare solo un po di quello che ricevo dal newsgroup...anche a  me 
aiutano spesso...e quindi mi sembra giusto ricambiare...
Se hai la libreria nei riferimenti basta solo quello. La stringa così 
costruita è sbagliata
Prova questa:
strSQL = "SELECT Specifiche.Accettato FROM Specifiche WHERE
(((Specifiche.[Codice Inventario])= '" & [Forms]![Caricamento Tarature]!
[nome_strumento]) & "' AND ((Specifiche.Accettato)=False)) GROUP BY
Specifiche.Accettato"
Nota che il campo preso dalla form deve essere fuori dalle virgolette perchè 
altrimenti VBA nono lo risolve ma lo tratta come testo....
ti insegno un trucco per capire se la stringa scritta funziona. Vai in debug 
e metti un interruzione sulla riga dove crei la stringa... quindi dalla 
finsestra immediata /ctrl+G) scrivi ?strSQL e vedei il valore della 
viariabile la copi in access e la esegui, se tu avessi fatto così avresti 
visto subito che VBA non sostituiva il valore a [Forms]![Caricamento 
Tarature]!
[nome_strumento])
Ciao

Caspita! Ora funziona! :O Quindi il problema era per davvero nella
query O_O fantastico! quindi se devo prendere un valore da un form ci
devo mettere all'inizio: '" & mentre lla fine & "' ok capito :D Grazie
mille finalmente non ho + limiti nella creazione di maschere e db
hihihi ora mi posso sbizzarrire :D Mi hai risolto un grandissimo
problema grazie ancora! ;) E' stato un piacere :D Questo newsgroup è
fantastico :D

 ha scritto nel messaggio 
news:1182331006.8...@p77g2000hsh.googlegroups.com...

Se è testo si! se è un campo numerico guarda il mio post precedente....
ciao