Newsgroup: it.comp.appl.access
Titolo: Contrassegnare altri record di un intervallo come il record posto alla fine dell'intervallo

Ho una tabella(di un  mdb access97) con una serie di record con un campo
numerico progressivo,
sempre in questa tabella c'è un campo vuoto,che dopo n record
contrassegno con una lettera per es. A , dopo una altra serie di record
con una altra lettera B e così via.
Quindi ottengo il record n. 1,2,3,4,5, mentre il sesto record ,nel campo
vuoto presenta la
Lettera A(come potrebbe essere una serie di asterischi o altro), poi il
record n.7,8,9,10,11,12,13,14,15,16,17,18,19,
mentre il ventesimo record, nel campo vuoto presenta la lettera B(potrebbe
essere anche una altra lettera o ben altro
questo non mi interessa)e così per tutti i record della tabella.
Poi sempre in base all'ordine del campo progressivo tutti i record
contrassegnati
li accodo in un'altra tabella: record n.6, il record n. 20 e così via per
tutti i record
contrassegnati.  E fino qui ci siamo.
La domanda è: se l' intervallo di record tra un record contrassegnato e un
altro
supera un certo numero che io stabilisco, come posso avere  altri records
contrassegnati come il record della fine dell'intervallo? Es. stabilisco che
se l'intervallo tra un record contrassegnato ed un altro supera i tre record
voglio altri record nell'intervallo contrassegnati come il record dell'
estremo dell'intervallo prendiamo
come esempio l'intervallo di record tra il record n. 6 e il record n.
20,dove ci sono
tredici record, quindi voglio contrassegnare come il record n. 20 il n. 9
,12, 15,17
perché l'intervallo(tra il record n.6 e il n. 20)supera i tre record e nello
stesso tempo
contrassegno(sempre come il record n.20) un certo numero di record all'
interno dell'intervallo ,creando una serie di intervalli(sempre all'interno
dell'intervallo che stiamo prendendo in esame)che non superino i tre
record.Spero di essere stato chiaro.
Un Saluto  a Tutti                 Davide

contrassegnati come il record della fine dell'intervallo? Es. stabilisco che
[cut]
Ipotizziamo:
la tabella si chiama 'tblRighe'
i campi che ci interessano si chiamano 'lngInd' (la numerazione) e
'chrMark'(il campo *lettera*)
La soluzione che io adotterei č
a) in un modulo la seguente funzione di J.L.Viescas
***
Function IsNothing(varToTest As Variant) As Integer
'Autore: J. L. Viescas
   IsNothing = True
   Select Case VarType(varToTest)
        Case vbEmpty
            Exit Function
        Case vbNull
            Exit Function
        Case vbBoolean
            If varToTest Then IsNothing = False
        Case vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency
            If varToTest <> 0 Then IsNothing = False
        Case vbDate
            IsNothing = False
        Case vbString
            If (Len(varToTest) <> 0 And varToTest <> " ") Then
IsNothing = False
   End Select
End Function
***
b) Abbinata all'evento 'su click' di un pulsante chiamato
'cmdNormalizza' quest'altra routine:
***
Private Sub cmdNormalizza_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSql As String
Dim lngCnt As Long
Dim lngIndTmp As Long
dim lngStep as Long
Dim strMarkTmp As String
    lngStep = 3 + 1
    strSql = "Select lngInd, chrMark " _
        & "FROM tblRighe ORDER BY lngInd"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSql)
    rs.MoveFirst
    Do
        If IsNothing(rs!chrMark) Then
                lngCnt = lngCnt + 1
            Else
                lngCnt = 0
        End If
        If lngCnt = lngStep Then
            lngIndTmp = rs!lngInd
            Do
                rs.MoveNext
                If rs.EOF Then
                    GoTo Exit_cmdNormalizza_Click
                End If
                If Not (IsNothing(rs!chrMark)) Then
                    strMarkTmp = rs!chrMark
                    rs.FindPrevious "[lngInd] = " _
                        & lngIndTmp
                    rs.Edit
                    rs!chrMark = strMarkTmp
                    rs.Update
                    lngCnt = 0
                    Exit Do
                End If
            Loop
        End If
        rs.MoveNext
    Loop Until rs.EOF
