Newsgroup: it.comp.lang.visual-basic
Titolo: [?] VB e database (sql)

Salve,
volevo sapere come si possono prelevare i nomi delle tabelle in un database
e quante ne sono in tutto e se si possono sapere anche i nomi dei campi di
ogni tabella. Magari, non so, usando qualche comando SQL (ma non credo) o
proprio di VB.
Grazie anticipatamente a chiunque risponderà.
-Ciao-
-Luca450Mhz-

 wrote in message
x6WY8.46923$7N3.1...@twister2.libero.it...

Spudoratamente copiato dal libro di balena e adattato per un mio progetto
(prima di accorgermi che il listview di vb5 non c'ha i checkBox ...sigh!)
Funziona con DAO eh!
metti un treeview e un listview accanto
un image list per mettere le icone che appariranno nel treeview
il listview l'ho chiamato Lw
il treeview TrDB
poi metti nel form
Private Sub ShowDBStructTAB(TV As TreeView, Optional showSystemTables As
Boolean = False)
'Struttura DB jet
Dim Td As TableDef
Dim db As DAO.Database
Dim Fld As DAO.Field
Dim Nd As Node
Dim Nd2 As Node
Dim conta As Long
Dim Li As ListItem
TV.Nodes.Clear
Lw.ListItems.Clear
conta = 0
Set db = DBEngine.OpenDatabase(App.Path & "\ritmi.mdb") 'occhio qui devi
mettere il path al tuo dataBase
Set Nd = TV.Nodes.Add(, , "Root", Ritmi, "Database")
Nd.Expanded = True
For Each Td In db.TableDefs
    If (Td.Attributes And dbSystemObject) = 0 Or showSystemTables Then
        'Aggungi tabella
        conta = conta + 1
        Set Nd = TV.Nodes.Add("Root", tvwChild, (Td.Name & Str$(conta)),
Td.Name, "Table")
        'aggiunta dei campi
        Lw.ListItems.Clear
        For Each Fld In Td.Fields
            conta = conta + 1
            Set Nd2 = TV.Nodes.Add(Nd.Index, tvwChild, (Fld.Name &
Str$(conta)), Fld.Name, "Field")
            Set Li = Lw.ListItems.Add(, , Fld.Name, 1)
        Next
    End If
Next
db.Close
End Sub
....ed anche....
Private Sub TrDB_Expand(ByVal Node As ComctlLib.Node)
Dim Tn As Node
Dim Nkey As String
Nkey = Node.Text
On Error Resume Next
Lw.ListItems.Clear
For Each Tn In TrDB.Nodes
    If Tn.Parent = Nkey Then
        Debug.Print Tn.Text
        Lw.ListItems.Add , , Tn.Text
    End If
Next
On Error GoTo 0
End Sub
...ed infine...
Private Sub Form_Load()
ShowDBStructTAB Me.TrDB
End Sub
mille altri modi diversi per trovare la struttura..... questo metodo  te la
presenta in maniera carina...oramai ci avevo già speso un po di tempo!

 ogni tabella.
Potresti ricorrere ad ADOX, una estensione di ADO che ti permette di
lavorare con i metadati di un Data Source.
Sul seguente link troverai la descrizione del modello ad oggetti e alcuni
esempi di codice:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/
admscadoapireference.asp
Se utilizzi come Data Source SQL Server 2000, puoi ricorrere alle
comodissime Information Schema Views per leggere i metadati senza la
necessità di effettuare query sulle tabelle di sistema (che possono cambiare
da versione a versione).
Le Information Schema Views sono conformi allo standard SQL-92 e quindi
restituiranno sempre le informazioni richieste indipendentemente dalle
modifiche che Microsoft eseguirà sulle tabelle di sistema.
Per recuperare i nomi delle tabelle di un database, puoi utilizzare la
seguente query:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
Per avere i nomi dei campi di una tabella:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = '<Nome Owner>'
AND TABLE_NAME = '<Nome Tabella>'
Sui BOL troverai ogni dettaglio su tutte le Information Schema Views.
Ciao!
--
Lorenzo Benaglia
UGIdotNET - 
http://www.ugidotnet.org


Quindi potrei 'vedere' la struttura del db anche con l'ADO??
Grazie tantissimo!!
-Ciao-
-Luca450Mhz-

 con questo altro metodo di accesso ad un db?
Cerca il metodo OpenSchema(ADO) su MSDN.

 cane.
CUT
scusa non sapevo che non l'avevi mai usati!
cmq
al listview e al treeview devi associarci l'imagelist
c'è una proprietà apposita....
poi ci devi mettere dentro 3 icone(si fa sempre in progettazione sena
programmare nullla...)
dagli anche 3 nomi specifici alla key della immagine intendo...i nomi sono
Database Table Field
poi il treeview dagli come vista(view) LwReport (su vb5 è la scelta 3)
col vb6 se spunti checkbox in treeview puoi fare anche la scelta dei campi
(ad esempio per spostarli o copiarli etc etc)
te lo dico con la speranza ti venga la voglia di approfondire il treeview ed
il listview controlli poco usati dai più ma che rendono chiare le relazioni
tra dati.
Se vuoi la sola versione treeview
Private Sub ShowDBStruct(TV As TreeView, Optional showSystemTables As
Boolean = False)
'Struttura DB jet
Dim Td As TableDef
Dim db As DAO.Database
Dim Fld As DAO.Field
Dim Nd As Node
Dim Nd2 As Node
TV.Nodes.Clear
Set db = DBEngine.OpenDatabase(App.Path & "\ritmi.mdb") 'cambia...punta al
tuo db!
Set Nd = TV.Nodes.Add(, , "Root", Ritmi, "Database")
Nd.Expanded = True
For Each Td In db.TableDefs
    If (Td.Attributes And dbSystemObject) = 0 Or showSystemTables Then
        'Aggungi tabella
        Set Nd = TV.Nodes.Add("Root", tvwChild, , Td.Name, "Table")
        'aggiunta dei campi
        For Each Fld In Td.Fields
            Set Nd2 = TV.Nodes.Add(Nd.Index, tvwChild, , Fld.Name, "Field")
        Next
    End If
Next
db.Close
End Sub
per esercizio scrivilo in ADO saresti svincolato dal mondo Access!
hai OpenSchema per ritrovare la struttura.
F1 per avere info su ogni singolo comando
ciauz!