Newsgroup: it.comp.lang.visual-basic
Titolo: Leggere/scrivere archivi in formato Access 2.0 da VB6 ???

Ho dei grossi problemi nel leggere/scrivere archivi in formato Access 2.0 da
VB6.
Se l'archivio viene aperto in monoutenza tutto fila liscio.
Se gia' altre applicazioni stanno usando l'archivio allora viene restituito
l'errore
"ERRORE DI RUN-TIME 3050 - IMPOSSIBILE BLOCCARE IL FILE"
Ho provato con questi metodi:
    Set MyDB = OpenDatabase("nome_file_db")
    Set MyRS = MyDB.OpenRecordset("select * from ARTICOLI")
    Set MyWORKspace = createworkspace("test", "test", "test")
    Set MyCONN = MyWORKspace.OpenConnection("", , , "nome_file_db")
    Set MyRS = MyCONN.OpenRecordset("select * from ARTICOLI")
L'errore viene restituito rispettivamente sulla OpenDatabase del primo
esempio e sulla OpenConnection del secondo esempio.
Ho provato anche con Ado ma e' lo stesso.
L'errore si presenta solamente se l'archivio e' gia' aperto da qualche altra
applicazione.
Cercando ho trovato dei riferimenti al file *.LDB che con certe versioni di
Access viene cancellato e con altre no, ho provato anche ad eliminare la
possibilita' di cancellazione di tale file, come suggerito su un post
inglese, ma niente.
Quindi la mia richiesta  di aiuto e' per sapere come leggere/scrivere dati
su un archivio GIA IN USO in formato Access 2.0 da programma VB6.
Ciao e grazie
RobertoA

     Set MyRS = MyCONN.OpenRecordset("select * from ARTICOLI")
Invece io ho provato con:
(nelle generali della form)
Dim dbe As dao.DBEngine
Dim db As dao.Database
Dim rs As dao.Recordset
(sull'evento load della form)
    Set dbe = New dao.DBEngine
    Set db = dbe.OpenDatabase("c:\access\base20.mdb", False)
Su un bottone ho immesso:
Set rs = db.OpenRecordset("select * from tabeprova", dao.dbOpenDynaset)
rs.AddNew
rs.Update
(la tabella contiene un solo campo autoincrementante)
Poi ho compilato il programma e l'ho aperto tre volte
ho cliccato il bottone "addnew record" alternativamente su ciascuna delle
maschere senza problemi
Presumo dalla tua segnalazione che ci sia qualche applicativo che apre in
modo esclusivo tabelle e/o database
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio
news:ctgc03$o7c$1...@news.newsland.it...

No l'apertura non e' in modo esclusivo, e sicuramente l'utente attuale ha i
permessi di scrittura sulla cartella / file database.
Posso sapere che Riferimenti/Controlli hai caricato ?
Ciao e grazie
RobertoA

 RobertoA
Sul progetto di prova ho i riferimenti:
Visual Basic For Applications
Visual Basic runtime objects and procedures
Visual basic objects and procedures
OLE Automation
Microsoft DAO 3.6 Object Library
Il mio vb è vb6/sp6



Ho provato anch'io col codice che hai postato e funziona tutto se uso SOLO
il programma di test in VB6, anche avviato piu' volte.
Se pero' avvio l'applicativo originale, scritto in VB3 o il programma di
test che hai inviato convertito in VB3, allora il programma di test si avvia
solo la prima volta, dalla seconda in poi restituisce l'errore (3050 -
Impossibile bloccare il file).
Credo che, come ho letto su altri post, sia una corruzione del file ldb
causato in qualche modo dalla diversa gestione del lock file che hanno
librerie diverse per accesso ai dati e quindi anche se spero non sia cosi,
non credo ci sia la possibilita' di far coesistere applicativi in VB3 e VB6
contemporaneamente su archivi in formato Access 2.0.
La cosa strana e' che se da VB6 uso esclusivamente il datacontrol per aprire
un set di dati, tutto funziona correttamente. E questo mi porta a pensare
che la supposizione precedente non sia corretta.
Anche col datacontrol mi veniva restituito l'errore 3050 finche' non ho
impostato la proprieta CONNECT su ACCESS (di default e' su Access2000; )
Ho anche provato ad impostare la proprieta CONNECT a ACCESS nel programma
VB6, ma niente da fare.
Ciao e grazie per qualsiasi aiuto potrete darmi
RobertoA


Ho scoperto dopo vari tentativi con tutti i tipi di connessione (anche via
odbc) che leggere/scrivere contemporaneamente su due archivi uno in formato
Access2000 e l'altro in formato Access 2.0 non e' normalmente possibile.
L'unico modo per farlo e' usare un datacontrol impostato con CONNECT su
ACCESS per la lettura/scrittura lato Access 2.0, mentre dal lato Access2000
vanno bene tutti i classici tipi di accesso quindi Dao, Ado, Ado su Odbc e
altri.
Ciao e grazie per l'aiuto
RobertoA