Exit_cmdNormalizza_Click:
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
End Sub
***
c) devi ovviamente in VBA impostare i riferimenti a DAO.
Ho fatto alcune prove: mi sembra che vada - spero di non aver fatto
grosso cavolate. Ma - come diceva ai bei tempi Lubrano - la domanda
sorge spontanea: cosa succede se - per esempio - gli ultimi dieci
record hanno tutti il campo 'chrMark' vuoto?
Ciao
--
Alberto
No alle guerre

Un saluto Davide

>Un saluto Davide
Se ho capito bene ci sono tre campi (visti graficamente tre colonne)
da processare ognuna autonomamente rispetto alle altre. Se è così
dovresti solo fare in modo che la sub che ti ho suggerito cicli uno
dopo l'altro i tre campi (ovviamente non scrivendo tre volte il
codice): te la senti di provarci, eventualmente chiedendo aiuto nei
punti critici?
Non ho invece capito il passo 'il campo chrmark2 del record della
fine dell'intervallo potrebbe anche essere vuoto'.
Fammi/facci sapere.


Un saluto Davide

>devo anche aggiungere i campi chrmark1 e chrmark2?
Sì, diventerà "SELECT ... chrMark, chrMark1 ...", poi io la parte che
cicla il recordset la porterei in una terza routine che richiamerei
tre volte, facendola riferire a chrMark, poi a chrMark1 poi a chrMark2
(nella guida in linea guarda Recordset/proprietà recordset/DAO
recordset/fields/field)
... sempre che sia giusto quanto ho ipotizzato nel paragrafo
precedente ...
hei, prova a lavorarci un po' sopra ma se non ci vai in fondo chiedi
...


Un saluto Davide
Esempio n.2
lngInd           C1   C2    C3     chrMark chrMark1 chrMark2
001
002
003                                A
004
005
006                                 A
007                                 A               B               C
008
009
010                                 M
011
012
013                                 M                N
014
015
016
*****
figura n.3
lngInd           C1   C2    C3     chrMark chrMark1 chrMark2
001
002
003                                A                B               C
004
005
006                                 A               B               C
007                                 A               B               C
008
009
010                                 M              N
011
012
013                                 M               N
014
015
016
*****

