Newsgroup: it.comp.appl.access
Titolo: do while not rs.eof........ loop

Oh, ragazzi non lo so!
Si parla tanto di standard nella programmazione, e quello che è indicato 
come codice di esempio negli esempi, lo capisci ed elabori la tua versione 
personalizzata... e non va!
Io è un anno e mezzo che scrivo pagine ASP con connessioni a DB tramite 
recordset ADODB e so che quando voglio operare con il contenuto di un 
recordset faccio un Do while not rs.eof (dove rs=recordset)...Loop e 
analizzo ogni singolo record del recorset.
E' vero che dopo aver settato il recordset, i dati vengono salvati 
all'interno del recordset. Allora dovrei spostarmi nel primo record del rs 
con rs.MoveFirst, e poi dovrei anche contarne i campi rs.Fields.Count... 
dopo di ché posso iniziare il mio ciclo Do...Loop? Qualcuno dice di si, ma 
io penso che qualcosa non va.  In realtà mi da errore proprio 
sull'istruzione DO.. perché?
Il recordset è creato, tant'è vero che creando una query e scrivendo come 
SQL la stringa riportata per il rs, la query funziona perfettamente e mi 
visualizza una tabella di due record... segno che anche il rs dovrebbe 
contenere due recor al suo interno... giusto? Dovrei passare questi due 
record per elaborare il risultato nel codice che segue, però l'errore 
nell'istruzione DO blocca tutto... avete idea del perché questo robo voglia 
così tanto farmi dannare??????
Riporto la mia querystring e il ciclo do-loop
queryStr = "SELECT * FROM OrdiniAcq WHERE OrdiniAcq.Cliente=" & IdCliente &_
" AND ((OrdiniAcq.Bolla='" & NuovaBollaTesto & "') AND (OrdiniAcq.Sel=Yes))"
rs = db.OpenRecordset(queryStr)
    'rs.Fields.Count
        Do while not rs.EOF
            QueryInserimento = "INSERT INTO 'BolleBody' ('idOrdine', 'Sel', 
'Lotto', 'PzUnitario', 'QtaOrdine', 'PzTotaleOrdine', 'ImportoIvaOrdine', 
'Cliente', 
'DescrizOrdine','Bolla','ImponibileOrdineSelezionato','IvaOrdineSelezionato') 
VALUES (" & rs("idOrdine") & ", " & rs("Sel") & ", " & rs("Lotto") & ", " & 
rs("PzUnitario") & ", " & rs("QtaOrdine") & ", " & rs("PzTotaleOrdine") & ", 
" & rs("ImportoIvaOrdine") & ", " & Left(RagSoc, 99) & ", " & 
rs("DescrizOrdine") & "," & NuovaBollaTesto & "," & 
rs("ImponibileOrdineSelezionato") & "," & rs("IvaOrdineSelezionato") & ")"
            DoCmd.RunSQL QueryInserimento
        Loop
Ciao a tutti, grazie.
Pierp.
pier...@libero.it

 
[CUT]
A proposito di Standard mi permetto di suggerirti alcune attenzioni
che sicuramente non sono solo ESTETICHE, ma che forse in un anno
e mezzo ti sono sfuggite.
1)Innanzitutto per usare la proprietà RecordCount sull'Oggetto
Recordset occorre un MoveLast per aggiornare il BookMark, ma
se il tuo intento è solo quello di verificare l'esistenza di un
Record allora ti basta testare rs.EOF ed uscire....!
Set rs=Db.OpenRecordset.....
If rs.EOF then Exit Sub
Tutto il resto........
2)La costruzione della stringa come stai facendo
funziona se nessuno dei campi è VUOTO altrimenti ciccia..!
Pertanto metti in atto i controlli del caso.
NZ(rs!NomeField,vbnullstring) nel caso di stringa ecc...!
Questo punto però deve essere integrato con il 3 decisamente
importante.
3)Se i campi sono di tipo Testo piuttosto che Data o Numero
la formattazione del Criterio va diversificata APICETTI o #
4)Ricorda che le DATE non vanno inserite nel Formato ANGLOSASSONE
ma ISO, oppure semplicemente invertendo mm/dd.
Saluti
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio 
news:8f43e2cd4c6ba7fa1b...@mygate.mailgate.org...


 Ciao P.
Ciao.
No mi riferisco alla Query INSERT che non viene eseguita
poichè non sintatticamente corretta se non viene valutato
il campo Nullo(che spesso esiste) inserito dal rs!NomeCampo.
Ciao


Loop
--
Ciao
Galliano.

>Loop
In realtà c'è ma non ho riportato tutto il ciclo Do-loop, per semplificare 
le cose, dato che in realtà il discorso si ferma prima del ciclo. Ad 
esempio, avevo posizionato un rs.MoveFirst per spostarmi al primo record del 
rs, ma non me lo accetta... (tutto questo prima del do-loop, inoltre, il 
movenext dovrebbe trovarsi prima del loop, non appena dopo il Do, giusto? 
Perché il ciclo partirebbe già con il cursore posizionato nel primo record 
del recordset, giusto? In realtà non entra neppure all'interno del 
Do-Loop...
ciao P.

 ha scritto nel messaggio 
news:ASWXe.11112$9l.3...@twister1.libero.it...


 rs = db.OpenRecordset(query)
anziché, come andrebbe fatto:
Set rs =db.OpenRecordset(query)     ?
A questo punto ti chiedo: come dichiari i recordset? Hai impostato l'opzione
Option Explicit? Nel post originale parli di recordset ADODB, ma questo č
DAO: hai impostato i giusti riferimenti?
--
Ciao
Galliano.

 DAO: hai impostato i giusti riferimenti?
Hai ragione. Per capirci ti mostro tutto il codice, forse ti sarà più chiaro 
il tutto... Ho aggiunto un bel po' di commenti, e per non rendere il post 
una cosa lunghissima, ho salvato la routine nel seguente file 
http://digilander.libero.it/workstation/FLORES/codice.htm
Io sono sempre fermo al solito punto: non mi viene eseguita la query segnata 
alla riga 106. Mi viene restituito l'errore 3219 - Operazione non valida 
(jeterr40.chm).
La cosa strana è che se imposto l' istruzione query in una query, 
l'inserimento funziona perfettamente. Forse tutto sta nella dichiarazione 
del recordset... ma allora come devo dichiararlo? Sono un po' in 
confusione...
Pierp. 

 ha scritto nel messaggio
news:3NTYe.16704$9l.4...@twister1.libero.it...

Andiamo con ordine:
1) Un consiglio spassionato che ti do è quello di evitare come la peste la
dichiarazione implicita delle variabili: questo ti eviterà innumerevoli mal di
pancia, oltre a migliorare di molto la leggibilità del tuo codice; malgrado possa
sembrare, non è affatto la stessa cosa scrivere:
 query = "select quello che ti pare...."
anziché (correttamente):
 Dim query as string
 query = "select quello che ti pare ..."
Per essere costretto a fare ciò, scrivi "Option Explicit" in testa al modulo, proprio
sotto "Option Compare Database". Meglio ancora, imposta tale opzione come predefinita
in Strumenti-->Opzioni-->Editor.
2) Perchè hai commentato l'istruzione "Set Rs as DAO.Recordset"? Senza
quell'istruzione il codice non può funzionare. Il recordset si dichiara e si assegna
così, per rimanere al tuo esempio:
 Dim Rs as DAO.Recordset
 Set Rs = Db.OpenRecordset("Select quello che vuoi ....")
Scrivere semplicemente:
 Rs = Db.OpenRecordset("Select quello che vuoi...")
