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

    [MYSQL]Triggers prima di una insert

    Ciao a tutti ragazzi.

    Avrei bisogno di capire come poter utilizzare un trigger prima di una insert.

    Ho una tabella così composta:


    giorno
    ora1
    ora2
    ora3
    ora4

    un tipico riempimento può essere:


    giorno = 1
    ora1 = 10.30
    ora2 = 14.00
    ora3 = 15.00
    ora4 = 16.00

    può capitare ad esempio:

    giorno = 1
    ora1 = 18.00
    ora2 = 19.00
    ora3 = niente
    ora4 = niente

    Quello che vorrei realizzare, è una condizione che dica:

    per lo stesso giorno, se la nuova ora1 è uguale alla vecchia ora1, non puoi inserire
    (ovviamente anche per le altre ore).

    Mi sapreste suggerire qualcosa?

    Grazie davvero.

    Raoul.

  2. #2
    Allora, documentandomi meglio sui triggers, ho capito che non possono fare al caso, dato che non sollevano nessuna eccezione per impedire l'inserimento. Si potrebbe solo settare un valore nullo in un campo dove non ci si aspettano valori nulli per fargli sollevare un'eccezione, ma non credo sia una buona soluzione.

    Ho quindi provato ad eseguire una semplice query di questo tipo:

    codice:
    SELECT COUNT(*) FROM miaTabella
    WHERE giorno = 'il valore che devo controllare'
    AND ora1 = 'valore a run time'
    AND ora2 = 'valora a run time'
    OR ora3 = 'valore a run time'
    AND ora4 = 'valore a run time'
    Poi dico al mio programma che se questa query mi ritorna un valore pari a zero (cioè, COUNT = 0) di eseguire l'inserimento, se invece ritorna 1, di non eseguirlo.

    Fin qui, tutto bene, nel senso che se eseguo le istruzioni una per volta (considerando quindi un giorno alla volta) funziona come mi aspetto. Se invece ciclo questa query in un "for", appena inseriti il primo valore, poi mi restituisce sempre "1" e quindi non prosegue.

    Suggerimenti?

    Grazie.

    Raoul.

  3. #3
    Al momento sono giunto ad una soluzione secondo me poco elegante:

    codice:
    string verifica = string.Empty;
    
    for(int i = 0; i < righe; ++i)
    {
        verifica = "SELECT COUNT(*) FROM tabella " +
                     "WHERE (ora1 = 'valore' AND ora2 = 'valore' ) OR (ora3 = 'valore' AND ora4 = 'valore')
                     "AND giorno = '" + i + "';
    }
    
        verifica += "AND ID_Lavoro = 'altro_Valore'";
    Questa query, mediante il metodo ExecuteNonQuery() dell'oggetto MySqlCommand mi restituisce un "int"

    quindi:

    codice:
    int s = myCommand.ExecuteNonQuery();
    
    if( s != 0) { //non inserire; } else { //inserisci; }
    Qualsiasi suggerimento è ben accetto

    Grazie.

    Raoul.

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.