Aggiungere una colonna in una tabella di un file.accdb

di fabio1974it il
10 risposte
Buongiorno, non riesco ad aggiungere una nuova colonna in una tabella di un database tramite codice.
Ho fatto dei tentativi, e ne scrivo subito uno, ma essendo poco pratico penso che ci sia un problema di concetto.
Vorrei aggiungere la colonna "Attivo", alla tabella "Parametri"

Dim StrComando As String = "(ALTER TABLE Parametri ADD Attivo) "
ComandoDB = New OleDb.OleDbCommand(StrComando, ConnessioneFileDBn)
ComandoDB.ExecuteNonQuery()
ComandoDB.Dispose()

e questo è l'errore:
System.Data.OleDb.OleDbException: 'Istruzione SQL non valida. Prevista 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' o 'UPDATE'.'

Il DB è sempre connesso e lo chiudo solo a chiusura del programma

10 Risposte

  • fabio1974it ha scritto:


    Dim StrComando As String = "(ALTER TABLE Parametri ADD Attivo) )"
    Questo comando DDL non mi sembra corretto: manca il tipo del campo, ci sono delle parentesti di troppo...
  • Alka ha scritto:


    fabio1974it ha scritto:


    Dim StrComando As String = "(ALTER TABLE Parametri ADD Attivo) )"
    Questo comando DDL non mi sembra corretto: manca il tipo del campo, ci sono delle parentesti di troppo...
    Si nel copiare ho sbagliato, ma non è quello che mi ha dato l'errore
  • fabio1974it ha scritto:


    Si nel copiare ho sbagliato, ma non è quello che mi ha dato l'errore
    Copia il codice corretto, e tutta la parte di codice significativo: se vediamo un'altra versione, non ci capiamo nulla e non distinguiamo i tuoi errori di copiatura da quelli effettivi.

  • vi allego la foto dell'errore. con il codice dietro
    vi allego la foto dell'errore. con il codice dietro


    Ma a prescindere dal mio codice, mi farebbe comodo un esempio per aggiungere, tramite codice, una colonna nuova ad una tabella di un file .accdb
  • Togli le parentesi. L'istruzione SQL non può iniziare con una parentesi, peraltro inutile. Inoltre specifica il tipo della colonna, come ti è già stato detto. Per gli esempi -->
  • Ti ringrazio per il link dove ho trovato parecchie cose interessanti.
    ho fatto delle prove e mi da un errore che poi ho risolto chiudendo la connessione per alcuni secondi e successivamente, dopo averla aperta, sono riuscito a inserire la colonna nuova. Ovviamente sapevo che non cera una colonna uguale.
    Vi posto l'immagine con l'errore e il codice con la soluzione. Se poi mi sai dire come ovviare al problema senza chiudere la connessione lo preferisco. Ho ipotizzato che potrebbe risultare aperta la tabella, e non la fa modificare, ma non so come si chiude una singola tabella del db.

    con errore
    con errore

    Public Sub CmdTest_Click(sender As Object, e As EventArgs) Handles CmdTest.Click
    Try
    If ConnessioneFileDBn.State = ConnectionState.Open Then
    ConnessioneFileDBn.Close()
    Sleep(6000)

    End If
    ConnessioneFileDBn = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CartellaEseguiti & "Eseguiti_" & Cmb_File.SelectedItem & ".accdb")
    ConnessioneFileDBn.Open()

    Dim StrComando As String = "ALTER TABLE PARAMETRI ADD COLUMN ATTIVO TEXT(25)"
    ComandoDB = New OleDb.OleDbCommand(StrComando, ConnessioneFileDBn)
    ComandoDB.ExecuteNonQuery()
    ComandoDB.Dispose()

    Catch ex As Exception
    MsgBox(ex.Message)

    End Try




    End Sub
  • Per modificare la struttura devi chiudere le connessioni, ovviamente. Ma poi a che ti serve modificare la tabella nel codice?
  • Uso un file per vari programmi, dove uso sempre le stesse tabelle. Adesso che sto avendo delle esigenze diverse, invece di rifare il file, modifico le tabelle per quello che mi serve. tutto qui.
    Grazie per il prezioso aiuto
  • Fossi in te preparerei il db come ti serbe con le modifiche fatte una volta per tutte con i tool appositi e non nel codice
  • Probabilmente il database è aperto da un altro programma. Access?
Devi accedere o registrarti per scrivere nel forum
10 risposte