Newsgroup: it.comp.appl.access
Titolo: ADP, come esportare dati in excel?

Ho un problema allucinante, devo trovare il modo di aggiornare da codice la
lista di tabelle di access.
Mi spiego:
Nell'ADP vedo le mie tabelle, se ne creo una nuova in SQL Server, da access
non la vedo; la vedo se premo F5 che mi aggiorna la schermata... ma io devo
farlo da codice.
Come posso fare?
Ora spiego perche devo fare ciň:
Ho un ADP, e da qui dvo esportare dei dati in un file di excel:
Ho verificato che    "DoCmd.TransferSpreadsheet"   negli ADP funziona SOLO
prendendo dati direttamente dalle tabelle (non trova view o SP)
Quindi ho fatto questo: quando l'utente deve esportare i dati, eseguo una SP
che crea una nuova tabella, dopodiche esegui il "DoCmd.TransferSpreadsheet"
per esportare i dati.... perň Access non mi vede la tabella appena creata,
non si accorge che esiste (a meno che io non vada nella finestra DB e prema
F5 per aggiornare la lista delle tabelle, allora funziona tutto; ma un
utente non potra mai fare questo, perchč mica vede la finestra DB) quindi
devo trovare il modo di farlo da codice.
Ho provato con    Application.RefreshDatabaseWindow    ma non cambia nulla.
Avete qualche idea?
Anche un modo alternativo per esportare dei dati in excell da SQL Server al
pc dove girta il client ADP.
Grazie, Max

Visti i problemi descritti, tra un rosario e l'altro ho trovato una
soluzione, allucinantemente contorta, ma funziona; quindi la posto, con
anche le funzioni che uso :-)
=========================================================
'Esegue una stringa SQL sul server, usando la connessione predefinita di
access
Public Sub ExecSQL(SQL As String, Optional timeOut As Long = 60)
On Error GoTo Err
Dim adoRs As New ADODB.Recordset
Dim adoCon As New ADODB.Connection
Dim adoCmd As New ADODB.Command
Set adoCon = Application.CurrentProject.AccessConnection 'sharo la
connessione di Access
Set adoCmd.ActiveConnection = adoCon
adoCmd.CommandType = adCmdText
adoCmd.CommandText = SQL
adoCmd.CommandTimeout = timeOut
adoCmd.Execute
Uscita:
On Error Resume Next
adoRs.Close
Set adoRs = Nothing
Set adoCmd.ActiveConnection = Nothing
Set adoCon = Nothing
Exit Sub
Err: Resume Uscita
End Sub
==================================================
'Ritorna il nome utente del database, usa la connessione di default di
access
Public Function UserDB() As String
On Error GoTo Err
Dim adoRs As New ADODB.Recordset
Dim adoCon As New ADODB.Connection
Dim adoCmd As New ADODB.Command
UserDB = "" ' di default non torna nulla
Set adoCon = Application.CurrentProject.AccessConnection 'sharo la
connessione di Access
Set adoCmd.ActiveConnection = adoCon
adoCmd.CommandType = adCmdText
adoCmd.CommandText = "SELECT USER"
adoCmd.CommandTimeout = 15
Set adoRs = adoCmd.Execute()
If adoRs.BOF Or adoRs.EOF Then GoTo Uscita
UserDB = adoRs.Fields(0).Value
Uscita:
On Error Resume Next
adoRs.Close
Set adoRs = Nothing
Set adoCmd.ActiveConnection = Nothing
Set adoCon = Nothing
Exit Function
Err: GestErr: Resume Uscita
End Function
===========================================================
Sul server ho creato una tabella "TemplateClientiExcelExport" che esiste
sempre, ed è sempre vuota.
Quando devo esportare ne creo una copia con comando    docmd.copyobject
(cosy access si accorge che esiste :-|)  e la chiamo
"ClientiExcelExport_NomeUtente", aggiungo il nome utente per non avere
problemi in multiutenza (il nome utente è univoco)
Poi ci inserisco i dati che voglio esportare.
Uso Docmd.TransferSpreadsheet per esportare i dati, e poi elimino la tabella
creata.
Ecco il codice:
===========================================================
ExecSQL "IF EXISTS (SELECT name FROM sysobjects WHERE name =
'ClientiExcelExport_" & UserDB() & "'  AND type = 'U') EXEC ('DROP TABLE
ClientiExcelExport_" & UserDB() & "')"           'se esiste già, la elimino
DoCmd.CopyObject , "ClientiExcelExport_" & UserDB(), acTable,
"dbo.TemplateClientiExcelExport"    'creo la copia
ExecSQL "INSERT INTO ClientiExcelExport_" & UserDB() & " SELECT * FROM
dbo.Clienti WHERE (" & StringaFiltro & ")"    'inserisco i dati
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9,
"ClientiExcelExport_" & UserDB(), nomeDB, True    'li esporto
ExecSQL "IF EXISTS (SELECT name FROM sysobjects WHERE name =
'ClientiExcelExport_" & UserDB() & "'  AND type = 'U') EXEC ('DROP TABLE
ClientiExcelExport_" & UserDB() & "')"     'la elimino
===========================================================
Note: con tanti testo ho verificato che DoCmd.TransferSpreadsheet  è in
grado di esportare i dati di tabelle nel DB corrente; non vede le view, non
vede le stored procedure, non vede ne tabelle temporanee, ne sp temporanee.
Inoltre quando cerca una tabella interroga il lista di oggetti che ha access
in memoria, e NON il server. quindi se la tabella è stata creata da una SP
sul server DOPO che ho fatto partire l'ADP, access non la vede (a neno di
andare nella finestra DB dove c'è la lista delle tabelle, e qui premere F5,
così si aggiorna)
Per questo è dovuto fare tutto dall'ADP, così Access si accorge che ho
creato la tabelle, e la puo usare nel docmd.TransferSpreadsheet
Una mattina persa per trovare un modo di esportare dati in excell, ma si
può? mah... :-|
Ciao a tutti, Max

 Come posso fare?
Trovato:
DoCmd.SelectObject acTable, , True
Application.RefreshDatabaseWindow
cosě funziona, perň questo nasconde la maschera eventualmente attiva;
inoltre non so se funziona quando nei parametri di avvio si sceglie di non
mostrare la finestra del DB.
Ciao, Max

 ha scritto nel messaggio
news:aen3jr$8bau1$1...@ID-141456.news.dfncis.de...

Esportarli in formato testo? O comunque un formato "esterno" al'mdb...
Ciao.
--
Sergio MAZZA

 Esportarli in formato testo? O comunque un formato "esterno" al'mdb...
Ok, ma il cliente vuole tutto in excell; e comunque il problema resta...
come?
L'unico comando che mi viene in mente è    docmd.transfert_qualcosa
che però negli ADP ha qualche limitazione (ma almeno sono riuscito a farlo
funzionare)
Grazie, Max

 ha scritto nel messaggio
news:aepab6$8oa25$1...@ID-141456.news.dfncis.de...



Ma il transfer(qualcosa) lo puoi fare anche su una query, ci hai già
provato?
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:aeq3gi$a3l$1...@canarie.caspur.it...

Si, ma in un ADP non funziona.
In un ADP riesci ad esportare solo tabelle intere, qualsiasi altra sorgente
dati provi (view, stored provedure, tabella temporanea, stored procedure
temporanea ecc...) da un errore di "oggetto non trovato", questo provando
tutti i tipi di qualificazione del nome
view
dbo.view
nomedb.dbo.view
nomeserver.nomedb.dbo.vew
ciao, Max


Acc!
Ciao.
--
Sergio MAZZA