Newsgroup: it.comp.appl.access
Titolo: Cerco di aprire un report in un altro db

Sto lavorando al db A e sto cercando di aprire un report situato nel
db B. Creo un'istanza dell'oggetto Application e lavoro su questo:
Dim appAccess As Access.Application
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "C:\Documents and Settings\ecc
\db_prove.mdb"
appAccess.DoCmd.OpenReport "dipendenti", acViewPreview, , ,
acWindowNormal
appAccess.CloseCurrentDatabase
Il report naturalmente si trova in db_prove. Se metto come parametro
acViewNormal...mi stampa il report, ok allora vuol dire che il codice
funziona. Se però metto la modalità acViewPreview (quella che serve a
me) non si apre nulla :-( Secondo voi da cosa può dipendere? Forse c'è
qualcosa che dovrei settare per far partire il report in modalità
anteprima...insomma non mi vengono idee in mente.
Grazie.


Cerca il post di "RobertoA" con oggetto "Anteprima report non visibile su 
report lanciato da altro file mdb" del 12.01.2008, li c'è anche la risposta.
-- 
Ciao
Geppo


 -------------------------------------------------------------------
Public Declare Function apiSetForegroundWindow Lib "user32" Alias 
"SetForegroundWindow" (ByVal hwnd As Long) As Long
 Public Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" 
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
 Global Const SW_MAXIMIZE = 3
 Global Const SW_SHOWMINIMIZED = 2
 Global Const SW_NORMAL = 1
 Global Const SW_HIDE = 0
 Set objAccess = New Access.Application
 lngRet = apiSetForegroundWindow(objAccess.hWndAccessApp)
 lngRet = apiShowWindow(objAccess.hWndAccessApp, SW_NORMAL)
 objAccess.OpenCurrentDatabase Application.CurrentProject.Path & "\" & 
nome_file_report
 objAccess.DoCmd.OpenReport nome_report, tipo_visualizzazione, Filtro, 
selezione, acWindowNormal
'           Do While Len(
objAccess.CurrentDb.Name
) > 0
'               DoEvents
'               Debug.Print Timer
'           Loop
' objAccess.Quit
' Set objAccess = Nothing
 -------------------------------------------------------------------
Il virgolettato non lo metto perche' preferisco far proseguire l'istanza 
'madre' e poter aprire numerose anteprime se desiderato
Nell'esempio originale, tratto da
http://www.mvps.org/access/reports/rpt0012.htm
dopo l'avvio del report sull'mdb secondario, se ne attendeva la chiusura 
prima di proseguire col resto del codice sulla finestra iniziale
Tutto l'ambaradan, pur funzionando, e' comunque una soluzione che mi 
soddisfa ben poco
Ti obbliga ad uscire dall'ambiente di lavoro per modificare una stampa, le 
query sono un po' sul file principale ed un po' sul file secondario che 
contiene le stampe, devi avere aperti sempre entrambi per lavorarci, noltre 
devi fornire all'utente finale anche una copia di Access per metterlo a 
posto formalmente
Vorrei provare crysytal report col 'report design component' mi sembra si 
chiami, e' una libreria di funzioni che dovrebbe permetterti di ricreare 
all'interno della tua applicazione un ambiente di disegno dei report nuovi o 
di modifica di quelli esistenti
Insomma diventerebbe un sistema con le funzionalita' minime di stampa che 
ormai hanno anche i Finson da 50 eiri
Pero' stavo vedendo che sull'ultima versione la 2008 e' stato dismesso tale 
componente, e' presente sulla XI che e' ancora commercializzata, costo 
attorno ai 6-700 eiri
Ciao
RobertoA

 ha scritto nel messaggio 
news:525a67cb-0dfd-4505...@q39g2000hsf.googlegroups.com...


Le risposte che ti hanno dato possono andare bene.
Ti propongo una strada diversa ma altrettanto efficace.
Nel db B scrivi una funzione simile a questa e in un modulo pubblico:
Public Function ApriReport(NomeReport as string)
DoCmd.OpenReport Nomereport, acViewPreview
End Function
A questo punto chiudi il db B e apri il db A; apri un modulo e aggiungi ai 
riferimenti il db B.mdb. Fatto.
Ora da qualsiasi punto del db A puoi chiamare la funzione così:
ApriReport ("NomeReportSulDbB")
Se tutto va bene potrai visualizzare in anteprima il report del db B.
Ciao, Carlo 

 Se tutto va bene potrai visualizzare in anteprima il report del db B.
Ho fatto cosi' anch'io inizialmente
Poi ho scelto l'altra strada per avere meno riferimenti possibili e rendere 
modificabile al volo il nome file contenente i report
Ciao
RobertoA

 ha scritto nel messaggio 
news:479db639$1...@newsgate.x-privat.org...

Mi sembrava avessi detto... "Tutto l'ambaradan, pur funzionando, e' comunque 
una soluzione che mi
soddisfa ben poco"
Ciao, Carlo 

 Ciao, Carlo
Si, e' cosi ancora adesso
Difatti sto cercando un'altra possibilita'
Ciao
RobertoA 

 Se tutto va bene potrai visualizzare in anteprima il report del db B.
