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

    [C#] Problema Update database tramite DataGridView

    Buongiorno a tutti!
    Ho un problema con l'update di un database locale access. Premetto che mi sono avvicinato a c# e ai database recentemente e sono molto ignorante in materia XD.
    Ho un programma che deve gestire un magazzino di una sartoria. La struttura del database è la seguente:
    Immagine.jpg

    Il database ha n tabelle suddivise per anno. ogni anno ha la sua tabella. Prima dell'avvio del programma viene selezionato dall'utente l'anno e quindi la corrispettiva tabella.

    Il programma principale ha un dataGridView che visualizza tutti i campi della tabella del database. Quello che vorrei fare è modificare i parametri tramite datagridview e aggiornare di conseguenza il database tramite voce nel menu.

    Di seguito vi posto parte del codice che uso per popolare il mio DataGridView
    codice:
     
    public partial class Form1 : Form { 
    OleDbConnection connect = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database_Sartoria.mdb;"); 
    OleDbCommandBuilder commandBuilder; 
    OleDbDataAdapter dataAdapter; 
    DataSet ds; 
    
    ... 
    query = "SELECT * FROM " + selected; //selected = tabella selezionata prima dell'avvio del 
    programma 
    ... 
    
    ds = new DataSet(); 
    dataAdapter = new OleDbDataAdapter(query, connect); 
    commandBuilder = new OleDbCommandBuilder(dataAdapter); 
    dataAdapter.Fill(ds, "magazzino"); 
    dataGridView1.DataSource = ds; dataGridView1.DataMember = "magazzino";
    Fin qui nessun problema.

    Di seguito il codice per l'update:
    codice:
     
    
    private void salvaToolStripMenuItem_Click(object sender, EventArgs e) { 
    try { 
    dataAdapter.Update(ds, "magazzino"); 
    MessageBox.Show("Salvataggio Riuscito", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } catch (Exception se) { 
    MessageBox.Show(se.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    }
    nel momento in cui vado sul mio menu e clicco salva mi da il seguente errore e non riesco proprio a capire dove sto sbagliando :bhò:
    errore.jpg
    qualcuno di voi riesce ad aiutarmi? Grazie infinite anticipatamente
    Ultima modifica di babbuino55; 07-06-2014 a 13:17 Motivo: errore di scrittura

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    74
    Ciao.
    Premetto che non programmo in C#, ma mi diletto in VB.net (la mia firma ed i vari interventi sul forum lo dimostrano in pieno ...).
    A prima vista però due cose mi vengono in mente:

    - per quanto riguarda il tuo problema non capisco innanzitutto la chiusura della stringa "AND (." e "? = 1", magari in aiuto dei piu' esperti potresti postare oltre l'errore, la stringa di update che utilizzi.

    - ricordati che è molto meglio usare il costrutto "parameter" per aggiornare una tabella (l'ho imparato qui grazie ai consigli dei maestri del forum !!) tipo :

    codice:
    supdate = "UPDATE tabella1 SET RGSgru = @grutro, RGSt_gru = @tgru, RGSu_gru = @ugru WHERE RGSindex = " & index
    
    
            Using cmd = New OleDbCommand(sUpdate, CN)
                CN.Open()
                cmd.Parameters.AddWithValue("@grutro", grutrov)
                cmd.Parameters.AddWithValue("@tgru", t_gru)
                cmd.Parameters.AddWithValue("@ugru", u_gru)
                cmd.ExecuteNonQuery()
            End Using
    CN.Close()
    - per quanto riguarda la struttura del tuo mdb, non mi sembra ottimale (ma qui i più esperti sapranno aiutarti più di me...). Per quale motivo duplicare le tabelle, quando ne potresti avere una che contenga come campo anche l'anno di modo che nella select potresti di volta in volta scrivere :

    codice:
    query = "SELECT * FROM Database_Sartoria.mdb where ANNO = #" & selected & "#"; 

    Ciao.
    Dopo anni di programmazione amatoriale in VBA, ho deciso di passare a VB.NET

  3. #3
    Grazie della risposta Leggendo tra i vari manuali ho capito (spero XD) che la query di INSERT, DELETE e UPDATE venisserò generate automaticamente dandogli in pasto la SELECT...molto probabilmente ho sbagliato qualcosa o non ho fatto il tutto in maniera corretta XD Sicuramente andrò a spulciare nel forum per trovare qualcosa relativo al costrutto parameter e mi studierò come funziona. Per quanto riguarda il database non avevo pensato di aggiungere un campo anno...avevo pensato di fare tabelle multiple per fare confronti e separare tutto in maniera più "netta" senza pensare di farlo direttamente da query.

    Per ora grazie...vi terrò sicuramente aggiornati.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    106
    Quote Originariamente inviata da babbuino55 Visualizza il messaggio
    Leggendo tra i vari manuali ho capito (spero XD) che la query di INSERT, DELETE e UPDATE venisserò generate automaticamente dandogli in pasto la SELECT
    No vengono generate se gli dai in pasto un componente dataset (per le vecchie versione del framework), che puoi creare aggiungendo un nuovo elemento alla soluzione. Oppure usando l'Entity Framework (con gli ultimi framework), sfruttando a pieno le potenzialità di ado.net.
    In ogni caso io preferisco fare le query a manina come suggerito da @Karug64

  5. #5
    Sono riuscito a fare l'update e tutto il resto ho scoperto che davano dei problemi le 2 colonne del database settate come valuta. Ora tutto funziona tramite il command builder: INSERT, DELETE e UPDATE. Grazie a tutti delle dritte

Tag per questa discussione

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.