PDA

Visualizza la versione completa : [MYSQL]: Triggers prima di una INSERT


RaouL_BennetH
18-09-2006, 19:31
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.

RaouL_BennetH
19-09-2006, 11:55
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:




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.

RaouL_BennetH
19-09-2006, 13:59
Al momento sono giunto ad una soluzione secondo me poco elegante:




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:




int s = myCommand.ExecuteNonQuery();

if( s != 0) { //non inserire; } else { //inserisci; }



Qualsiasi suggerimento è ben accetto :)

Grazie.

Raoul.

Loading