Newsgroup: it.comp.appl.access
Titolo: tabelle-word

da access come faccio a creare una tabbella in word ed aggiungere i
risultati provenienti da una query ?
Riesco ad aperire l'applicazione word, a aprire il documento a me
interessato ma pio non rieso ad andare nel punto preciso del documento di
word ( che puo essere anche un riferimento di riga es. riga 5 o 13) e li
creare una tabelle ed immettere i dati che risultano da una query di access.
--
Luca Beatrice
Luca.b...@tiscali.it
http://lucabeatrice.risorse.com

 ha scritto nel messaggio
news:aejvl5$uns$1...@lacerta.tiscalinet.it...

Se devi crearla la tabella poi provare con questo suggerimento che ho
inviato qualche tempo fa:
'-----------------
Salve a tutti;
sono un po' latitante ma le ultime battute sull'argomento "stampa unione" mi
hanno dato la molla per la ricerca di altre soluzioni. In effetti c'è una
soluzione molto semplice che avevo visto utilizzare in word 2000 e pensavo
fosse una features di quel pacchetto; invece (mea culpa) la stessa soluzione
è possibile utilizzarla anche nel pacchetto '97.
Esiste in word un "codice di campo" (spulciate l'help please!) chiamato
DATABASE; iddu non fa altro che creare una connessione al database e leggere
i dati o da tabella o da stringa sql specificata nel codice di campo e
presentarli formattati come una tabella.
Quindi per realizzare un documento word di tipo fattura (dati intestazione
ed elenco dettaglio) i passi sono questi (da modificare a secondo delle
proprie necessità):
- tabella o query con i dati dell'intestazione della fattura (parte alta -
lato uno della relazione);
- creare il documento word, scrivere il documento e legarlo (stampa unione)
alla tabella/query (lato uno);
- visualizzare (sempre da word) la barra strumenti "DATABASE";
- posizionare il cursore dove vogliamo inserire la tabella dei dati riferiti
al dettaglio (lato molti) e premere il bottone "Inserisci database";
seguendo le istruzioni del wizard noi creiamo tutti i riferimenti per
leggere i dati (molti) della fattura indicando anche il campo della
condizione where che ci serve per estrarre solo quelli riferiti a quel
cliente o id. Ricordatevi di spuntare l'opzione "inserisci come campo".
Ora manca di inserire la "variabile" nella condizione where; con ALT-F9
possiamo intervenire nelle opzioni del codice di campo visualizzandone il
contenuto che dovrebbe essere simile a questo:
{DATABASE \d "C:\\dati\\fatture.mdb" \c "TABLE Dettagli" \s "SELECT
[articolo], [prezzo], [idFattura] FROM [Dettagli] WHERE (([idFattura] =
3 ))" \h}
Praticamente la condizione è preimpostata per restitutire i dettagli della
fattura con idFattura = 3; quindi bisogna inserirgli il riferimento al campo
id della fattura. Possiamo farlo perché il documento word è legato alla
tabella/query (lato uno) delle fatture.
togliamo il 3 (l'idfattura), lasciando il cursore vicino al segno
dell'uguale, dalla barra strumenti "Stampa unione" - "inserisci campo
unione"  e scegliamo "Id" (della fattura).
La situazione dovrebbe essere questa:
{DATABASE \d "C:\\dati\\fatture.mdb" \c "TABLE Dettagli" \s "SELECT
[articolo], [prezzo], [idFattura] FROM [Dettagli] WHERE (([idFattura] =
{MERGEFIELD id} ))" \h}
Ora premiamo ALT-F9 per ripristinare la visualizzazione dei codici di campo
e se facciamo la stampa unione si dovrebbe materializzare il nostro sogno...
Una fattura si word!!
Spero di essermi spiegato...
Un saluto a tutti e buon lavoro.
--
Sergio MAZZA
'-----------------
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:aek52j$d4c$1...@canarie.caspur.it...



Per favore scrivi la tua risposta dopo il testo del messaggio precedente,
come faccio io; grazie.
Probabilmente non è chiaro quello che ho scritto; l'esempio che ti ho
inviato ti permette di effettuare più connessioni a database (di varia
natura) e relative tabelle/query nello stesso documento, arrivando a
generare più tabelle dinamiche. Lo fai utilizzando da word il codice campo
DATABASE (vedi help) o meglio ancora con il wizard nella barra strumenti
"database".
Per quello che vuoi fare tu ho una routine di esempio ma modificarla e
adattarla vuol dire un bagno di sangue se non hai dimestichezza con il
codice VBA.
Fammi sapere cosa preferisci fare...
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:ael2me$qs$1...@canarie.caspur.it...

OK prova ad inviarmela vedro cosa posso fare...
Grazie


Eccola la routine:
'--------------
Sub stampaDettaglio()
'gestisco l'errore altrimenti rimango in mutande
On Error GoTo stampaDettaglio_err
'chiamiamo word e per ora non lo rendiamo visibile
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
oApp.Visible = True
'oggetto contenente il recordset del Dettagglio
Dim rstDett As Recordset
'variabile contenente l'istruzione sql
Dim stringaSql As String
'apro il modello della fattura
oApp.Documents.Open "c:\documenti\provaMailmerge.doc"
'eseguo la stampa unione dell'intestazione con output su un nuovo documento
With oApp.Documents(1).MailMerge
    .Destination = wdSendToNewDocument
    .Execute
End With
'attivo il documento creato
oApp.Windows(2).Activate
'cerco la stringa "Elenco"
oApp.Selection.Find.ClearFormatting
With oApp.Selection.Find
    .Text = "Elenco"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
oApp.Selection.Find.Execute
'mi creo la query che mi restituisce il dettaglio della fattura
stringaSql = "Select numero, testo, data, contatore From q_elenco2 Where
numero = 22"
'mi prendo il recordset
Set rstDett = CurrentDb.OpenRecordset(stringaSql)
'tanto pe' nun sape' ne' legge ne' scrive
rstDett.MoveLast
rstDett.MoveFirst
'inserisco la tabella con X colonne, intestazione Y righe
oApp.ActiveDocument.Tables.Add Range:=oApp.Selection.Range,
NumRows:=rstDett.RecordCount, NumColumns:=4
'tabella senza griglia
oApp.Selection.Tables(1).Borders.Enable = False
'scrivo l'intestazione della tabella
With oApp.Selection
    .TypeText Text:="Numero"
    .MoveRight Unit:=wdCell
    .TypeText Text:="Testo"
    .MoveRight Unit:=wdCell
    .TypeText Text:="Data"
    .MoveRight Unit:=wdCell
    .TypeText Text:="Contatore"
End With
'scrivo il dettaglio della fattura
Do While Not rstDett.EOF
    With oApp.Selection
        .MoveRight Unit:=wdCell
        .TypeText Text:=rstDett(0)
        .MoveRight Unit:=wdCell
        .TypeText Text:=rstDett(1)
        .MoveRight Unit:=wdCell
        .TypeText Text:=Format(rstDett(2), "dd mmmm yyyy")
        .MoveRight Unit:=wdCell
        .TypeText Text:=Format(rstDett(3), "#,###")
    End With
    rstDett.MoveNext
Loop
'posso visualizzare il risultato per un controllo
oApp.Visible = True
'stampo il documento appena creato
oApp.ActiveDocument.PrintOut
'chiudo il documento senza salvarlo
oApp.Windows(1).Close SaveChanges:=wdDoNotSaveChanges
'chiudo il modello della fattura senza salvarlo
oApp.Windows(1).Close SaveChanges:=wdDoNotSaveChanges
'chiudo word
oApp.Quit
'chiudo il recordset
rstDett.Close
'rilascio gli oggetti
Set oApp = Nothing
Set rstDett = Nothing
MsgBox "Stampa terminata."
stampaDettaglio_exit:
    Exit Sub
stampaDettaglio_err:
    oApp.Visible = True
    MsgBox Err.Number & ", " & Err.Description
End Sub
'--------------
Funziona cosě; devi inserire nel documento word la parola "Elenco" dove vuoi
far creare la la tabella con i dati presi da access.
Devi togliere (se non ti interessa) la parte di codice che esegue il
mailmerge...
Ciao.
--
Sergio MAZZA