>Un saluto Davide
[cut]
Ciao, ho dato un'occhiata ai tuoi esempi ma non sono sicuro di aver
capito bene (a proposito, usa quando scrivi un carattere proporzionale
- tipo courier new - così sarà più facile anche per chi legge
mantenere l'incolonnamento).
Comunque ... riprendendo l'esempio che ho fatto io, se partiamo da una
tabella così (il segno '-' sta per vuoto):
 lngInd chrMark chrMark1 chrMark2
  001       -       C        -
  002       -       -        -
  002       -       -        B
  004       -       -        -
  005       A       -        -
  006       -       -        -
  007       -       -        -
  008       -       Z        -
arriveremmo - dopo l'elaborazione - a
 lngInd chrMark chrMark1 chrMark2
  001       -       C        -
  002       -       -        -
  002       -       -        B
  004       A       -        -
  005       A       Z        -
  006       -       -        -
  007       -       -        -
  008       -       Z        -
È corretto?
Se sì prova a lavorare su queste righe di esempio:
Dim strMarkTmp As String
   strMarkTmp = "chrMark1"
   rs.Fields(strMarkTmp) = "A"
Fammi sapere ...


 wrote in message
5j4gbvc0rs74vdre7...@4ax.com...

Ciao , Alberto
Se partiamo da una tabella
così (il segno '-' sta per vuoto):
lngInd chrMark chrMark1 chrMark2
001        -             -                  -
002        -             -                  -
003        -             -                  -
004        -             -                  -
005        A           B                 C
006        -             -                  -
007        -             -                  -
008        -             -                  -
009        -             -                  -
010        -             -                  -
011        G            K                L
lo scopo è quello di arrivare a una tabella
come la seguente, ipotizzando per esempio che la variabile
"lngstep",della routine che mi hai proposto
sia = 2+1
lngInd chrMark chrMark1 chrMark2
001        -               -               -
002        A             B              C
003        -               -               -
004        -               -               -
005        A             B              C
006        -               -               -
007        -               -                -
008        G             K               L
009        -              -                 -
010        -              -                 -
011        G            K                L
Che adesso ottengo, ma con tre
Pulsanti di comando,
ognuno dei quali attiva la routine,che
cicla i campi. Il pulsante n. 1 attiva la routine che
Cicla il campo chrMark
Il pulsante n. 2 attiva la routine che
Cicla il campo chrMark1
Il pulsante n. 3 attiva la routine che
Cicla il campo chrMark2.
La stessa cosa la vorrei fare con un
unico pulsante.Come si potrebbero
impostare le routine per fare questo?
Un saluto. Davide

impostare le routine per fare questo?
Confermami se ho capito giusto. Poi - mi aspettano un paio di giorni
de fuego - se ci riesco domenica provo a metterti giù una routine (che
a questo punto sarà anche più semplice di quello che pensavo).
Ovviamente do per scontato che tu sappia come gestire - e
neutralizzare - la possibilità che ci siano dei record 'irregolari',
tipo:
 006   A   -    H
 008   -   B    C
Questo è molto importante perché altrimenti si rischiano dei risultati
*strani*.


Un saluto. Davide

>Un saluto. Davide
Ciao,
allora ho modificato la routine secondo le tue indicazioni (poi,
siccome sono un 'rompiballe' ;), ho inserito anche un controllo sulla
coerenza dei dati: se non rispondono allo schema che tu hai indicato
c'č un messaggio di avviso e l'aggiornamento non viene eseguito).
Ovviamente potresti anche gestire in un modo piů sofisticato la
presenza di record 'anomali'. 
***
Private Sub cmdNormalizza_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSql As String
Dim lngCnt As Long
Dim lngIndTmp As Long
Dim lngStep As Long
Dim strMarkTmp As String
Dim strMark1Tmp As String
Dim strMark2Tmp As String
    lngStep = 3 + 1
    strSql = "Select lngInd, chrMark, " _
        & "chrMark1, chrMark2 " _
        & "FROM tblRighe ORDER BY lngInd"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSql)
'Controllo coerenza dati
    rs.MoveFirst
    Do
        If isNothing(rs!chrMark) Then
                If Not (isNothing(rs!chrMark1)) Or _
                    Not (isNothing(rs!chrMark2)) Then
                        MsgBox "Dati incoerenti"
                        GoTo Exit_cmdNormalizza_Click
                End If
            Else
                If isNothing(rs!chrMark1) Or _
                    isNothing(rs!chrMark2) Then
                        MsgBox "Dati incoerenti"
                        GoTo Exit_cmdNormalizza_Click
                End If
        End If
        rs.MoveNext
    Loop Until rs.EOF
'Eseguo normalizzazione
    rs.MoveFirst
    Do
        If isNothing(rs!chrMark) Then
                lngCnt = lngCnt + 1
            Else
                lngCnt = 0
        End If
        If lngCnt = lngStep Then
            lngIndTmp = rs!lngInd
            Do
                rs.MoveNext
                If rs.EOF Then
                    GoTo Exit_cmdNormalizza_Click
                End If
                If Not (isNothing(rs!chrMark)) Then
                    strMarkTmp = rs!chrMark
                    strMark1Tmp = rs!chrMark1
                    strMark2Tmp = rs!chrMark2
                    rs.FindPrevious "[lngInd] = " _
                        & lngIndTmp
                    rs.Edit
                    rs!chrMark = strMarkTmp
                    rs!chrMark1 = strMark1Tmp
                    rs!chrMark2 = strMark2Tmp
                    rs.Update
                    lngCnt = 0
                    Exit Do
                End If
            Loop
        End If
        rs.MoveNext
    Loop Until rs.EOF
