http://digilander.libero.it/Cenati Elenco records di file mdb |
home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript |
|
|
|
|
|
Elencare i record delle tabelle di un file di Access usando ADO Con il programma ado-tables ho mostrato in una finestra di Internet Explorer la struttura di un file mdb. Ora che conosco i nomi delle tabelle posso usare quest'altro programma per sceglierne una e visualizzare i record che contiene. Il programa inizia recuperando il nome del file rilasciato sull'icona dello script. Se non è stato usato il drag&drop di un file mdb avverte l'utente di come si usa il programma. Per accedere ad un database ADO (Active Data Objects) è necessario creare una istanza dell'oggetto ADODB.Connection. Per estrarne delle tabelle è invece necessario l'oggetto ADODB.Recordset. Il Recordset è proprio il risultato di una selezione di campi del database. Il Database viene aperto dall'oggetto Connection, ma quest'ultimo viene poi collegato a Recordset con oRecordset.ActiveConnection=oConnection. Tramite oRecordset eseguo una richiesta in linguaggio SQL (Structured Query Language) con la quale scelgo (SELECT) alcune o tutte (*) le colonne da una tabella (FROM nometabella), eventualmente indicando una o più condizioni che devono essere soddisfatte (WHERE Colonna=valore). Nell'esempio scelgo tutte le colonne della tabella chiesta all'utente, senza applicare alcun filtro. L'oggetto Recordset ha la proprietà RecordCount che restituisce il numero di righe estratte. La uso per chiedere all'utente se vuole tutti quei record o solo una parte. Utile se ne ho migliaia e ne voglio mostrare solo una dozzina. Per l'output uso una finestra di Internet Explorer, che è sempre disponibile anche su computer senza Office. In questo modo posso anche formattare l'output con l'utilizzo di tag HTML. Ad esempio scrivo come intestazione il nome del database letto formattandolo con una header2 (<h2>). Nella finestra di IE, per ora vuota, lascio un segnaposto (una div) che andrò a riempire dopo usando l'html dinamico. Tramite un ciclo for-next stampo i nomi delle colonne della tabella. Sono contenuti nella collezione oRecordset.fields(i).name e sono in tutto oRecordset.fields.count. Numerati partendo da zero. Usando i tag html posso creare una tabella le cui celle sono delimitate dalla coppia <td> e </td>. Per leggere i record mi posiziono alla prima riga del recordset con oRecordset.movefirst. Analogamente esistono i metodi .MoveLast e .MoveNext per spostarsi rispettivamente alla fine ed al successivo record. Per sapere il numero progressivo del record su cui mi trovo posso usare la proprietà di sola lettura .AbsolutePosition. Ora che abbiamo stabilito che siamo posizionati su una determinata riga (la prima, avendo usato MoveFirst), possiamo leggere i campi della tabella in due modi diversi. Se conosciamo il nome del campo si può usare oRecordset.Fields("NomeCampo"). Se vogliamo il contenuto della colonna i-esima della tabella, magari non conoscendone il nome, possiamo usare oRecordset.Fields(i). Ora che ho creato un testo con i codici di formattazione html, chiedo ad IE di mostrarlo inserendolo nel segnaposto lasciato nella pagina. Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script. ' ***************************************************** ' ADO elenco righe di una tabella.vbs ' (c) Cenati Giovanni - http://digilander.libero.it/Cenati ' Codice vbs liberamente utilizzabile citando il sito ' Trascinare un file mdb sull'icona dello script. ' Viene chiesto il nome di una tabella dell'archivio. ' Mostra in una finestra di Internet Explorer tutte o una ' parte delle righe della tabella. ' Drop an MDB file on the icon. The script asks ' the name of a valid table of the database. ' Then shows an Internet Explorer window with a list of ' all or part of the records found in the table. ' ***************************************************** Title= "Elenco contenuto 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.",vbInformation+vbOkonly,Title wscript.quit end if DbFile = objArgs(0) 'questa variabile contiene il nome del file da leggere Set oRecordset = createobject("ADODB.Recordset") Set oConnection = createobject("ADODB.Connection") oConnection.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbFile & ";" oRecordset.ActiveConnection = oConnection oRecordset.CursorType=1 : oRecordset.LockType=3 TableName = inputbox( "Nome della tabella?" ,title ) ' SQL = "SELECT * FROM Products Where SupplierID=2" SQL = "SELECT * FROM " & TableName ' Crea un recordset con tutte le colonne dalla tabella che vogliamo. oRecordset.Open SQL, oConnection 'Gestisco l'errore se il recordset è vuoto. If oRecordset Is Nothing Then msgbox "Nessun record.",,Title:wscript.quit 'Trovo il numero totale di record che ho estratto. nRecord= oRecordset.Recordcount 'E chiedo se li si vuole mostrare tutti. nRecordDaMostrare=int(inputbox("Quanti record mostro?",Title,nRecord)) if nRecordDaMostrare>nRecord then nRecordDaMostrare=nRecord if nRecordDaMostrare=0 then wscript.quit '*** Crea una finestra che funge da output *** Set myIE = CreateObject("InternetExplorer.Application") myIE.Navigate "about:blank" myIE.ToolBar = True:myIE.StatusBar = False:myIE.Resizable = True Do:wscript.sleep 100: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") '********************************************** ' Elenco alcuni dati sul database e sui record. lista= "<h2>Database: " & DbFile & "<h2><br>" 'Nome del database lista= lista & "<h4>" 'il resto lo scrivo più piccolo. lista=lista & "Numero record totali: " & nRecord & "<br>" lista=lista & "Numero record mostrati: " & nRecordDaMostrare & "<br>" lista= lista & "Elenco record della tabella " & TableName & ":<br><br>" lista= lista & "<table BORDER=1 CELLPADDING=2 CELLSPACING=2 >" lista= lista & "<tr>" 'Inizia la riga con i nomi dei campi ' Sono oRecordset.fields.count, numerati partendo da zero. For i=0 To oRecordset.fields.count-1 lista= lista & "<td>" & oRecordset.fields(i).name & "</td>" Next lista= lista & "<td># Record</td></tr>" 'termina la riga con le intestazioni. ' Mi sposto alla prima riga selezionata oRecordset.MoveFirst ' Leggo i record e li impagino in una tabella html. Do lista=lista & "<tr>" 'Inizio una riga (un record) For i=0 To oRecordset.fields.count-1 'per il record corrente chiedo il contenuto del campo i-esimo lista = lista & "<td>" & oRecordset.fields(i) & "</td>" 'Posso anche chiedere un campo specifico 'con, ad esempio, oRecordset.fields("ProductName") Next 'lista=lista & "</tr>" 'Fine riga con un record 'oppure aggiunge anche il numero progressivo del record. lista=lista & "<td>" & orecordset.absoluteposition & "</td></tr>" oRecordset.movenext 'e passo al record successivo (se non sono già alla fine). Loop until oRecordset.eof Or (oRecordset.AbsolutePosition = nRecordDaMostrare + 1) lista=lista & "</table><br>" 'Termino la tabella IEWindow.innerhtml = lista oConnection.close Set oConnection = Nothing Set oRecordset = Nothing '********* ADO elenco righe di una tabella.vbs ***************
Giovanni Cenati
|
|
|
|
© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com
|
|