Purtroppo questo sistema non funziona nel caso in cui il db A sia un MDE
:-(
-- 
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution


Ciao Gabriele
a me funziona perfettamente anche se entrambi sono mde...o uno di essi.
Procedure fatte:
database B in formato Axp (2002); conversione in mde non senza aver prima 
scritto la funzione (ovvio);
apertura del db A.mdb; aggiunta del riferimento a db B.mde; conversione del 
db A in mde...funziona benissimo. Da A richiamo il report che si trova in B 
in anteprima di stampa.
Allo stesso modo posso aprire maschere di B.
Ciao, Carlo 

 Allo stesso modo posso aprire maschere di B.
Fin qui mi torna tutto.
Ma quello che non sono riuscito a fare io č questo: A.mdb con
l'applicazione, B.mdb con i report personalizzati per l'utente.
In A.mdb ho inserito un riferimento a B.mdb.
Compilo A.mdb senza problemi.
Provo a creare A.mde ma mi dice che non č possibile.
Se non ricordo male, un file MDE non puň avere tra i suoi riferimenti un
file MDB, mentre le altre combinazioni sono tutte ammesse (MDE con
rifeirmento a MDE, MDB con riferimento a MDB, MDB con riferimento a MDE).


 rifeirmento a MDE, MDB con riferimento a MDB, MDB con riferimento a MDE).
E difatti lui dice di di aver convertito il B.mdb in mde e poi di aver 
convertito l'A.mdb in mde
Il punto e' che se da A.mde fai riferimento alle stampe su B.mde come fai 
poi da B.mde a modificarle ?
Funzionare fnziona, solo che non si capisce l'utilita' della cosa
Ciao
RobertoA

 Funzionare fnziona, solo che non si capisce l'utilita' della cosa
Ah, ecco!!!
Ora mi torna :-)



Ma se devi modificare qualcosa lascia uno o entrambi come mdb...qual'è il 
problema?
Dai il db a un cliente? O devi usarlo per te?
Ciao, Carlo 

 Ora mi torna :-)
A Gabriè, ma cosa ti torna?
Tu hai detto: "Purtroppo questo sistema non funziona nel caso in cui il db A 
sia un MDE".
A me funziona perfettamente, se vuoi ti posso mandare una copia.
Se poi hai bisogno di modificare qualcosa lascia tutto in mdb, che tanto 
funziona tutto ugualmente.
Ciao, Carlo 

 PBsoft di Gabriele Bertolucci
Ciao, Carlo 

 Dai il db a un cliente? O devi usarlo per te?
E non puoi lasciare uno come mdb, o meglio non puoi lasciare solo il B come 
mdb
L'obiettivo era, almeno nel mio caso, permettere al cliente di modificare i 
report esistenti (B.mdb), pur consegnandogli l'A come mde per impedire 
modifiche volontarie/involontarie del codice
Ciao
RobertoA

 funziona tutto ugualmente.
Questo è un altro modo di far funzionare le cose: entrambi i file in MDB.


 modifiche volontarie/involontarie del codice
Anche a me farebbe tanto piacere poter dare al cliente un file MDE con
l'applicazione ed un file MDB con i report.
E' proprio un peccato.


 Questa operazione la devi fare prima di distribuire i due db.
E' proprio questo il succo della storia.
La necessità sarebbe quella di distribuire i report su un file MDB separato
dall'applicazione principale in MDE: purtroppo questo non è possibile.


 dall'applicazione principale in MDE: purtroppo questo non è possibile.
Come non e' possibbole ?
Certo che lo e'
Solo che non puoi usare i riferimenti per arrivare ai report
Devi andare a colpi di
----------------------------
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "C:\Documents and Settings\ecc
\db_prove.mdb"
appAccess.DoCmd.OpenReport "dipendenti", acViewPreview, , ,
acWindowNormal
appAccess.CloseCurrentDatabase
----------------------------
Il problema che invece vedrei e' l'impossibilita' di fornire, all'interno 
della tua applicazione, un ambiente per modifcare i report o crearne di 
nuovi
In pratica usando il sistema A.mde col codice e B.mdb con i report, ti 
obblighi a fornire al cliente anche una copia di Access
E se per la maggior parte delle applicazioni potrebbe essere fattibile, per 
quelle a 'basso costo' non lo e' assolutamente
Eppure ormai cello hanno tutti la personalizzazione dei report e quindi non 
si puo' fare a meno di fornirla neanche se fai una semplice rubrica 
telefonica
Ciao
RobertoA

 ----------------------------
Vediamo se riesco a mettere la parola "fine" :-)
NON E' POSSIBILE: all'interno di un file MDE, avere un riferimento ad un
file MDB.
Quello che suggerisci tu è sempre, ovviamente, possibile, visto che ricorri
all'automation.


 all'automation.
E fin qua' era chiaro ed accettato da tutti, credo
Ti ho semplicemente risposto alla
"...La necessità sarebbe quella di distribuire i report su un file MDB 
separato
dall'applicazione principale in MDE: purtroppo questo non è possibile..."
E questa affermazione e' falsa perche' invece e' possibile usando 
l'automazione
Ciao
RobertoA

 l'automazione
Giustissimo, Roberto :-)
