Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB6] verifica tabelle presenti

    Salve ho la necessità tramite codice di sapere quante tabelle sono presenti in un database ed il nome di esse.

    c'è qualche modo?
    Agos

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Ti posto il codice in ADO per avere una lista (in una listview) di tutte le tabelle presenti in un database access:
    La listview deve avere la proprietà View impostata a 3-IvwReport

    codice:
        Db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Nomedb & ";Persist Security Info=False"
        listview1.ListItems.Clear
        
        I = 1
        Set Rs = Db.OpenSchema(adSchemaTables)
        While Not Rs.EOF
           If Rs("table_type") = "TABLE" And LCase(Rs("table_name")) <> "errori di incollamento" Then
                Set li = listview1.ListItems.Add(I, , Rs("table_name"))
                StrSql = "select * from " & Rs("table_name") & " "
                'questa istruzione come puoi notare serve per sapere se la tabella contiene record            
                Rs1.CursorLocation = adUseClient
                Rs1.Open StrSql, Db, adOpenKeyset, adLockOptimistic
                li.SubItems(1) = Rs1.RecordCount
                Rs1.Close
                I = I + 1
            End If
            
           Rs.MoveNext
        Wend
        Rs.Close

  3. #3
    grazie per avermi risposto, ma non ci capisco niente, non esiste un modo più semplice?

    forse rinuncerò ad usare questo modo, e sfrutterò i file, cioè quando l'utente crea una tabella salvo il nome in un file sequenziale.
    Agos

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Non capisci perchè:
    - il codice che ti ho postato è in ADO e tu programmi in DAO?
    - hai bisogno di visualizzare le informazioni in un altro oggetto che non sia la listview?
    - programmi in DAO ?

    Ti posto il codice anche in DAO, così puoi valutare se scrivere il file rimane, per te, la soluzione migliore:
    codice:
    ' Tasto Comando
    Private Sub Command1_Click()
        Dim TblNew As New TableDef
        Dim Db As Database
            
        Set Db = OpenDatabase("c:\db1.mdb", True, False, Pass)
        For Each TblNew In Db.TableDefs
            'le tabelle Msys.. sono tabelle di Access non visibili
            If Mid(TblNew.Name, 1, 4) <> "MSys" Then
                'qui inserisci l'istruzione per memorizzare il nome della tabella
                msgbox" Nome Tabella: " & TblNew.Name
            End If
        Next
        Db.Close
    End Sub
    La differenza tra DAO e ADO sta nell'apertura di un recordset che deve ottenere le informazioni sullo schema del data base, dopo la open sul database:
    Set Rs = Db.OpenSchema(adSchemaTables)

    If Rs("table_type") = "TABLE" 'questo sta a significare che interessa vedere solo informazioni relative alle tabelle
    Rs("table_name") ' Contiene il nome della tabella

    Ciao e buona domenica.

  5. #5
    programmo in ado, ma non è che sia a alti livelli, ho terminato un corso di 600 ore dove ci hanno spiegato la base di sql.

    Iniziamo dalla prima riga:

    Db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Nomedb & ";Persist Security Info=False"

    anzichè nome db ho messo LISTA che sarebbe il nome del mio database, per il resto non sò che sia.

    Grazie per la tua disponibilità
    Agos

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Non importa se non sei ad alti livelli, nemmeno io, se mi confronto con altre persone che rispondono nel forum lo sono. La cosa bella è potersi confrontare ed imparare. Con il tempo certe cose diventeranno automatiche , ... è solo questione di tempo.
    Prima cosa le dichiarazioni puoi farle :
    - a livello di form dichiarandole Private e tutto il tuo form potrà utilizzarle
    - livello di routine dichiarandole Dim e la tua routine le riconoscerà
    - oppure a livello di progetto dichiarandole in un modulo .bas di tipo Public
    Se fai le diciarazioni Private e Public per i recordset e la connectionstring devi fare attenzione se sono già state assegnate con una open senza successiva close, ADO a differenza di DAO dà errori.

    Quindi dichiariamo a livello di form:

    'dichiarazione del database
    Private Db As New ADODB.Connection
    'dichiarazione del recordset
    Private Rs As New ADODB.Recordset

    ' apertura del database, connection string
    ' il provider cambia per ogni tipologia di database. Quello dichiarato è riferito ad un database Access (OLE-DB è il suo provider nativo)
    'Data Source = Nome del tuo database completo di path
    ' Nomedb = "c:\db1.mdb" 'variabile che contiene path e nome db
    ' Persist... è un parametro opzionale in quanto è il valore predefinito serve per il livello di protezione del database (password).
    codice:
    Db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Nomedb & ";Persist Security Info=False"
    Spero che adesso sia più chiaro, ciao

  7. #7
    ok fin qui ci sono


    ho fatto queste dichiarazioni

    Dim CONN As New ADODB.Connection
    Dim RS As New Recordset
    Dim PERCORSO As String
    Dim I As Integer


    PERCORSO = App.Path & "\LISTA.MDB"
    CONN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PERCORSO & ";Persist Security Info=False"

    adesso nel codice seguente all'istruzione che mi hai dato c'i sono:

    set li 'che vuol dire?
    li come devo dichiararlo
    a che serve rs1
    devo dichiararlo come rs?
    Agos

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    L'esempio che ti avevo postato riportava i nomi delle tabelle e il numero dei record presenti in ogni tabella in una listview. Tu hai questa necessità? O hai bisogno di visualizzarli, controllarli in altro modo?
    Comunque come ti ho scritto all'inizio la listview deve avere la proprietà View impostata a 3-IvwReport (la listview ti verrà presentata come una "griglia" se imposti la proprietà Gridlines = True ) dove nella prima colonna (1) vedrai il nome della tabella, nella seconda (subitem(1)) il numero dei record presenti:

    Se vuoi vedere i nomi delle colonne puoi inserire:

    codice:
    ListView1.ColumnHeaders.Add 1, , "Nome Tabella"
    ListView1.ColumnHeaders.Add 2, , "N. Record"
    codice:
                Dim li As ListItem 
                Dim RS1 As New Recordset 
                Set li = listview1.ListItems.Add(I, , Rs("table_name"))
                StrSql = "select * from " & Rs("table_name") & " "
                'questa istruzione come puoi notare serve per sapere se la tabella contiene record            
                Rs1.CursorLocation = adUseClient
                Rs1.Open StrSql, Db, adOpenKeyset, adLockOptimistic
                li.SubItems(1) = Rs1.RecordCount
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.