http://digilander.libero.it/Cenati

Elenco tabelle di file mdb

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

 

Elencare i nomi delle tabelle di un file di access usando ADO

Non ho MS Access. Nè altri programmi per gestire database. Per quello di cui ho bisogno, va benissimo fare una lista con Excel.

Ma mi è capitato però di dover leggere dei files mdb su macchine prive di Access, per confezionare dei testi contenenti i dati delle tabelle.

Per far questo mi sono documentato sulle tecniche di gestione dei database da parte di Windows. Ho scoperto che esistono due metodi di accesso ai database. Uno utilizza DAO (Data Access Object) e l'altro utilizza ADO (Active Data Objects). Il secondo è nato per soppiantare il primo, ma entrambi sono ancora funzionanti. Se dovete sviluppare un nuovo progetto e non sapete nulla è meglio indirizzarsi su ADO. Se avete già usato DAO e lo conoscete bene... continuate pure ad usarlo. Ho provato il mio script su un pc con Windows XP e senza Office. Funziona. Quindi questi strumenti sono forniti di serie.

Probabilmente avete già sul vostro computer i file di help ADO210.CHM e DAO360.CHM (io li ho trovati in c:\programmi\file comuni\system e in c:\programmi\microsoft shared\DAO), oppure potete trovare molto materiale chiarificatore nel libro "Costruire applicazioni con Access" che ho citato nella bibliografia. Dato che l'argomento è molto vasto, in questa pagina mi limiterò ad alcuni accenni e al commento del programma.

Dopo aver letto questa pagina sarà più facile capire anche gli esempi riportati sui libri che si occupano di Visual Basic. In VB non si istanziano gli oggetti, ma si trascinano le icone sul modulo e gli si assegna un nome. Per il resto le differenze tra VB e Vbs non sono moltissime.

La finestra di output

Prima di entrare nel vivo del database faccio un appunto sulla finestra di output usata.

La prima parte del programma (quella delimitata da due righe di asterischi) crea una finestra di internet explorer vuota, con all'interno un segnaposto.

Questo "segnaposto" è un tag DIV con id= 'cont'. Al momento della creazione la pagina non contiene nulla, ma nel corso del programma potrò modificare la proprietà INNERHTML di "cont" per visualizzare qualsiasi cosa. Infatti uso la variabile OUT per costruire il mio output ed alla fine, con innterhtml, faccio in modo che il contenuto di out vada automaticamente ad inserirsi tra <div> e </div>. Sarà Internet Explorer, a questo punto, a farsi carico di aggiornare la pagina con il nuovo contenuto.

Leggere le tabelle del file mdb

Il primo passo che ho compiuto è stato quello aprire un file mdb e leggere i nomi delle tabelle che conteneva.

Per aprire una connessione è necessario creare una istanza dell'oggetto ADODB.Connection. La stringa di connessione specifica in che modo accedere al database e come si chiama l'archivio. In questo caso l'archivio sarà il file il cui nome è contenuto nella variabile dbFile.

Il provider indica invece che per accedere al database voglio utilizzare il motore Microsoft Jet, che fornisce una vasta gamma di strumenti. Solo a titolo di esempio posso dire che è possibile leggere formati diversi dal mdb, come excel, testo, db2, ecc. Costruendo una adeguata stringa di connessione, si può accedere infatti anche ad archivi su server remoti. Come costruire la stringa di connessione è un argomento piuttosto complesso ed articolato, quindi per ora mi limito a presentare una stringa di connessione standard per i file mdb.

Per accedere all'elenco delle tabelle è necessario usare l'oggetto Adox.Catalog.

Questo oggetto ha la proprietà di sola lettura tables.count che contiene il numero delle tabelle del file mdb. Leggo questa proprietà ma, attenzione, le tabelle sono numerate partendo da zero. Quindi se tables.count vale 8 significa che avrò sì otto tabelle, ma numerate da zero a sette.

Prima di tutto leggerò il nome della tabella i-esima contenuto in cat.tables(i).name. Poi il tipo di tabella, per sapere se è una tabella di sistema creata da Access (Access Table) o da Microsoft Jet Database Engine (System Table) oppure una tabella di dati dell'utente (semplicemente, Table).

Quindi per ogni tabella "i" leggerò il nome e le proprietà di tutti i campi che contengono. Il primo valore indica il tipo di campo (202 è testo, 11 è booleano, 3 è intero, 7 è data, 203 è memo), il secondo riporta la dimensione del campo stesso.

Tutti i dati trovati vengono accodati alla variabile OUT che poi viene visualizzata nella pagina di Internet Explorer.

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script.

Ora che conosciamo come è fatto un archivio possiamo andare a leggerne il contenuto, sempre usando ADO. Ho scritto un programma analogo a questo che visualizza i record di una tabella .

'************************************************
' File:    ado-tables.vbs
' Autore:  Giovanni Cenati 
' http://digilander.libero.it/Cenati
' Codice liberamente utilizzabile citando il sito
' Descrizione: questo script usa Active Data Objects
' per leggere i nomi delle tabelle di un file mdb
' (il formato di Access). Elenca in una finestra
' di Internet Explorer i nomi dei campi di ogni
' tabella.        
'************************************************

'*** Crea una finestra di IE per l'output ***
Set myIE = CreateObject("InternetExplorer.Application")
myIE.Navigate "about:blank"
myIE.ToolBar = true:myIE.StatusBar = False:myIE.Resizable = False
Do:Loop While myIE.Busy
myIE.Width = 600:myIE.Height = 400
myIE.Left = 50:myIE.Top = 50
myIE.Visible = True
myIE.document.writeln("<html><title></title>"&_
  "<body><DIV id='cont'></DIV></body></html>")
Set IEWindow = myIE.Document.all("cont")
'**********************************************
Title= "Elenco tabelle e campi di un database - by Cenati Giovanni"

Set objArgs = WScript.Arguments  'Vedo se c'è un agrogmento passato allo script
if objargs.count<>1 then  'altrimenti mostro come si usa il programma
	msgbox "Trascinare un file mdb sul programma per ottenere l'elenco dei campi", _
	     vbInformation+vbOkonly,Title
	myIE.quit
	wscript.quit
end if
DbFile = objArgs(0)  'questa variabile contiene il nome del file da leggere

Set oConnection = createobject("ADODB.Connection")
oConnection.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbFile & ";"
Set cat = createobject ("adox.catalog")
cat.activeconnection= oConnection

Out="<h2><center>Database: " & DbFile & vbCrlf
out= out & "</center></h2><pre>"
For i=0 To cat.tables.count -1
	out= out & "Tables(" & i & ")=" & cat.tables(i).name & vbTab 
	out= out & cat.tables(i).type & vbCrlf
	For j=0 To cat.tables(i).columns.count -1
		out= out & Vbtab & "Columns("& j & ")=" 
		out= out & cat.tables(i).columns(j) 
		out= out & vbTab & cat.tables(i).columns(j).type 
		out= out & vbTab & cat.tables(i).columns(j).definedsize & vbCrlf
	Next
Next
out= out & "</pre>"

Const adVarWChar = 202
Const adColNullable=2
Const adWChar = 130

IEWindow.INNERHTML = out

oConnection.close
wscript.quit

 

Giovanni Cenati

 

 

 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript