Newsgroup: it.comp.appl.access
Titolo: Ciclo su Tabelle SQL allegate

Un saluto a tutti i partecipanti al NG
Con gli oggetti DAO vorrei fare un ciclo sulle tabelle SQL allegate per 
verificare quali sono movimentate con la seguente sub :
Dim db As DAO.Database, rs As DAO.Recordset, sql As String, sqlcmd As String
Dim tbl As DAO.TableDef
Set db = CurrentDb
For Each tbl In db.TableDefs
    If tbl.Attributes = dbSystemObject Then
    Else
        sql = "select * from " & tbl.Name & ""
        Set rs = db.OpenRecordset(sql, dbOpenSnapshot, dbSeeChanges, 
dbReadOnly)
        If rs.EOF Then
        Else
            sqlcmd = "insert into movimentate (tabella) values ('" & 
tbl.Name & "')"
            DoCmd.SetWarnings False
            db.Execute (sqlcmd)
            DoCmd.SetWarnings True
        End If
    End If
Next
Set rs = Nothing
Set db = Nothing
ma purtroppo non funziona.
Dove sta l'errore ?
Grazie per qualsiasi aiuto.
Ciao - Daniele 

 ha scritto nel messaggio 
news:funhbt$3qp$1...@tdi.cu.mi.it...

 Il dbSeeChanges č applicabile solo ai recordset di tipo dynaset, inoltre 
usi anche dbReadOnly che non permette modifiche.
Ma a cosa ti serve questa opzione? Essa serve solo a vedere se un altro 
utente sta modificando gli stessi dati...
Ciao, Carlo 

 Ciao, Carlo
Ciao Carlo
ho optato per questa "opzione", scusa la ripetizione, perchè il semplice 
comando :
Set rs = db.OpenRecordset(sql)
mi genera il seguente errore :
errore di run-time '3622':
usare dbseechanges con OpenRecordset per accedere ad una Tabella SQL Server 
con una colonna IDENTITY
Qualche suggerimento alternativo ?
Grazie e ciao. Daniele

 ha scritto nel messaggio 
news:fup8mk$etb$1...@tdi.cu.mi.it...

Prova con:
db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges, dbOptimistic)
oppure
db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges, dbPessimistic)
Ciao, Carlo 


con entrambe le soluzioni, la routine sembra lavorare, aprendo un'istanza di 
"Access" e chiudendola alla fine, ma non esegue il comando richiesto se il 
rs non è "EOF". Sembra appunto che non riconosca lo stato "EOF" del 
recordset.
Ciao - Daniele


Infatti a mio avviso la routine č scritta male.
Prova cosě:
For Each tbl In db.TableDefs
    If tbl.Attributes = dbSystemObject Then
    Else
        sql = "select * from " & tbl.Name & ""
        Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges, 
dbOptimistic)
Do While Not rs.EOF
            sqlcmd = "insert into movimentate (tabella) values ('" &
tbl.Name & "')"
            DoCmd.SetWarnings False
            db.Execute (sqlcmd)
            DoCmd.SetWarnings True
loop
End If
Next
Oppure:
For Each tbl In db.TableDefs
    If tbl.Attributes = dbSystemObject Then
    Else
        sql = "select * from " & tbl.Name & ""
        Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges, 
dbOptimistic)
rs.movelast
rs.movefirst
Do While Not rs.EOF
            sqlcmd = "insert into movimentate (tabella) values ('" &
tbl.Name & "')"
            DoCmd.SetWarnings False
            db.Execute (sqlcmd)
            DoCmd.SetWarnings True
loop
End If
Next
Il resto, prima e dopo resta invariato.
Ciao, Carlo 

 Prova così:

scusa Carlo ma in questo modo scorrendo il recordset ottengo di riprodurre 
tutti i record sulla mia nuova tabella, mentre io vorrei solamente 
memorizzare il nome della tabella nel caso contenesse anche un solo record. 
Per fare questo devo testare la proprietà EOF. Inoltre nella seconda ipotesi 
il popolamento del recordset (move first ...) mi genera un errore nel caso 
di recordset EOF.
Grazie per il tuo interessamento.
Ciao Daniele 


Ciao Carlo
mi vergogno all'ennesima potenza. Con il comando :
db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges)
tutto funziona alla perfezione. Ho fatto un errore macroscopico nella mia 
tabella di destinazione.
Scusami se ti ho fatto perdere tempo.
Ti ringrazio e ti saluto cordialmente.
Daniele

 ha scritto nel messaggio 
news:fuq35v$d65$1...@tdi.cu.mi.it...

Prima di vergognarti (e non è il caso) faresti meglio a postare l'errore e 
il codice funzionante...altrimenti si potrebbe pensare che stai sfruttando 
la situazione.
Ciao, Carlo