Newsgroup: it.comp.appl.access
Titolo: Uso di DoCmd.TransferDatabase

Ho fatto un applicativo che mi salva una serie di file Access come
archivio; salvo sia le ultime versioni dei FE che i BE. Per farlo uso
un comando del tipo
   FileCopy "T:\" & percorso & "\" & RST!nome & ".mdb", "T:
\Organizzazione\" & RST!nome & ".mdb"
dove percorso cambia per ogni applicativo e se sia FE o BE, RST!nome è
un campo in una tabella che mi elenca i file di cui devo fare una
copia.
Il problema è che lo avvio ogni mattina quando accendo il mio pc; in
quel momento può capitare che qualche utente stia usando
un'applicazione; credo sia a causa di ciò che spesso un BE non viene
copiato, senza che mi esca alcun errore.
Allora ho pensato di fare una routine che, per ogni BE, copi nel mio
applicativo le tabelle, una ad una, in una tabella tTrans, mediante un
comando così
   DoCmd.TransferDatabase 0, , nomefile1, 0, FLD, "tTrans"
dove nomefile1, è un nome costruito alla maniera del primo esempio,
FLD è il contenuto di un campo della tabella che contiene, per ogni
BE, l'elenco delle tabelle da copiare.
Allo stesso modo copio la tabella di transito così
   DoCmd.TransferDatabase 1, , nomefile, 0, "tTrans", FLD
Ebbene, le due operazioni non danno esito. Mi sono disfatto gli occhi
a controllare che i nomi di file e tabella siano corretti, e ho
riletto l'help sul comando DoCmd.TransferDatabase fino a consumare i
pixel dello schermo...
Grato a chiunque mi spieghi l'errore.
Riccardo Baldinotti

 wrote in message 
news:7dd2ddcc-b310-4928...@u38g2000yqe.googlegroups.com...
Ho fatto un applicativo che mi salva una serie di file Access come
archivio; salvo sia le ultime versioni dei FE che i BE. Per farlo uso
un comando del tipo
[...]
Se ho capito bene:
===========================================
Private Sub Command22_Click()
Dim db As Database, RS As DAO.Recordset
Set db = CurrentDb
Set RS = db.OpenRecordset("ExportTable", dbOpenDynaset)
' La tabella ExportTable contiene record formati da tre campi:
'       SourceTab   TargetDB    TargetTab
' contenenti l'elenco delle tabelle da esportare (SourceTab)
' i database di destinazione - path + filename - (TargetDB)
' le tabelle di destinazione (TargetTab)
Do Until RS.EOF
    DoCmd.TransferDatabase TransferType:=acExport, _
                       DatabaseType:="Microsoft Access", _
                       DatabaseName:=RS![TargetDB], _
                       ObjectType:=acTable, _
                       Source:=RS![SourceTab], _
                       Destination:=RS![TargetTab], _
                       StructureOnly:=False, _
                       StoreLogin:=True
    RS.MoveNext
Loop
End Sub
=============================================
Non l'ho provato per la pigrizia nel costruire la pluralità di tabelle
necessarie all'esperimento...
Se c'è qualcosa che non va rifatti vivo.
Bruno 

 Bruno
Ebbene, i misteri non finiscono mai.
Nell'help c'è il seguente esempio di TransferDatabase
DoCmd.TransferDatabase acImport, "Microsoft Access", _
    "C:\My Documents\NWSales.mdb", acReport, "NW Sales for April", _
    "Corporate Sales for April"
e io ho scritto l'istruzione così
DoCmd.TransferDatabase acImport, , _
   nomefile1, acTable, FLD, FLD
ma non funzionava.
Basandomi sul tuo esempio ho corretto così
DoCmd.TransferDatabase TransferType:=acImport,
DatabaseType:="Microsoft Access", _
   DatabaseName:=nomefile1, ObjectType:=acTable, Source:=FLD,
Destination:=FLD
e ha funzionato. Però non capisco come mai quest'istruzione debba
essere diversa da tutte le altre, in cui metto solo i valori,
facoltativi o obbligatori, senza dovere spiegare cosa siano.
Ma un poveretto, in quanti modi deve impazzire?
Per fortuna c'è sant'internet, san forum, e san tutti-quelli-che-ne-
sanno-più-di-me-e-mi-aiutano.
Il programma ora fila che è un piacere.
Riccardo Baldinotti

 wrote in message 
news:93a5177a-941d-4f4e...@j35g2000yqh.googlegroups.com...
Ebbene, i misteri non finiscono mai.
Nell'help c'č il seguente esempio di TransferDatabase
DoCmd.TransferDatabase acImport, "Microsoft Access", _
    "C:\My Documents\NWSales.mdb", acReport, "NW Sales for April", _
    "Corporate Sales for April"
e io ho scritto l'istruzione cosě
DoCmd.TransferDatabase acImport, , _
   nomefile1, acTable, FLD, FLD
ma non funzionava.
Basandomi sul tuo esempio ho corretto cosě
DoCmd.TransferDatabase TransferType:=acImport,
DatabaseType:="Microsoft Access", _
   DatabaseName:=nomefile1, ObjectType:=acTable, Source:=FLD,
Destination:=FLD
e ha funzionato. Perň non capisco come mai quest'istruzione debba
essere diversa da tutte le altre, in cui metto solo i valori,
facoltativi o obbligatori, senza dovere spiegare cosa siano.
Ma un poveretto, in quanti modi deve impazzire?
Per fortuna c'č sant'internet, san forum, e san tutti-quelli-che-ne-
sanno-piů-di-me-e-mi-aiutano.
Il programma ora fila che č un piacere.
Riccardo Baldinotti
===========================================
Parecchie funzioni (TransferDatabase č una di quelle) possono essere
scritte inserendo i parametri nell'ordine stabilito (come avevi scritto tu),
ovvero inserendoli senza un ordine preciso purché allora siano nominati
(sono i named arguments).
Quest'ultima forma č quella che preferisco perché di piů immediata
intuizione.
Un "poveretto" deve impazzire in questo e in tanti altri modi,
nonostante gli attuali mezzi di comunicazione.
E si puň consolare pensando che quando uscě Access (1992)
c'era solo il manuale a far da guida a un prodotto con tanti
buchi da far invidia a un colabrodo...
Bruno