Ora però ho bisogno di capire come renderlo fattibile.
Allora ho creato il campo RECORD_EDIT_INSERT SMALLINT attraverso la query:
ALTER TABLE LISTINO_PREZZI_PV ADD RECORD_EDIT_INSERT SMALLINT default 0 not null;
Poi vado per creare il trigger con la seguente sintassi
CREATE TRIGGER MODIFICA_INSERIMENTO_LISTINI_PV for LISTINO_PREZZI_PV
Active
After insert or update
Position 0
AS
BEGIN
-- ogni volta che inserisco o
-- modifico un record vado ad
-- impostare il campo RECORD_EDIT_INSERT
-- a 1 in modo che nel trasferire i dati
-- ai punti vendita io trasferisco solo le
-- righe essenziali
-- la cancellazione è bloccata dal programma
-- semplicemente rendo i record non continuativi
-- e con la data di inizio vendita e di fine vendita
-- impostata a 1-1-1900
new.RECORD_EDIT_INSERT=1;
END;
Applico la creazione del trigger ed è ok, quando però applico la commit retaining mi visualizza questo popup
: CommitRetaining :
-attempted update of read-only column
Uso Turbobird, sapete cosa può essere? Dove sbaglio?
Inoltre ho un dubbio amletico: quando poi voglio risettare la colonna RECORD_EDIT_INSERT a 0 come posso fare senza che il trigger entri in funzione?
Con FlameRobin ho provato così:
SET TERM ^ ;
CREATE TRIGGER MODIFICA_INSERIMENTO_LISTINI_PV for LISTINO_PREZZI_PV
Active
After insert or update
Position 0
AS
BEGIN
-- ogni volta che inserisco o
-- modifico un record vado ad
-- impostare il campo RECORD_EDIT_INSERT
-- a 1 in modo che nel trasferire i dati
-- ai punti vendita io trasferisco solo le
-- righe essenziali
-- la cancellazione è bloccata dal programma
-- semplicemente rendo i record non continuativi
-- e con la data di inizio vendita e di fine vendita
-- impostata a 1-1-1900
new.RECORD_EDIT_INSERT=1;
END^
SET TERM ; ^
Ma va in loop il programma, si oscura la finestra di flamerobin e non fa nulla. Idee? Inoltre ipotizziamo che ci riesco, come posso poi settare il valore del campo RECORD_EDIT_INSERT a 0 senza che questo cambiamento inneschi nuovamente il trigger e quindi lo riporti automaticamente a 1?
Qualche controllo del tipo:
if old.record_edit_insert is null
new.RECORD_EDIT_INSERT
L'ipotesi è che scatta l'insert, poi l'update. O fanne due.
Uno solo un trigger per le insert e uno solo per gli update ;)
Stilgar
leggi qua
http://www.firebirdsql.org/manual/gfix-sync.html (http://www.firebirdsql.org/manual/gfix-sync.html)
prova ad impostare la scrittura asincrona, il comando dovrebbe essere:
gfix -write async database_name
penso che così dovresti ottenere un significativo aumento delle prestazioni