Newsgroup: it.comp.appl.access
Titolo: Stampa Report - Problemino

Salve a tutti e scusate il Subject un po' fesso.
Il problema č:
in un report che riporta i nomi di una rubrica (in ordine alfabetico)
vorrei che su ogni pagina, in alto a destra, mi indicasse le prime tre
lettere del primo e dell'ultimo cognome della pagina, qualcosa come
ABA-ACC, poi alla pagina successiva ACE-ALL eccetera, come
nell'elenco telefonico o nei vocabolari. 
Come si fa? Io non credo di essere capace.
Grazie a tutti
Ciao
Filippo

 ha scritto nel messaggio
news:0t252vc17411lf5ck...@4ax.com...

Inserire nell'intestazione di pagina (a destra) sia le prime tre lettere del
primo cognome che le prime tre lettere dell'ultimo cognome della pagina non
saprei proprio cosa suggerirti.
Ma se ti contenti di avere in alto a destra le prime tre lettere del primo
cognome della pagine ed in basso a destra le prime tre lettere dell'ultimo
cognome della pagina, se il campo che contiene il cognome si chiama Cognome,
puoi inserire nella Sezione Intestazione pagina una casella di testo non
associata nella cui origine controllo scrivi:
=Left([Cognome];3)
ed inserisci nella Sezione Pič di pagina pagina una casella di testo non
associata nella cui origine controllo scrivi:
=Left([Cognome];3)
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:0t252vc17411lf5ck...@4ax.com...

Ho appena sviluppato un modo per ottenere quello che cerchi.
Se sei ancora interessato, replica a questo messaggio, per evitare che la
risposta cada nel vuoto.
Ciao, Carlo


Sono interessato, anche perché imparare mi piace sempre
Grazie
Filippo


OK.
Mettiti ben calmo e cerca di seguire passo passo...
Prima di tutto crea una nuova tabella che chiamerai "Iniziali" con "ID"
numerico e "Composizione" Testo.
Presuppongo l'esistenza di una tabella "Indirizzi" con Cognome e Nome, ma
puoi chiamarla come più ti piace.
Crea una query che chiamerai "SQIndirizziOrdinati" dove metti i campi
(almeno due) "Cognome" e "Nome" presi dalla tabella che vuoi (indirizzi per
esempio) e ordinati crescente per cognome e poi per nome. Questi campi
devono essere i primi due oppure non avere nessun campo ordinato davanti
altrimenti si perde il crescente per cognome e nome.
Realizza un report che si alimenta dalla tabella "Iniziali" con queste
caratteristiche:
Intestazione Report a zero cm.
Intestazione Pagina 2,229 cm
Qui metterai le etichette del cognome e del nome e un controllo "Testo11"
casella di testo posizionata in alto a destra con allineamento testo a dx:
può andar bene un carattere Arial punto 12 grassetto.
Nel corpo (altezza 0,677cm) inserisci i controlli "Cognome" e "Nome".
Inserisci un Piè di Pagina Pagina di 0,931cm di altezza
Metti a zero il Piè di pagina Report.
La larghezza del report deve essere inferiore alla larghezza massima
stampabile.
Il carattaere dei controlli Cognome e Nome possono essere quelli che vuoi ma
l'espansione dei controlli va impostata su NO.
Il formato della pagina sarà A4 (predefinita).
Questo di seguito il codice da inserire nel modulo del report:
Private Sub IntestazionePagina_Format(Cancel As Integer, FormatCount As
Integer)
Me.Testo11 = DLookup("Composizione", "Iniziali", "ID =" & Me.Page)
End Sub
Private Sub Report_Open(Cancel As Integer)
Call InserisciIniziali
End Sub
Private Sub InserisciIniziali()
    DoCmd.RunSQL "Delete * from Iniziali;"
    Dim rcs As Recordset, RcsIniziali As Recordset
    Dim Cont As Integer, i As Integer, Progressivo As Integer
    Dim a As Integer
    Set RcsIniziali = CurrentDb.OpenRecordset("Iniziali")
    Set rcs = CurrentDb.OpenRecordset("SQIndirizziOrdinati")
    rcs.MoveLast
    rcs.MoveFirst
    i = 35
    Progressivo = 1
    On Error Resume Next
    For Cont = 1 To rcs.RecordCount
        If Cont = 1 Or Cont = 36 Or Cont = i + 1 Then  'Or Cont = i
        RcsIniziali.AddNew
        RcsIniziali!ID = Progressivo
        RcsIniziali!Composizione = Left(rcs!Cognome, 3)
            For a = 1 To 34
            rcs.MoveNext
            Next a
        RcsIniziali!Composizione = RcsIniziali!Composizione & "-" &
