Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    408

    [VB.NET] File .mdb bloccato dopo la chiusura delle connessioni

    Ciao a tutti,
    ho questo codice che mi esporta un file mdb, funziona ed i record e la tabella sono scritti correttamente nel file, ma il file mdb rimane bloccato (e' presente anche un file laccdb con lo stesso nome nella cartella) e non posso spostarlo anche se chiudo esplicitamente le connessioni.

    codice:
    Public Sub ExportToMdb(query As String, mdbFileName As String)
        ' Stringa di connessione per il database di origine (ACCDB)
        Dim sourceConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & perc_db & ";Persist Security Info=False;"
    
    
        ' Stringa di connessione per il nuovo database MDB
        Dim mdbConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\sabello\Documents\Visual Studio 2022\progetti\axactorDI\axactorDI\bin\Debug\net8.0-windows\mdb\" & mdbFileName & ".mdb;"
        ' Nome della tabella nel nuovo database MDB
        Dim tableName As String = System.IO.Path.GetFileNameWithoutExtension(mdbFileName)
    
    
        ' Crea il nuovo database MDB
        Dim cat As Object = CreateObject("ADOX.Catalog")
        cat.Create(mdbConnectionString)
        cat = Nothing
    
    
        ' Esegui la query sul database di origine e ottieni i dati
        Dim dataTable As New DataTable()
        Using sourceConnection As New OleDbConnection(sourceConnectionString)
            Using adapter As New OleDbDataAdapter(query, sourceConnection)
                sourceConnection.Open()
                adapter.Fill(dataTable)
            End Using
            sourceConnection.Close()
        End Using
    
    
    
    
        ' Crea la tabella nel nuovo database MDB e inserisci i dati
        Using mdbConnection As New OleDbConnection(mdbConnectionString)
            mdbConnection.Open()
    
    
            ' Crea la tabella
            Dim createTableCommand As String = "CREATE TABLE [" & tableName & "] ("
            For Each column As DataColumn In dataTable.Columns
                createTableCommand &= "[" & column.ColumnName & "] " & GetOleDbType(column.DataType) & ","
            Next
            createTableCommand = createTableCommand.TrimEnd(","c) & ")"
    
    
            Using cmd As New OleDbCommand(createTableCommand, mdbConnection)
                cmd.ExecuteNonQuery()
            End Using
    
    
            ' Inserisci i dati
            For Each row As DataRow In dataTable.Rows
                Dim insertCommand As String = "INSERT INTO [" & tableName & "] VALUES ("
                For Each column As DataColumn In dataTable.Columns
                    insertCommand &= "?,"
                Next
                insertCommand = insertCommand.TrimEnd(","c) & ")"
    
    
                Using cmd As New OleDbCommand(insertCommand, mdbConnection)
                    For Each column As DataColumn In dataTable.Columns
                        cmd.Parameters.AddWithValue("@" & column.ColumnName, row(column))
                    Next
                    cmd.ExecuteNonQuery()
                End Using
            Next
    
    
            mdbConnection.Close()
            mdbConnection.Dispose()
    
    
        End Using
    
    
        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
    End Sub
    Ho provato ad usare questo che ho trovato ma non funziona
    GC.Collect()
    GC.WaitForPendingFinalizers()
    GC.Collect()

    Avete suggerimenti?
    Da un grande potere derivano grandi responsabilità

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    314
    ma quale MDB ti risulta bloccato ??
    quello sorgente (cioè la prima parte del codice) o quello di destinazione (cioè la seconda parte) ??

  3. #3
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    408
    ciao SirJo,
    non l'ho specificato

    Si tratta di quello di destinazione, dopo averlo esportato devo spostarlo su un altro disco e mi risulta bloccato
    grazie
    Da un grande potere derivano grandi responsabilità

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    314
    devi fare il debug "a blocchi"
    metti un "exit sub" dopo la riga "cat = Nothing" e vedi se il file è bloccato

    dopo di chè metti un "exit sub" dopo aper creato la tabella (prima di scriverci dentro) e avanti così finchè trovi dopo è il blocco

    comunque la gestione del GC ti consiglio di toglierla, viene usata solo in casi molto molto particolari

  5. #5
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    408
    Ho fatto come mi hai consigliato, ho messo exit sub dopo cat, e' li che mi blocca il file, infatti non lo posso tagliare ed incollare da altra parte.

    Hai dei suggerimenti?
    grazie

    PS tolto anche il GC
    Da un grande potere derivano grandi responsabilità

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    314
    Crea il file MDB, non creare tabelle nè nulla, e chiudi tutto.
    Avrai quindi un file MDB vuoto, e rinominalo (ad esempio) in EMPTY.MDB
    A questo punto non avrai più bisogno di ADOX e di creare il file MDB ogni volta, basta che fai un COPY del file EMPTY.MDB e poi ci fai quello che vuoi.

  7. #7
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    408
    Ciao SirJo,
    alla fine ho fatto cosi come mi hai suggerito.
    grazie
    Da un grande potere derivano grandi responsabilità

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.