Exit_cmdNormalizza_Click:
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
End Sub
***
Fammi sapere come va.


Un saluto. Davide

>Un saluto. Davide


>piccolo residuo finale,che abbiamo appena visto?
Non riesco a *localizzare* al tua base dati (non so di cosa si tratta,
come sono caricati, a che scopo sono elaborati); per questo motivo
provo a sparare qualche idea.
***
Oltre a 'lngStep', che sta ad indicare l'intervallo massimo, si
potrebbe anche impostare 'lngStepMin', che ovviamente indica
l'intervallo minimo desiderato.
***
Con la routine scorro i record e determino la lunghezza
dell'intervallo (lngInt) tra due record non vuoti. Se questo
intervallo è superiore a lngStep dovrò ovviamente procedere al
scrivere in alcuni record intermedi.
***
Prima di fare questo, con la funzione Mod (lngInt Mod lngStep)
determino il 'resto' cioè la lunghezza dell'ultimo intervallo (es
50/6=48 resto 2). Se il resto è inferiore al limite che ho proposto
(lngStpMin) provo via via a ridurre lngStep. Se così facendo ottengo
il risultato voluto applico - solo per quell'intervallo - il 'lngStep'
ridotto, altrimenti procedo con il 'lngStep' normale.
Sono stato chiaro?
È questo quello che volevi?
Te la senti di provare a modificare in questo senso la routine?


 wrote in message
60a5cvgkq6hims7t8...@4ax.com...

Ciao, Alberto
Si! sei stato chiaro,
in questo modo ho la possibilità di ottenere
intervalli regolari.
Certo! sempre che il valore minimo non si discosti troppo
dal valore massimo.
Come si possono inserire queste istruzioni nella routine?
Un saluto.   Davide

Come si possono inserire queste istruzioni nella routine?
Certo che ... sei forte! Non è che stai realizzando un database per il
Sismi o Sisde o Sid? :)
Comunque proviamo pure ad analizzare il problema restando nella teoria
pura ...
Per come la vedo io il punto da chiarire è questo: dato un intervallo
di default (per esempio *7*), mi sai indicare in base a quali criteri
si considera accettabile il nuovo intervallo minimo? Es:
- 51 intervallo 7:  7x7 e 1 casella vuota
- 51 intervallo 6:  8x6 e 2 caselle vuote
- 51 intervallo 5: 10x5 e 0 caselle vuote
Voglio dire:
- come stabilisci il valore minimo che può assumere l'intervallo?
- come stabilisci quando una differenza di intervallo (nella maggior
parte dei casi inevitabile) tra l'ultimo e gli intervalli precedenti è
accettabile?
- i vincoli di cui sopra sono calcolabili tramite una formula che
parte dall'intervallo *default* oppure li stabilisci arbitrariamente
di volta in volta?
- cosa deve succedere se risultasse impossibile soddisfare i vincoli
posti?


 wrote in message
ihs7cvobrgfn470c8...@4ax.com...