Left(rcs!Cognome, 3)
            For a = 1 To 34
            rcs.MovePrevious
            Next a
                If Cont = i + 1 Then
                i = i + 35
                End If
        Progressivo = Progressivo + 1
        RcsIniziali.Update
        End If
        rcs.MoveNext
    Next Cont
    rcs.MoveFirst
    rcs.MoveLast
        With RcsIniziali
        .MoveLast
        RcsIniziali.Edit
        RcsIniziali!Composizione = RcsIniziali!Composizione & "-" &
Left(rcs!Cognome, 3)
        RcsIniziali.Update
        End With
    rcs.Close
    RcsIniziali.Close
End Sub
Buon divertimento e fammi sapere.
Questa risposta può essere inserita nel SitoComune (per Federico Luciani)
Ciao, Carlo


Complimenti! Infatti mi hai ispirato quest'altra soluzione.
Un solo RecordSet, nessuna nuova tabella.
L'unica query č quella che mi prende i nomi (cognome, nome telefono
etc) e li ordina
la textBox nella intestazione pagina ha come origine evento la
funzione fnIniziale. 
Quindi, partendo dal presupposto che nel mio report c'entrano non piů
di 12 record per pagina, dato il formato e i caratteri etc (pagina A4)
questo č il codice retrostante il report:
Option Compare Database
Option Explicit
Dim Iniziali() As String
Function fnIniziale() As String
  fnIniziale = Iniziali(Me.Page)
End Function
Private Sub Report_Open(Cancel As Integer)
  Const RecordPerPagina  As Long = 12
  Dim rcsQuery As Recordset
  Dim NRecord As Long, I As Long, ProgressivoPagina As Long, A As Long
  Dim TotRecord As Long, TotPagine As Long
 
  Set rcsQuery = CurrentDb.OpenRecordset("qryInOrdine")
  TotRecord = rcsQuery.RecordCount
  TotPagine = TotRecord \ RecordPerPagina + 1
  ProgressivoPagina = 1
 
  ReDim Iniziali(TotPagine) As String
  rcsQuery.MoveLast    ' ma č proprio necessario il MoveLast?  
  rcsQuery.MoveFirst    ' non dovrebbe bastare il MoveFIrst?
  For NRecord = 1 To TotRecord
    A = NRecord Mod RecordPerPagina
    Select Case A
      Case 1
        Iniziali(ProgressivoPagina) = Left(rcsQuery!Cognome, 3) & " -
"
      Case 0
        Iniziali(ProgressivoPagina) = Iniziali(ProgressivoPagina) &
Left(rcsQuery!Cognome, 3)
        ProgressivoPagina = ProgressivoPagina + 1
    End Select
    rcsQuery.MoveNext
  Next NRecord
End Sub
A me funziona e sono soddisfatto.
Ti ringrazio
Filippo


Se a te va bene allora va meglio la tua soluzione perchè è tua...farina del
tuo sacco...complimenti.
MoveLast perchè così il RecordCount funziona e sà quanti record ci sono e
poi MoveFirst perchè c'è la necessità di spostarsi al primo record.
Ciao, Carlo