Newsgroup: it.comp.lang.visual-basic
Titolo: run-time error 3704

"Run-time error '3704': Operation is not allowed when the object is closed."
Solo su una macchina con Windows 2000 sp2!!
Tutte le altre macchine vanno bene: su tutti gli XP e tutti i Win2k, senza 
installare nulla. E anche sui w98, installando preventivamente mdac_typ 
2.8sp1 anche loro vanno bene...
C'ho soltanto una macchina Win2k che mi da quest'errore... PERCHE'?!?!?!?!
:-((((
Anche aggiornandola con l'ultimo MDAC, non risolvo....
B.
manca il soggetto, lo so: si tratta di un mio programma VB6 che usa ADO su 
un database su disco locale (file *.mdb), la connect è JetEngine4.0, per i 
recordset uso sia open che execute (secondo i casi).
grazie per il vostro aiuto.

 grazie per il vostro aiuto.
Mi è successo alcune volte...anche recentemente....
succede che non trova l'mdb la connessione o non può aprirla
(perchè se funziona su altri pc ...ritengo che tu abbia il prodotto
già debuggato e quindi non sia proprio quello che dice...ossia che hai
chiuso un oggetto (connessione o recordset) e tenti di
usarlo!....Vero???)
Il problema l'ho trovato...perchè l'mdb ha bisogno di una cartella in
cui possa SCRIVERE...
Se fai una installazione da Administrator...e poi non dai all'utente i
permessi per scrivere in quella tabella non va nulla!...quella cartella
su quel windows in cui c'è l'mdb...hai dato l'accesso read/write
all'utente che l'usa???
Prova ad accreditarti come Admin e guarda se fa il solito errore...se
lo fa anche da admin....hai fatto un errore banale...hai messo in
quella macchina l'mdb in un altra cartella!

 grazie per il vostro aiuto.
Ciao. Qs. errore significa che la precedente istruzione rs.Open non è andata
a buon fine (magari si trova dentro un IF), e se tu ora fai qualcosa sul
recordset lui ti avverte che questo è ancora chiuso.
Metti un segnalibro sulla riga rs.Open, e quando il codice si ferma li vai
avanti con F8 fino alla riga che ti da l'errore.
Il fatto che ti dia qs. errore su Win2k può dipendere da qualche API che
utilizzi nel programma.
Spero sia utile. Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 :-((((
Te lo potrei dire io poichè il messaggio mi pare chiaro, ma questi sono più 
autorevoli :)
http://support.microsoft.com/kb/190410/en-us
Ciao 

 a buon fine
Sento puzza di On Error Resume Next :)
Ciao 

 "Run-time error '3704': Operation is not allowed when the object is closed."
zac!
Quello che abbiamo detto tutti...presuppone che tu abbia debuggato il
programma...
e che la cosa che davvero dice....non sia imputabile ad un tuo errore
formale!
Qualora non ci sia...potrebbe darsi che ci sia un errore di
installazione.
Oppure una installazione di Mdac bacata (nel senso incompleta)
O comunque una carenza nella stringa di connessione
ti consiglierei di fare un semplice debug....
di fare un check se la connessione è aperta
if cn.state=adstateopen then msgbox "ConnAperta"
solita cosa per il recordset
compila l'exe e sostituiscilo nella macchina windows
o se vuoi tracciare sul posto la tua app...
scrivi i vari check in un file ...questo ti sarà molto utile per
ricostruire la sequenza logica su quella macchina!
MA
si presuppone che la tua applicazione sia esente da bug!!!....e
parecchi compreso me...non ci giurerebbero troppo!

 closed."
Ringrazio tutti per le risposte.
Purtroppo il problema si verifica solo su una macchina, il fatto che sia un 
win2k non credo che sia discriminante, e non penso che dipenda dal codice 
del mio programma ma piuttosto da qualche libreria corrotta su quel 
sistema...
Per quanto riguarda l'affermazione "si presuppone che la tua applicazione 
sia esente da bug!!!....e parecchi compreso me...non ci giurerebbero 
troppo"...
Beh... non c'è da giurarci: è matematicamente certo che ci siano dei bug... 
io sono assolutamente certo che l'unico programma al mondo sicuramente 
ESENTE da bug sia il famoso: "Hello world!".  :-))
Per quanto riguarda invece la mia connessione, la stringa di connect è:
    strconnessione = "Provider = Microsoft.Jet.OLEDB.4.0; _
    Data Source =" & archivioutente$
    objConn.Open (strconnessione)
Ed è chiamata UNA sola volta all'avvio del programma.
La var archivioutente$ è giusta, quella è fuori discussione.
Il recordset è utilizzato a volte in open e a volte in execute.
Uso l'execute quando ho bisogno di un elenco (ad esempio mi servono solo i 
nomi e cognomi) quindi: una chiamata secca ed una lettura sequenziale 
dell'rs, seguito da un Set rs = Nothing.
Utilizzo invece open quando devo spostarmi nei record, per eseguire 
aggiornamenti cancellazioni o aggiunte di dati.
Ho notato (quando uso open) che se faccio una semplice query SELECT, il 
recordset rimane aperto e lo devo chiudere io alla fine delle operazioni.
Se invece faccio una SELECT INSERT o un DELETE il recordset si chiude da 
solo (infatti se subito dopo chiedo una rs.close mi va in errore dicendo che 
il rs è già chiuso).
In ogni caso il problema sembra verificarsi proprio sul recordset, ma ripeto 
il codice è lo stesso, e su tutte le macchine e su tutti i sistemi operativi 
funziona bene!
Ho installato, proprio per le prove, windows XP senza sp, windows 2000 ws e 
server, windows 2003 server: funziona su tutti, senza alcuna installazione 
aggiuntiva.
L'ho provato addirittura su un windows98, proprio ieri, appena installato 
(proprio per questa prova): andava in errore! Ma ho dovuto solo installare 
MDAC_TYP 2.8sp1, dopodiché ha funzionato perfettamente anche lì.
Più compatibile di questo... :-))
Comunque indagherò, e appena scoprirò il motivo (perché lo scoprirò...) ve 
lo farò sapere.
Grazie di cuore a tutti, siete un gruppo prezioso.
Bruno

 closed." Solo su una macchina con Windows 2000 sp2!!
HO RISOLTO IL MISTERO !!
Ma... mi vergogno troppo a dirvi cos'era... :-(((((((
Se ho il coraggio ve lo dico domani, oggi vado a mettere la testa sotto 
terra!!
Come gli struzzi.
B



vediamo se indovino
....mancava l'mdb!

 ....mancava l'mdb!
Non proprio così, ma.... fuochino.... :-(((
Non potrai mai arrivarci, è terribile, ho fatto una stronzata pazzesca!!
Vabbè, mi avete aiutato in molti, ed ora come minimo è giusto che ve lo 
spieghi, anche se so che mi metterete alla gogna:
Premessa:
La mia applicazione due mesi fa era in fase di betatest.
In quel periodo c'erano pochissimi records e non mi preoccupavo ancora 
dell'archivio ma soprattutto delle routine di calcolo. Quindi per salvare i 
dati, invece del database, mdb utilizzavo un brutale file sequenziale 
(FILE.DAT) leggendo e riscrivendo tutti i record in sequenza, utilizzando 
una listview.
Successivamente, al crescere dei records, ho cambiato la struttura di 
salvataggio dei dati utilizzando un database access.
Poiché non volevo lasciar trasparire all'utente finale la tipologia dell' 
archivio dati (soprattutto volevo evitare facili aperture e manipolazioni 
con Access, cosa che avrebbe facilmente corrotto i dati) ho continuato ad 
utilizzare lo stesso nome di prima (FILE.DAT) semplicemente rinominando il 
database *.mdb.
A livello di programma non c'è nessun problema, l'estensione non è 
obbligatoria.
Premessa importante:
Prima di questa variazione di struttura, avevo alcuni betatester, tra cui il 
proprietario del Windows2000 "incriminato".
Oggi:
L'applicazione è finita, rilasciata e funzionante. Gli utenti hanno 
scaricato ed installato il programma, che funziona perfettamente.
Anche il mio betatester, che due mesi fa aveva in prova la versione beta 
"con il file sequenziale", ha oggi installato il prodotto definitivo...
Beh... non continuo oltre... l'hai capito da solo, cosa è successo...
:-(((((((((((((
Dopo aver passato 24 ore a smazzarmi tutto il codice, cercando qualche 
doppia close, oppure qualche dimenticanza di assegnazione "nothing" al 
Recordset, o qualsiasi cosa che poteva farmi capire cosa fosse 
quell'errore... dopo una notte quasi insonne...
Beh, è stata una semplice "botta di culo": per telefono mi sono fatto 
elencare tutti i files presenti nella cartella dove risiede il database, e 
quando lui mi ha detto: "...bla bla bla...FILE.DAT, 24KB..." sono 
sobbalzato!!
"Come hai detto... VENTIQUATTRO KAPPA?!? Ma se da vuoto è 196k, come fa ad 
essere 24K??"
Ma neanche un secondo dopo mi si è accesa la lampadina, ed ho capito tutto: 
la disinstallazione della beta non cancellava l'archivio, ed era rimasto il 
file della vecchia beta, con lo stesso nome, nello stesso folder... ma era 
un FILE SEQUENZIALE!!
Che stronzo che sono!!  :-)
B.
ps: comunque sono felice che il mio programma non ha ancora generato errori 
a nessuno. :-))  almeno una cosa buona...

 :-))
ERROR IN LINE 1: "Sorry, your planet has been destroyed in order
to make way for a hyperspace bypass. Prostetnic Vogon Jeltz."
Bye, G. 


--  
Postato da Virgilio Newsgroup: scopri i nuovi gruppi 
Eros, foto e video a 
http://newsgroup.eros.virgilio.it