Newsgroup: it.comp.lang.visual-basic
Titolo: In VisualBasic come si può risolvere questo problema ?

Salve a tutti, sto scrivendo un programmino che legge e scrive informazioni
da un database di tipo access 97 ".mdb".
Ho fatto anche un form per selezionare il database su cui andrò a leggere e
a scrivere, una cosa che però mi chiedo come posso costruire una funzione
che mi permetta di stabilire se è il mio database (cioè per questo
programma) o è un'altro?
Grazie e cordiali saluti.
doberm...@tin.it

 ha scritto nel messaggio
news:8j5e65$bks$1...@nslave2.tin.it...


 Ho fatto anche un form per selezionare il database su cui
andrò a leggere e a scrivere, una cosa che però mi chiedo come
posso costruire una funzione che mi permetta di stabilire se è
il mio database (cioè per questo programma) o è un'altro?
Cioe`, posto che si chiami pluto.mdb e si trovi nella cartella
pippo del disco c:, vuoi una specie di certificazione o firma
elettronica che ti permetta di capire che il file
c:\pippo\pluto.mdb e` proprio dioriginal e non una copia
artefatta?
O intendi una specie di controllo di versione?
O intendi garantirti di avere a che fare con un database
avente una struttura predisposta per l'uso col tuo programma?
--
Ciao.
Maurizio

 wrote in message
383d3...@news.megasys.it...


 Poichè in un computer ci possono essere altri database in
formato mdb e se scasualmente ne vado ad aprirne uno anzicchè
quello originale o copia dell'originale, il programma si
blocca e stranamente l'intero sistema operativo.
In questo caso credo sarebbe da rivedere la gestione degli
errori. Dovresti riuscire ad individuare la riga in cui
avviene il blocco. Potrebbe rivelare qualche pecca strutturale
del tuo codice. Hai eseguito passo-passo?
--
Ciao.
Maurizio

Scusami, era la 3.
In effetti volevo sapere se esiste qualche istruzione che possa comparare
due database.
Poichè quando gira per la prima volta, il programma mi chiede come si deve
chiamare il database e in che path si deve trovare (questo attraverso il
form classico grazie a 'Comdlg32' ) a questo punto avendo creato
precedentemente un file di database chiamato 'TamplateDB.mdb', quest'ultimo
viene copiato e rinominato come richiesto. Fin qui è tutto OK.
Il problema si presenta in apertura del programma in quanto devo indicare ad
esempio la path e il nome del file di database precedentemente salvato.
Ora al momento della selezione del file, dovrei costruire una funzione che
verifichi che il database selezionato 'xxxxxxx.mdb' abbia la stessa
struttura cioè le stesse tabelle e query.
Precedentemente avrei pensato di costruire una funzione che analizzasse il
database tabella x tabella e query x query comparandoli con il database
'TamplateDB.mdb' che in realtà contiene solo le tabelle e query ma non i
dati. Ma la cosa sembra essere un pò lunga oltre che difficile in quanto non
so come effettivamente compararle.
Si accettano consigli.
Grazie per aver letto il messaggio            
doberm...@tin.it

 Il problema si presenta in apertura del programma in quanto devo indicare
ad
[cut]
Direi che il modo piu' semplice sia quello di fornire un'estensione diversa
al file, quindi non .mdb ma (per esempio) .kdd (Klaus Dobermann Database),
avndo cura ovviamente di cercarne una che possibilmente non sia gia'
utilizzata da altre applicazioni.
Ciao.

 Precedentemente avrei pensato di costruire una funzione che
analizzasse il database tabella x tabella e query x query
comparandoli con il database 'TamplateDB.mdb' che in realtà
contiene solo le tabelle e query ma non i dati. Ma la cosa
sembra essere un pò lunga oltre che
difficile in quanto non so come effettivamente compararle.
Allora forse potrebbe andarti bene una funzione tipo questa:
Private Function SonoUguali( _
  ByRef TemplatePathName$ _
, ByRef DatabasePathName$ _
) As Boolean
  On Local Error GoTo ErrHandler
  Dim dbsT  As DAO.Database
  Dim dbs   As DAO.Database
  Dim c     As DAO.Container
  Dim d     As DAO.Document
  Dim t     As DAO.TableDef
  Dim f     As DAO.Field
  Dim sTemp As String
  Set dbsT = DAO.DBEngine.OpenDatabase(TemplatePathName)
  Set dbs = DAO.DBEngine.OpenDatabase(DatabasePathName)
  With dbsT
    For Each c In .Containers
      With c
        Debug.Print .Name
        Let sTemp _
          = dbs.Containers.Item(.Name) _
              .Name
        For Each d In .Documents
          With d
            Debug.Print "  ";
            Debug.Print .Name
            Let sTemp _
              = dbs.Containers.Item(c.Name) _
                  .Documents.Item(.Name) _
                    .Name
          End With: Set d = Nothing
        Next
      End With: Set c = Nothing
    Next
    For Each t In .TableDefs
      With t
        Debug.Print .Name
        Let sTemp _
          = dbs.TableDefs.Item(.Name) _
              .Name
        If .Attributes = 0 Then
          For Each f In .Fields
            With f
              Debug.Print "  ";
              Debug.Print .Name
              Let sTemp _
                = dbs.TableDefs.Item(t.Name) _
                    .Fields.Item(.Name) _
                      .Name
            End With: Set f = Nothing
          Next
        End If
      End With
    Next
    Call .Close
    With dbs
      Call .Close
    End With: Set dbs = Nothing
  End With: Set dbsT = Nothing
  Let SonoUguali = True
  Exit Function
ErrHandler:
End Function
Che useresti cosi`:
  If SonoUguali("c:\TemplateDB.mdb", "c:\pippo.mdb") Then
    Debug.Print "Ok."
  Else
    Debug.Print "*** Sono diversi! ***"
  End If
Forse e` un po' abbondante o carente, non so, ma... conta il
pensiero, vero?
--
Ciao.
Maurizio

   End If
Scusa, mi e` rimasto nella tastiera:
In effetti questa funzione non ti dice che le due strutture
siano uguali, ma che gli elementi della prima sono presenti
nella seconda. Se vuoi, in caso di esito positivo, puoi
riusarla al contrario:
    If SonoUguali("c:\pippo.mdb", "c:\TemplateDB.mdb") Then
per verificare che il database non contenga elementi estranei
al template. Ma qui, forse, andiamo oltre quelle che
potrebbero essere le necessita` che dichiari.
--
Ciao.
Maurizio

Vi ringrazio dell'aiuto.
Klaus Dobermann
doberm...@tin.it