non ha alcun senso: l'errore però non ti viene segnalato perchè, a causa della
mancanza dell'Option Explicit, l'istruzione viene interpretata come se fosse la
dichiarazione implicita di una variabile variant. Ovviamente, come dicevo, occorre
che siano impostati correttamente i riferimenti alle librerie DAO: a partire da
Access 2000 la cosa va fatta a mano, in Strumenti-->Riferimenti.
Comincia col fare queste correzioni e osserva l'effetto che ottieni.
--
Ciao
Galliano

 ha scritto nel messaggio 
news:6M_Ye.41231$TR5....@news.edisontel.com...


Ciao Galliano,
scusa ma ho provato a togliere il commento sulla dichiarazione esplicita 
dell'RS (Dim rs As DAO.Recordset) e mi da errore quando eseguo: "rs = 
db.OpenRecordset(query)"
...è per quello che avevo commentato l'esplicitazione dell'oggetto rs.
Errore:
...............................
Errore di compilazione:
Utilizzo non valido di Property
(   OK   )      (     ?     )
...............................
Altra cosa:
sono stufo di dover chiedere informazioni a nastro e andare in giro per la 
rete a cercare di capire esempi già fatti... sai consigliarmi qualche libro 
in cui venga spiegato abbastanza bene come gestire i recordset e il codice 
VB? Ho guardato su 
www.sitocomune.com
 ma non so se oltre a spiegare le 
maschere, le tabelle, le query e tutto il resto, l'argomento "codice di 
programmazione" sia affrontato abbastanza bene... hai qualche dritta? 
(Magari in edizione italiana se possibile).
Ciao, Pierp.
----
Private Sub CreaBolla_Click()
On Error GoTo Err_CreaBolla_Click
---[CUT]---
Dim db As Database
Dim rs As DAO.Recordset
Set db = CurrentDb
query = "SELECT ContatoreBolle.idAnnoBolla, ContatoreBolle.AnnoBolla,"_
& "ContatoreBolle.ContatoreBolleEmesse FROM ContatoreBolle WHERE"_
& "ContatoreBolle.AnnoBolla=Year(Date()) ORDER BY 
ContatoreBolle.idAnnoBolla"
Forms!DDebug.Controls!txtDebug = query
rs = db.OpenRecordset(query)
NuovaBollaId = rs(2) + 1
    NuovaBollaNumeroTesto = String(5 - Len(LTrim(RTrim(Str(NuovaBollaId)))), 
"0") & LTrim(RTrim(Str(NuovaBollaId)))
    NuovaBollaTesto = "BO" & Left(LTrim(RTrim(Str(rs(1)))), 4) & 
NuovaBollaNumeroTesto
    NuovaBollaNumero = Val(Left(LTrim(RTrim(Str(rs(1)))), 4) & 
NuovaBollaNumeroTesto)
rs.Close
---[CUT]---
End Sub 

 ----
[CUT]
Un'ultima cosa: è buona norma, partecipando al newsgroup, scrivere dopo il messaggio
al quale si risponde e non prima.
--
Ciao
Galliano.

NEWBIE   Ciao a tutti.
ACCESS 2002
Gestisco tabelle di immagini di circa 2 giga. Quando supero i 2 
giga mi si pianta tutto. Per ora risolvo compattando (e a volte 
addirittura esportando perche  neppure la compattazione e  
consentita). Pero  le mie tabelle continuano a crescere, ho 
sempre piu  immagini da inserire. Come posso fare per gestire da 
access, quindi senza buttare via tutto quello che ho scritto, 
database piu  capienti?
Non sono una programmatrice professionista. Conosco pochi 
programmi, smanetto solo con access. Non me la fate difficile, 
please! LOL
TIA
--  
Postato da Virgilio Newsgroup: scopri i nuovi gruppi 
Eros, foto e video a 
http://newsgroup.eros.virgilio.it

 ha scritto nel messaggio 
news:9096321.1127900607087.JavaMail.newsgroup@sc-ng-1...
