Newsgroup: it.comp.appl.access
Titolo: Visibile o non Visibile.... anzi....sparita

Ciao....
Anche se con molta tristezza ed angoscia,continuo il mio lavoro ed i miei
studi....
Sono alle prese (ancora) con la funzione che nasconde una tabella, presente
sul Sito comune
************************************************
Function hidetbl(strTable As String, intHide As Integer) As Integer
'Nasconde o Mostra una tabella
   'Nasconde o Mostra una tabella
   'Accetta:   intHide: True (-1) nasconde, False (0) rende visibile
   'Ritorna:   True se OK, False se errore
   On Error GoTo HT_ERR
   Dim TDef As TableDef, dbs As Database
   Set dbs = CurrentDb
   Set TDef = dbs.tabledefs(strTable)
   Select Case intHide
      Case True
         If Not (TDef.Attributes And DB_HIDDENOBJECT) Then
            TDef.Attributes = TDef.Attributes + DB_HIDDENOBJECT
         End If
      Case Else
         If (TDef.Attributes And DB_HIDDENOBJECT) Then
            TDef.Attributes = TDef.Attributes - DB_HIDDENOBJECT
         End If
   End Select
   hidetbl = True
EXIT_HT:
      Exit Function
HT_ERR:
   hidetbl = False
   MsgBox "Error: " & err & " " & Error, 48
   Resume EXIT_HT
End Function
*************************************************
La funzione parte dall'evento "su apertura" di una form con : <hidetbl
"Nome_Form", true>
ma io devo,nel caso di inconvenienti, poterla render visibile, e ho inserito
in un altro evento nascosto
<hidetbl "Nome_Form", false>
Io vorrei , innanzi tutto che si potessero "eclissare" più tabelle" o
addirittura tutte ,e credo che, ripetendo il comando <hidetbl "Altre_Form",
true> ...si possa fare.
Ma l'inconveniente che ho riscontrato è che, sia con A97 che con A2000 ,
dopo qualche volta che nascondo e rendo visibile, la tabella non ricompare
più, e la trovo tra le tabelle di sistema con la possibilità di essere
visualizzata dall'utente, rendendo vano tutto.
Qualcuno ha un idea di perchè succede questo?
grazie a chi ha avuto la pazienza ( Syb e Silvio ) nei post precedentidi
rispondermi.
Ilaria Rossi

 Ilaria Rossi
Non capisco perchè il sistema di Replay verifichi che la risposta
abbia meno caratteri del POST, è assurdo.............
Devo troncare parte del tuo codice per poterti rispondere......
Per la prima domanda che hai fatto è fattibile fai un ciclo esterno alla Sub
'**************************************************
Sub AllHide()
Dim DBS as Database,TblDef as Tabledef
Set DBS dbs = CurrentDb
For each TblDef in DBS.Tabledef
call hidetbl(
tbldef.name
, [False/True])
Next
End sub
'**************************************************
Per il secondo problema credo debba essere controllato non solo
lo stato DB_HIDDENOBJECT perchè anche le Tbl di sistema rispondono
a questo stato, ma le TblSystem rispondono in oltre a dbSystemObject
quindi se nella Function verifichi che le Tbl che vuoi recuperare oltre
ad essere dbHiddenObject non siano dbSystemObject credo tutto vada a posto.
'********************** MODIFICA *******************
---> If not (Tdef.Attribute and dbSystemObject) then
'***************************************************
    Select Case intHide
       Case True
          If Not (TDef.Attributes And DB_HIDDENOBJECT) Then
             TDef.Attributes = TDef.Attributes + DB_HIDDENOBJECT
          End If
       Case Else
          If (TDef.Attributes And DB_HIDDENOBJECT) Then
             TDef.Attributes = TDef.Attributes - DB_HIDDENOBJECT
          End If
    End Select
'****************** MODIFICA **************
---> End if
'****************** END MODIFICA **********
Ciao @Alex.
P.S. il codice che ho scritto è a memoria quindi verificalo che non
ci siano errori....
Questo 
-- 
Posted from  [62.98.28.199] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Ti riporto quanto č scritto in calce alla funzione:
ATTENZIONE: se viene compattato il DB, per un "bug" di Access97, le tabelle
nascoste con questo secondo metodo, verranno ELIMINATE. Quindi, assicurarsi
di impostare l'attributo a False prima di ogni compattazione (che si suppone
venga effettuata da un'opportuna voce di menů), e poi reimpostarla a True.
--
Silvio
il sito comune di it.comp.appl.access:
http://www.sitocomune.com

 venga effettuata da un'opportuna voce di menů), e poi reimpostarla a True.
A questo proposito, hai verificato che questo non accada anche su A2000 e/o
XP?
Perche' su Access XP la compattazione viene fatta automaticamente ogni volta
che si chiude il db.
Sib

 Silvio
****************************************************************************
**
Ciao Silvio..
avevo letto la postilla nella funzione ,ma :
-io uso anche A2000;
-non faccio nessuna compattazione ;
-le tabelle non vengono eliminate, ma diventano come tabelle di sistema:
cioč visibili solo se si flagga su "mostra tabelle di sistema"
Spero di essermi riuscita a spiegare...
grazie per l'interessamento.
Ilaria

 che si chiude il db.
Se lo imposti, anche A2000 lo fa.
