Aggiunta record su update

di il
23 risposte

Aggiunta record su update

Avrei bisogno di inserire automaticamente un record in db nel momento in cui effettuo un aggiornamento di quelli esistenti, esiste un modo per farlo?

23 Risposte

  • Re: Aggiunta record su update

    Per queste cose si usano i trigger
  • Re: Aggiunta record su update

    Grazie per la risposta, ma come posso fare, mi sai dare indicazioni.. ho cercato documentazione a riguardo in rete ma ci capisco poco, ad esempio, lo devo creare sulla classe dbhelper o sulla classe che effettua fisicamente la classe che effettua inserimento / aggiornamento?
    Questo e quello che ho provato a fare sulla classe db helper
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		db.execSQL("DROP TRIGGER Insert su aggiorna;");
    		StringBuilder builder = new StringBuilder();
    		builder.append("CREATE TRIGGER IF NOT EXISTS TURNI_TABLE AFTER UPDATE ON MESE");
            builder.append("BEGIN ");
            builder.append("INSERT INTO DATA (data) VALUES (1); ");
            builder.append("END;");
            
            db.execSQL(builder.toString());
    		db.execSQL("DROP TABLE IF EXISTS "+TURNI_TABLE);
    		
    		onCreate(db);
    
    	}
    Ma come mio solito non mi funziona,
    Questo e il db che creo:
    public static final String TURNI_TABLE="turni";
    	public static final String TURNI_ID="idturno";
    	public static final String MESE="mese";
    	public static final String DATA="data";
    Vorrei inserire un recod con valore 1 sulla colonna DATA ogni qualvolta venga eseguido un aggiornamento sulla colonna mese.
    E' chiaro che sbaglio o non ho capito nulla, mi potete dare una mano grazie.
  • Re: Aggiunta record su update

    La tua affermazione o non ha senso oppure ti sei spiegato male.

    In ogni caso c'e' un problema a monte: ti serve sapere come funziona in generale un database relazionale, che cosa e' l'algebra relazionale e come funziona l'sql.

    Ti consiglio di acquistare un libro sull'argomento e studiare un po'.
  • Re: Aggiunta record su update

    Può sembrare una domanda senza senso, ma ti assicuro che lo scopo per cui voglio realizzare questa cosa c'è, sto solo cercando di capire come inserire l'istruzione che mi serve.
  • Re: Aggiunta record su update

    Allora riassumo:

    stessa tabella, tu modifichi il campo mese di un record qualunque, e automaticamente aggiungi un nuovo record, con tutti i campi con i valori di default a parte il campo data?

    Oppure vuoi aggiornare il campo data del record a cui aggiorni il campo mese?
  • Re: Aggiunta record su update

    Esatto, aggiornando il campo mese o gli altri campi in db, devo arrivare ad aggiungere contemporaneamente un altro record. La mia necessità sarebbe di creare un record vuoto, ma da come ho letto, sembra che creare un record vuoto non sia fattibile, quindi ho deciso di creare una colonna data,(ma potrebbe avere qualsiasi altro nome, quindi capisci perchè non importa cio che gli inserisco) che cmq non viene visualizzata dal display adapter, diciamo colonna fittizia. Capisco che probabilmente mi spiego poco bene, ma essendo poco pratico di programmazione per non dire incapace, cerco di spiegare il meglio possibile cosa devo fare.
  • Re: Aggiunta record su update

    Per azioni di questo tipo puoi fare in 2 modi: o gestisci tutto manualmente, cosa che è più facile perché richiede meno conoscenze ma più scomoda ed inefficiente, oppure ti affidi ai trigger. La sintassi per la creazione/eliminazione/modifica di un trigger la puoi trovare a questo indirizzo. Per il resto si tratta di semplice SQL, né più né meno.

    Comunque a mio avviso inserire una riga completamente vuota la maggior parte delle volte è inutile e il problema può essere risolto in altro modo.
  • Re: Aggiunta record su update

    OK,attualmente ho l'inserimento con intent mediante pulsante e tutto funziona a meraviglia. Come da post precedenti sto provando a vedere di inserire un trigger per automatizzare l'insert ma evidentemente mi manca qualcosa per farlo funzionare. Il log non da errori, l'app funziona ma il record non viene inserito e ovviamente non capisco per quale motivo.

    Inviato dal mio GT-H9500 utilizzando Tapatalk
  • Re: Aggiunta record su update

    Beh è probabile che il trigger sia errato, e può esserlo in diverse parti. Magari è giusto il corpo, ma è sbagliata la condizione di attivazione, cosa che gli impedisce di attivarsi. Per lavorare più facilmente con sqlite secondo me ti conviene lavorare prima sul database (attraverso il tool "sqlite3" presente fra gli strumenti installati con l'android sdk) e solo dopo portare il codice su android. In questo modo secondo me velocizzi il processo!
  • Re: Aggiunta record su update

    Ciao, ho seguito il tuo consiglio, ma vuoi perchè l'inglese non è il mio forte, vuoi perchè non ho studiato,fatto sta che sono fermo al punto di partenza.
    Dopo mille tentativi e prove, sono ancora più confuso di prima, eppure dove guardo guardo, la sintassi mi sembra corretta.Unica cosa, mi pare di aver capito che per operare con i trigger, devo fare riferimento a due tabelle in db, in pratica se aggiorno la tabella, non mi inserirà mai un nuovo record sulla stessa tabella.
  • Re: Aggiunta record su update

    In realtà è possibile creare triggers che operano sulla stessa tabella, ma in generale questo può causare problemi di loop infiniti. Ad esempio se crei un trigger che si attiva dopo l'inserimento di una nuova riga nella tabella e il trigger stesso inserisce un nuovo dato sulla tabella, allora si crea un loop infinito, in quanto il trigger richiama se stesso un numero infinito di volte. In realtà per come è implementato sqlite questa modalità è disabilitata di default..

    Ma a cosa ti servirebbe inserire una tupla vuota?
  • Re: Aggiunta record su update

    Sperando di riuscire a spiegarti.... Attualmente, prelevò i dati da inviare al display adapter da 2 tabelle mediante add.cursor, dalla prima tabella i record dei turni che inizialmente sono ovviamente a null, e dall'altra tabella i giorni che mi vanno da 1 a 31.In questo modo a display ho 31 linee che mediante update completo successivamente con i dati. Se compilo ad esempio 3 giorni di gennaio però, passando a febbraio mi ritrovò con 3 giorni a display in meno. Per completare febbraio devo inserire manualmente 3 record e cosi via. Se io creassi 365 id vuoti no avrei questo problema quindi. Ma m sembra assurdo riempire un DB praticamente vuoto. A questo punto viste le mie scarse conoscenze di programmazione ho pensato al trigger. In questo modo ad ogni update di un giorno automaticamente riuscire i a mantenere sempre vuoti i record necessari a cocmpletarmi a display un intero mese. So che é difficile da capire la mia spiegazione ma spero almeno di avere reso idea del motivo per cui m serve creare un trigger.

    Inviato dal mio GT-H9500 utilizzando Tapatalk
  • Re: Aggiunta record su update

    In realtà tutto questo giro non ti serve! Una volta che fissi un anno e un mese allora automaticamente puoi ricavarti anche il numero di giorni che quel mese ha!
    
    Calendar mycal = new GregorianCalendar(2014, Calendar.FEBRUARY, 1);
    
    int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 28
    

    Sent from my iPhone using Tapatalk
  • Re: Aggiunta record su update

    Scusa la mia ignoranza ma questo va messo sulla classe relativa al mese giusto? Ossia 1 per mese, adesso sto generando le date con un ciclo for i++ quindi dovrei togliere questo ciclo e mettere questo codice?

    Inviato dal mio GT-H9500 utilizzando Tapatalk
Devi accedere o registrarti per scrivere nel forum
23 risposte