Ciao , Alberto
Hai ragione, ma mi sono dimenticato di descriverti
meglio lo scopo di quello che ti chiedevo,
non devo fare niente per i servizi segreti.
I record di questa tabella che stiamo trattando,
devono dare origine a delle etichette(per spedire riviste
in abbonamento postale).I record sempre della stessa tabella
che presentano le diciture nei famosi campi che abbiamo trattato
fino adesso(chrmark....etc)devono dare origine a una grossa
etichetta dove c'è una dicitura ,che raccoglie una serie di
etichette,(quindi
un pacco di n riviste),grossa etichetta che possiamo definire "sovrapacco".
Quindi abbiamo questi sovrapacco(i famosi record con i campi
chrmark,chrmark1,
chrmark2 contrassegnati,posti all'inizio e alla fine di un intervallo), e
una serie di
etichette(che sono i record posti nell'intervallo) ,che vanno a formare il
pacco di riviste.
Il criterio che da origine alla suddivione con questi sovrapacco  è basato
sui cap.
Quindi ci possono essere zone molto grosse e avere così intervalli molto
lunghi(pacchi molto grossi),
altre zone più piccole e avere intervalli più brevi(pacchi più piccoli).
Queste riviste possono essere poco spesse,mentre altre possono essere più
spesse.
Così se sono poche spesse è ho una grossa zona(quindi un lungo
intervallo,posso
suddividerlo con intervalli più lunghi per es un lngstep=200),per dare
origine a
questi sovrapacco che mi formano dei pacchi(con copie non molto spesse) con
dimensioni ragionevoli.Nel caso che ho copie piu spesse ,  lunghi
intervalli(grosse zone)
li devo suddividere con una maggiore numero di intervalli(per es
lngstep=5),per avere
sempre il giusto numero di sovrapacco che mi consente sempre di fare pacchi
con dimensioni
ragionevoli.Tutto questo con la l'ultima routine che mi hai proposto riesce
molto bene,
l'unico problema(come ti avevo esposto con l'ultimo esempio grafico)che ogni
tanto
rimangono alla fine quei piccoli intervalli,che mi costringono a raccogliere
le poche
copie che rimangono e racchiuderle con il sovrapacco precedente e buttare
via l'ultimo
sovrapacco.Come si potrebbero impostare le cose per eliminare questo piccolo
residuo?
E fare in modo che i sotto intervalli siano più uniformi(quindi pacchi
uguali senza quel piccolo residuo
che ti dicevo),in quanto al limite inferiore, intendevo che se per esempio
posso fare pacchi fino
a duecento copie,non mi voglio ritrovare per rendere più uniformi i
sottointervalli,a impostare
un lngstep troppo inferiore ai duecento,per esempio  "cento".
Spero dopo questo lungo discorso di averti dato un idea di quello che avrei
intenzione di fare.
Un saluto Davide

uguali senza quel piccolo residuo
Io ho modificato la routine 'normalizza' come segue
***
Private Sub cmdNormalizza_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSql As String
Dim lngCnt As Long
Dim lngStep As Long
    lngStep = InputBox("Intervallo massimo desiderato")
    lngStep = lngStep

                If lngCnt <= lngStep Then
                        lngCnt = 0
                    Else
                        Tappabuchi rs, lngStep, _
                            lngCnt
                        lngCnt = 0
                End If
        End If
        rs.MoveNext
    Loop Until rs.EOF
Exit_cmdNormalizza_Click:
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
End Sub
***
Per mia maggior chiarezza ho scorporato la parte che 'rispalma' le
quantità in una routine separata, comunque sempre nello stesso modulo.
La Funzione IsNothing ovviamente resta.
***
Private Sub Tappabuchi(ByRef rs As DAO.Recordset, _
    ByVal lngStep As Long, ByRef lngCnt As Long)
Dim lngRigheIns As Long
Dim lngResto As Long
Dim strMarkTmp As String
Dim strMark1Tmp As String
Dim strMark2Tmp As String
Dim lngI As Long
    lngRigheIns = Int((lngCnt + 1) / _
        (lngStep + 1)) - 1
    lngResto = lngCnt - ((lngStep + 1) * _
        lngRigheIns) - lngStep
    If lngResto > 0 Then
        lngRigheIns = lngRigheIns + 1
        lngStep = Int((lngCnt + 1) / (lngRigheIns + 1)) - 1
        lngResto = lngCnt - ((lngStep + 1) * _
            lngRigheIns) - lngStep
    End If
    With rs
        strMarkTmp = !chrMark
        strMark1Tmp = !chrMark1
        strMark2Tmp = !chrMark2
        .Move -(lngCnt)
        For lngI = 1 To lngRigheIns
            .Move lngStep + 1
            If lngI = 1 Then .MovePrevious
            If lngResto > 0 Then
                .MoveNext
                lngResto = lngResto - 1
            End If
            .Edit
            !chrMark = strMarkTmp
            !chrMark1 = strMark1Tmp
            !chrMark2 = strMark2Tmp
            .Update
        Next lngI
    End With
End Sub
***
Ti dico quello che (almeno nelle mie intenzioni) fa:
Se tra due righe compilate l'intervallo - secondo il criterio che tu
imposti - non è uniforme, riduce di uno l'intervallo impostato e se ci
sono degli ulteriori residui li aggiunge ai primi intervalli
modificati.
Fai comunque delle prove 'sul campo' e fammi sapere.


 wrote in message
8j7dcvks3slng098v...@4ax.com...

Ciao, Alberto
Ho provato la routine,
funziona proprio come avevi detto tu,
elimina i piccoli intervalli , che si andavano
a formare alla fine,comunque sei stato tempestivo,
avevi detto che ti serviva qualche giorno,
perchè eri molto impegnato.
Stavo  pensando,sempre se sono riuscito a darti
una idea dello scopo pratico dell' applicazione ,
se voglio mettere il numero di copie su ogni sovrapacco,
che raccoglie un certo numero di copie(etichette),
come si può creare un campo(nei record contrassegnati nei campi chrmarh
etc..,
chiaramente anche nei record che vengono contrassegnati dopo)
dove è riportato il numero di etichette che raccoglie il sovrapacco?
Un saluto    Davide

Un saluto    Davide


 wrote in message
c93lcvcp5boq30pup...@4ax.com...

Ciao, Alberto
La routine funziona ,solo che
c'è un piccolo particolare,
che per mettere il valore di lngstep al
record compilato dal codice devo avviare
la routine di nuovo.
In pratica non è sufficiente un solo click(mette
il valore di lngstep solo al record già compilato)
ma devo fare un altro click sul pulsante di comando,
per avere anche il valore di lngstep al record
compilato dal codice.
E'possibile eliminare questo doppio passaggio?
Inoltre mi sono accorto di una altra cosa, che
quando stampo tramite il report le etichette(i record
tra gli intervalli)in corrispodenza di un campo , che
era scritto nelle etichette precedenti,
rimane uno spazio vuoto tra due campi pieni.
Faccio un esempio pratico se per esempio ho una etichetta
Tipo:  nom= AAAAAAAAA
       Varie= BBBBBBBBB
       Ind= CCCCCCCCCCC
       Cap      localita'       prov
E subito dopo un'altra con il campo Varie vuoto
Il report la stampa così:
         nom= AAAAAAAAA
       Varie=
       Ind= CCCCCCCCCCC
       Cap      localita'       prov
E' possibile impostare il report in maniera tale
Che i campi pieni rimangano attaccati,nonostante
che tra di loro ci siano ogni tanto dei campi vuoti?
Per avere una etichetta stampata così(una che per
Esempio ha il campo varie vuoto)
       nom= AAAAAAAAA
       Varie= CCCCCCCCCCC
       Ind= Cap      localita'       prov
Un saluto  Davide


Intanto (questione di usare la terminologia appropriata) tieni
presente che i campi si trovano nelle tabelle e nelle query, nelle
maschere e nei report gli oggetti, tramite i quali visualizzi il
contenuto dei campi, si chiamano genericamente 'controlli' oppure
nello specifico caselle di testo, caselle combinate, caselle di
riepilogo ecc...
Ti passo un esempio di routine che puoi adattare.
La routine è a fronte dell'evento 'su formattazione' del corpo del
report. Io ho ipotizzato che il controllo in cui visualizzi le note si
chiami 'txtNote' e si trovi a 1,5 cm dal bordo superiore, che il
controllo in cui visualizzi l'indirizzo si chiami 'txtInd' e che
l'etichetta che mostra la scritta "Ind" si chiami 'lblInd'.
---
Private Sub Corpo_Format(Cancel As Integer, _
	FormatCount As Integer)
    If IsNothing(Me.txtNote) Then
        Me.txtNote.Visible = False
        Me.txtInd.Top = 567 * 1.5
        Me.lblInd.Top = 567 * 1.5
    End If
End Sub
---


 wrote in message
oa5qcvo3vq76n72d7...@4ax.com...

Ciao! Alberto
E' vero! Sono un po' nottambulo.
A te invece non piace fare tardi?
La routine che prima non mi funzionava,
adesso va bene, solo che avevo fatto un
errore di digitazione , mentre apportavo
le modifiche che mi avevi detto,
ma non me ero accorto.
Ti volevo esporre meglio il problema
che avevo posto nell'ultimo post,
in quanto la routine che mi hai
proposto non funziona va in errore.
Ho una tabella o una query che hanno una serie di campi:
Titolo ; nominativo ; varie ; indirizzo ; cap ; località ; provincia.
Dai cui creo un report ,con tante caselle di testo ,per quanti sono i
campi della tabella o query sottostanti.
Per avere alla fine una etichetta tipo:
Dott
Bianchi Gino
presso rossi
via Imola n.2
00100 Roma rm
Non sempre i record hanno tutti i campi pieni
può capitare a volte che,per fare un esempio,
nel campo varie non abbiano niente e riprendendo
la stessa etichetta come esempio, il report come
risultato ci da questo:
Dott
Bianchi Gino
via Imola n.2
00100 Roma rm
uno spazio vuoto fra il nominativo e l'indirizzo.
Premetto che questo è solo un esempio,perché la
stessa cosa potrebbe succedere anche con gli altri
campi.
La domanda è questa! Come si potrebbe avere,sempre
prendendo come esempio l'etichetta di prima,in questi
casi una etichetta tipo così?
Dott
Bianchi Gino
Via Imola n.2
00100 Roma rm
in sostanza fare in modo che i campi pieni,
vadano a riempire i spazi che rimangono vuoti,
senza avere ,nonostante la presenza di campi vuoti,
spazi vuoti nell'etichetta.
Un Saluto Davide

Un Saluto Davide
Ciao.


 wrote in message
9m4ucv4lts92f20pv...@4ax.com...

Ciao Alberto
Ho preso una tabella
ho creato un report che prende i dati
da questa tabella  e ho fatto come mi
hai detto tu nel precedente post:
Ti passo un esempio di routine che puoi adattare.
La routine è a fronte dell'evento 'su formattazione' del corpo del
report. Io ho ipotizzato che il controllo in cui visualizzi le note si
chiami 'txtNote' e si trovi a 1,5 cm dal bordo superiore, che il
controllo in cui visualizzi l'indirizzo si chiami 'txtInd' e che
l'etichetta che mostra la scritta "Ind" si chiami 'lblInd'.
---
Private Sub Corpo_Format(Cancel As Integer, _
FormatCount As Integer)
    If IsNothing(Me.txtNote) Then
        Me.txtNote.Visible = False
        Me.txtInd.Top = 567 * 1.5
        Me.lblInd.Top = 567 * 1.5
    End If
End Sub
---
Solo che quando vado a cliccare
su anteprima del report
appare un messaggio che dice:
"Errore di compilazione:"
"Sub o Function non definita"
Imposto male qualcosa?
Un Saluto Davide


Ciao


 wrote in message
9p41dvg636mjbtj0u...@4ax.com...

Ciao, Alberto
La routine non funzionava
perché non c'era la funzione is nothing,
che ho poi messo in un modulo a parte.
Nonostante tutto la routine non funziona in modo omogeneo,
infatti visualizza tramite la casella di testo txtnote,in modo
regolare,il contenuto del campo(che visualizzo con la casella di testo
"txtnote" del report)dei primi sei record,poi dato che il campo in questione
del
settimo record è vuoto,non si presenta nessun spazio tra quello
che si visualizza nelle caselle di testo superiore e inferiore
alla casella di testo "txtnote". Fino qui tutto regolare.
Invece con i record che seguono, il contenuto della casella di testo
txtnote(nonostante che i campi che danno origine  al controllo siano pieni)
non viene visualizzato. Come mai??
Inoltre Dato che queste etichette, possono arrivare a contenere fino a sette
campi, tipo:
dott
bianchi rossi
presso ufficio
via imola n. 2
specialista
quinto distaccamento
00100 Roma Rm
è possibile fare una routine che lavora contemporaneamente
su tutti i campi?
Ho notato poi che la casella di testo del report(che prende origine
dal campo contatore della tabella sottostante)dal numero 1000 in poi
mi visualizza 1E+3 invece del n.1000 e così via.
Come si può eliminare l'inconveniente?
Un Saluto Davide

Come si può eliminare l'inconveniente?
Dovrebbe essere sufficente allargare la casella di testo


 wrote in message
uo57dvckgliqkp37m...@4ax.com...

Ciao , Alberto
La routine con l'ultima integrazione,
funziona bene.
Solo che i campi che devo trattare,
usando come base la routine che mi
hai proposto, sono dieci,quindi devo
prevedere tutta una serie di combinazioni,
in quanto tutti i campi possono essere
o vuoti o pieni non c'è una regola fissa.
Alcuni record possono avere tutti e dieci i campi
pieni, altri otto campi e così via.
Non ci sono etichette fisse.
Per esempio una con tutti i campi pieni si
presenterebbe così:             p.s. i numeri li ho messi solo per
evidenziare i campi dell'etichetta.
1)gentile dott
2)bianchi rossi
3)consulente
4)azienda farmaceutica
5)presso segreteria
6)via imola n.9
7)00100 roma rm
8)**********************
9)ufficio postale
10)roma montesacro
Questi campi io li chiamo:tit ; nom ; varie ; ind ; nom2; ind2 ; des1 ; des2
; des3.(Premetto non pongo nessuna etichetta di denominazione sul report)
Impostare una routine non troppo complessa per stabilire tutti i casi non è
possibile?
Se no con la routine di base che mi hai proposto devo impostare tutte
le combinazioni possibili?
Un saluto Davide

Un saluto Davide


 wrote in message
f9pcdvc4v8o8u1pi4...@4ax.com...

Ciao Alberto
Ci sono tre giorni di relax!
Tu che fai! Te li prendi?
Ho provato come mi hai detto tu,
a modificare i controlli del report,
per ottenere le etichette senza spazi,
il risultato è buono,esteticamente
accettabile e si arriva allo scopo
in pieno,cioè ottenere le etichette
senza spazi vuoti.
Con la routine si dovevano combinare
troppe combinazioni.
Stavo provando a scrivere dentro una casella
di testo di una maschera con lo scopo di
visualizzarlo tramite una casella di testo
del report(per poi stamparlo) ma senza successo.
Come si può impostare il legame da una maschera
al report senza l'ausilio di una tabella?
Un saluto Davide

al report senza l'ausilio di una tabella?
La prossima volta è meglio che tu apra un altro thread se vuoi
introdurre un nuovo argomento ... penso che questo 3d lo stiamo
seguendo solo noi due ... ;-)
Comunque ... una volta compilate la varie caselle di testo, mantenendo
la maschera aperta, lanci il report nelle cui caselle di testo avrai
fatto riferimento direttamente ai controlli della maschera.
Un esempio (che è meglio):
se la maschera si chiama 'frmProva' e la casella in cui hai scritto
'txtTestoDiProva', nell'origine controllo della corrispondente casella
del report scriverai 
=Forms!frmProva!txtTestoDiProva
... lo puoi fare anche con il generatore di espressioni
Se c'è la possibilità che qualche casella non venga compilata devi
abbinare la funzione Nz
=Nz(Forms!frmProva!txtTestoDiProva;"")
