Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro è un registratore digitale elegante e tascabile con app integrata che semplifica trascrizioni e riepiloghi, offre funzioni avanzate come template e note intelligenti, ma resta vincolato a un piano a pagamento per chi ne fa un uso intensivo
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-07-2009, 13:50   #1
taffy2
Junior Member
 
Iscritto dal: Jul 2009
Messaggi: 2
[POSTGRES] VINCOLO CHIAVE STERNA TABELLE - TRIGGER

Una buona giornata a tutti. Ho un problema con una serie di trigger in tabelle che adesso vi espongo. Cerco di farmi capire per poter focalizzare il problema. Ho 3 tabelle di magazzino, la prima contiene il record di testata di magazzino(mag0000f), la seconda contiene i records di dettaglio di magazzino(mag0100f) e la terza contiene i records di saldi di magazzino(mag0500f). Ho scritto una serie di trigger i quali alimentano la tabella dei saldi di magazzino(mag0500f), ogni qual volta movimento mag0000f e mag0100f (rispettivamente testata e dettaglio magazzino). Nella tabella mag0100f, ho inserito un vincolo di chiave esterna in modo tale che quando cancello un record di testata, automaticamente mi cancella anche tutte le righe di dettaglio collegate. Il tutto funziona correttamente quando effettuo nuovi inserimenti, modifiche o cancellazioni delle righe di dettaglio di magazzino. Mentre se cancello la testata di magazzino (operazione fatta dal cliente PG-ADMIN) in un primo momento sembra che il record venga cancellato, ma se faccio un aggiornameto il record di testata mi ricompare in griglia, se guardo il dettaglio, le righe correlate al record che precedentemente avevo provato a cancellare, sono prenti ancora, mentre la tabella dei saldi di magazzino mag0500f viene aggiornata correttamente. La versione del database che utilizzo è la 8.2.3.
Se qualcuno potesse darmi una mano a risolvere tale problema, gliene sarei grato.
Posto gli script delle tabelle, function e trigger.

CREATE OR REPLACE FUNCTION inserisci_record_maga_saldi(integer, character varying)
RETURNS void AS
$BODY$BEGIN
-- if NOT $1 IS NULL THEN
insert into mag0500f(mag05mag, mag05art) values ($1, $2);
-- END IF;
EXCEPTION
WHEN unique_violation THEN RETURN;
END; $BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION inserisci_record_maga_saldi(integer, character varying) OWNER TO postgres;

CREATE OR REPLACE FUNCTION zerosenull(integer)
RETURNS information_schema.cardinal_number AS
$BODY$BEGIN
IF $1 IS NULL THEN
RETURN 0;
ELSE
RETURN $1;
END IF;
END$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION zerosenull(integer) OWNER TO postgres;

CREATE OR REPLACE FUNCTION mag0000_delete_aggiorna_saldi_mag0500f()
RETURNS "trigger" AS
$BODY$DECLARE
mag01 RECORD;
sql varchar;
mmc RECORD;
BEGIN
RAISE NOTICE 'OLD.mag00pro = %', OLD.mag00pro;
FOR mag01 IN SELECT * FROM mag0100f WHERE mag01pro = OLD.mag00pro LOOP
RAISE NOTICE 'TRIGGER MAG0000F mag01rig = %', mag01.mag01rig || ' ARTICOLO = ' || mag01.mag01art;
SELECT INTO mmc * FROM tabmmc WHERE mmccodicaus=mag01.mag01mmc;
sql:='';
sql:=sql || 'Update mag0500f SET mag05gia = ';

--GIACENZA
IF mmc.mmctipocaus='C' THEN
sql:=sql || '(mag05gia - ' || abs(mag01.mag01qto) || ') ,';
ELSEIF mmc.mmctipocaus='S' THEN
sql:=sql || '(mag05gia + ' || abs(mag01.mag01qto) || ') ,';
END IF;

--GIACENZA INIZIALE QUANTITA'
IF mmc.mmcgiainiqu='+' THEN
sql:=sql || 'mag05giq=(mag05giq - ' || abs(mag01.mag01qto) || ') ,';
ELSEIF mmc.mmcgiainiqu='-' THEN
sql:=sql || 'mag05giq=(mag05giq + ' || abs(mag01.mag01qto) || ') ,';
END IF;
--GIACENZA INIZIALE VALORE'
IF mmc.mmcgiainiva='+' THEN
sql:=sql || 'mag05giv=(mag05giv - ' || abs(mag01.mag01val) || ') ,';
ELSEIF mmc.mmcgiainiva='-' THEN
sql:=sql || 'mag05giv=(mag05giv + ' || abs(mag01.mag01val) || ') ,';
END IF;

--CARICHI QUANTITA'
IF mmc.mmccarichqu='+' THEN
sql:=sql || 'mag05caq=(mag05caq - ' || abs(mag01.mag01qto) || ') ,';
ELSEIF mmc.mmccarichqu='-' THEN
sql:=sql || 'mag05caq=(mag05caq + ' || abs(mag01.mag01qto) || ') ,';
END IF;
--CARICHI ALTRI'
IF mmc.mmccarichal='+' THEN
sql:=sql || 'mag05caa=(mag05caa - ' || abs(mag01.mag01qto) || ') ,';
ELSEIF mmc.mmccarichal='-' THEN
sql:=sql || 'mag05caa=(mag05caa + ' || abs(mag01.mag01qto) || ') ,';
END IF;
--CARICHI VALORE'
IF mmc.mmccarichva='+' THEN
sql:=sql || 'mag05cav=(mag05cav - ' || abs(mag01.mag01val) || ') ,';
ELSEIF mmc.mmccarichva='-' THEN
sql:=sql || 'mag05cav=(mag05cav + ' || abs(mag01.mag01val) || ') ,';
END IF;

--SCARICHI QUANTITA'
IF mmc.mmcscaricqu='+' THEN
sql:=sql || 'mag05scq=(mag05caq - ' || abs(mag01.mag01qto) || ') ,';
ELSEIF mmc.mmcscaricqu='-' THEN
sql:=sql || 'mag05scq=(mag05caq + ' || abs(mag01.mag01qto) || ') ,';
END IF;
--SCARICHI ALTRI'
IF mmc.mmcscarical='+' THEN
sql:=sql || 'mag05saa=(mag05caa - ' || abs(mag01.mag01qto) || ') ,';
ELSEIF mmc.mmcscarical='-' THEN
sql:=sql || 'mag05saa=(mag05caa + ' || abs(mag01.mag01qto) || ') ,';
END IF;
--SCARICHI VALORE'
IF mmc.mmcscaricva='+' THEN
sql:=sql || 'mag05scv=(mag05cav - ' || abs(mag01.mag01val) || ') ,';
ELSEIF mmc.mmcscaricva='-' THEN
sql:=sql || 'mag05scv=(mag05cav + ' || abs(mag01.mag01val) || ') ,';
END IF;

sql:=substring(sql from 1 for (char_length(sql)-1));
sql:=sql || ' Where (mag05art = $$' || mag01.mag01art || '$$) and (mag05mag = ' || OLD.mag00mma || ')';
EXECUTE sql;

END LOOP;
RAISE NOTICE 'FINE TRIGGER MAG0000F';
RETURN NEW;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION mag0000_delete_aggiorna_saldi_mag0500f() OWNER TO postgres;


CREATE OR REPLACE FUNCTION mag0000_update_aggiorna_saldi_mag0500f()
RETURNS "trigger" AS
$BODY$DECLARE
mag01old RECORD;
mag01new RECORD;
sql varchar;
mmc RECORD;
BEGIN

if OLD.mag00mma <> NEW.mag00mma THEN
FOR mag01old IN SELECT * FROM mag0100f WHERE mag01pro = OLD.mag00pro LOOP

SELECT INTO mmc * FROM tabmmc WHERE mmccodicaus=mag01old.mag01mmc;
sql:='';
sql:=sql || 'Update mag0500f SET mag05gia = ';

--GIACENZA
IF mmc.mmctipocaus='C' THEN
sql:=sql || '(mag05gia - ' || abs(mag01old.mag01qto) || ') ,';
ELSEIF mmc.mmctipocaus='S' THEN
sql:=sql || '(mag05gia + ' || abs(mag01old.mag01qto) || ') ,';
END IF;

--GIACENZA INIZIALE QUANTITA'
IF mmc.mmcgiainiqu='+' THEN
sql:=sql || 'mag05giq=(mag05giq - ' || abs(mag01old.mag01qto) || ') ,';
ELSEIF mmc.mmcgiainiqu='-' THEN
sql:=sql || 'mag05giq=(mag05giq + ' || abs(mag01old.mag01qto) || ') ,';
END IF;
--GIACENZA INIZIALE VALORE'
IF mmc.mmcgiainiva='+' THEN
sql:=sql || 'mag05giv=(mag05giv - ' || abs(mag01old.mag01val) || ') ,';
ELSEIF mmc.mmcgiainiva='-' THEN
sql:=sql || 'mag05giv=(mag05giv + ' || abs(mag01old.mag01val) || ') ,';
END IF;

--CARICHI QUANTITA'
IF mmc.mmccarichqu='+' THEN
sql:=sql || 'mag05caq=(mag05caq - ' || abs(mag01old.mag01qto) || ') ,';
ELSEIF mmc.mmccarichqu='-' THEN
sql:=sql || 'mag05caq=(mag05caq + ' || abs(mag01old.mag01qto) || ') ,';
END IF;
--CARICHI ALTRI'
IF mmc.mmccarichal='+' THEN
sql:=sql || 'mag05caa=(mag05caa - ' || abs(mag01old.mag01qto) || ') ,';
ELSEIF mmc.mmccarichal='-' THEN
sql:=sql || 'mag05caa=(mag05caa + ' || abs(mag01old.mag01qto) || ') ,';
END IF;
--CARICHI VALORE'
IF mmc.mmccarichva='+' THEN
sql:=sql || 'mag05cav=(mag05cav - ' || abs(mag01old.mag01val) || ') ,';
ELSEIF mmc.mmccarichva='-' THEN
sql:=sql || 'mag05cav=(mag05cav + ' || abs(mag01old.mag01val) || ') ,';
END IF;

--SCARICHI QUANTITA'
IF mmc.mmcscaricqu='+' THEN
sql:=sql || 'mag05scq=(mag05caq - ' || abs(mag01old.mag01qto) || ') ,';
ELSEIF mmc.mmcscaricqu='-' THEN
sql:=sql || 'mag05scq=(mag05caq + ' || abs(mag01old.mag01qto) || ') ,';
END IF;
--SCARICHI ALTRI'
IF mmc.mmcscarical='+' THEN
sql:=sql || 'mag05saa=(mag05caa - ' || abs(mag01old.mag01qto) || ') ,';
ELSEIF mmc.mmcscarical='-' THEN
sql:=sql || 'mag05saa=(mag05caa + ' || abs(mag01old.mag01qto) || ') ,';
END IF;
--SCARICHI VALORE'
IF mmc.mmcscaricva='+' THEN
sql:=sql || 'mag05scv=(mag05cav - ' || abs(mag01old.mag01val) || ') ,';
ELSEIF mmc.mmcscaricva='-' THEN
sql:=sql || 'mag05scv=(mag05cav + ' || abs(mag01old.mag01val) || ') ,';
END IF;

sql:=substring(sql from 1 for (char_length(sql)-1));
sql:=sql || ' Where (mag05art = $$' || mag01old.mag01art || '$$) and (mag05mag = ' || OLD.mag00mma || ')';
EXECUTE sql;
END LOOP;

FOR mag01new IN SELECT * FROM mag0100f WHERE mag01pro = NEW.mag00pro LOOP
PERFORM inserisci_record_maga_saldi(NEW.mag00mma, mag01new.mag01art::text);
SELECT INTO mmc * FROM tabmmc WHERE mmccodicaus=mag01new.mag01mmc;
sql:='';
sql:=sql || 'Update mag0500f SET mag05gia = ';

--GIACENZA
IF mmc.mmctipocaus='C' THEN
sql:=sql || '(mag05gia + ' || abs(mag01new.mag01qto) || ') ,';
ELSEIF mmc.mmctipocaus='S' THEN
sql:=sql || '(mag05gia - ' || abs(mag01new.mag01qto) || ') ,';
END IF;

--GIACENZA INIZIALE QUANTITA'
IF mmc.mmcgiainiqu='+' THEN
sql:=sql || 'mag05giq=(mag05giq + ' || abs(mag01new.mag01qto) || ') ,';
ELSEIF mmc.mmcgiainiqu='-' THEN
sql:=sql || 'mag05giq=(mag05giq - ' || abs(mag01new.mag01qto) || ') ,';
END IF;
--GIACENZA INIZIALE VALORE'
IF mmc.mmcgiainiva='+' THEN
sql:=sql || 'mag05giv=(mag05giv + ' || abs(mag01new.mag01val) || ') ,';
ELSEIF mmc.mmcgiainiva='-' THEN
sql:=sql || 'mag05giv=(mag05giv - ' || abs(mag01new.mag01val) || ') ,';
END IF;

--CARICHI QUANTITA'
IF mmc.mmccarichqu='+' THEN
sql:=sql || 'mag05caq=(mag05caq + ' || abs(mag01new.mag01qto) || ') ,';
ELSEIF mmc.mmccarichqu='-' THEN
sql:=sql || 'mag05caq=(mag05caq - ' || abs(mag01new.mag01qto) || ') ,';
END IF;
--CARICHI ALTRI'
IF mmc.mmccarichal='+' THEN
sql:=sql || 'mag05caa=(mag05caa + ' || abs(mag01new.mag01qto) || ') ,';
ELSEIF mmc.mmccarichal='-' THEN
sql:=sql || 'mag05caa=(mag05caa - ' || abs(mag01new.mag01qto) || ') ,';
END IF;
--CARICHI VALORE'
IF mmc.mmccarichva='+' THEN
sql:=sql || 'mag05cav=(mag05cav + ' || abs(mag01new.mag01val) || ') ,';
ELSEIF mmc.mmccarichva='-' THEN
sql:=sql || 'mag05cav=(mag05cav - ' || abs(mag01new.mag01val) || ') ,';
END IF;

--SCARICHI QUANTITA'
IF mmc.mmcscaricqu='+' THEN
sql:=sql || 'mag05scq=(mag05caq + ' || abs(mag01new.mag01qto) || ') ,';
ELSEIF mmc.mmcscaricqu='-' THEN
sql:=sql || 'mag05scq=(mag05caq - ' || abs(mag01new.mag01qto) || ') ,';
END IF;
--SCARICHI ALTRI'
IF mmc.mmcscarical='+' THEN
sql:=sql || 'mag05saa=(mag05caa + ' || abs(mag01new.mag01qto) || ') ,';
ELSEIF mmc.mmcscarical='-' THEN
sql:=sql || 'mag05saa=(mag05caa - ' || abs(mag01new.mag01qto) || ') ,';
END IF;
--SCARICHI VALORE'
IF mmc.mmcscaricva='+' THEN
sql:=sql || 'mag05scv=(mag05cav + ' || abs(mag01new.mag01val) || ') ,';
ELSEIF mmc.mmcscaricva='-' THEN
sql:=sql || 'mag05scv=(mag05cav - ' || abs(mag01new.mag01val) || ') ,';
END IF;

sql:=substring(sql from 1 for (char_length(sql)-1));
sql:=sql || ' Where (mag05art = $$' || mag01new.mag01art || '$$) and (mag05mag = ' || NEW.mag00mma || ')';
EXECUTE sql;
END LOOP;

END IF;

RETURN NEW;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION mag0000_update_aggiorna_saldi_mag0500f() OWNER TO postgres;

CREATE OR REPLACE FUNCTION somma_maga_saldi()
RETURNS "trigger" AS
$BODY$DECLARE
magaorig integer;
datmov date;
sql varchar;
mmc RECORD;
mag05 RECORD;
BEGIN

sql:='';
magaorig:=(select mag0000f.mag00mma FROM mag0000f WHERE mag00pro=NEW.mag01pro);
datmov:=(select mag0000f.mag00dmu FROM mag0000f WHERE mag00pro=NEW.mag01pro);
-- RAISE NOTICE 'Magazzino Origine = %', magaorig;
PERFORM inserisci_record_maga_saldi(magaorig, NEW.mag01art::text);
SELECT INTO mag05 * FROM mag0500f WHERE mag05mag=magaorig and mag05art=NEW.mag01art;
-- SELECT INTO mag05 * FROM mag0500f WHERE mag05mag=NEW.mag01mma and mag05art=NEW.mag01art;
SELECT INTO mmc * FROM tabmmc WHERE mmccodicaus=NEW.mag01mmc;

sql:=sql || 'Update mag0500f SET mag05gia = ';

--GIACENZA
IF mmc.mmctipocaus='C' THEN
sql:=sql || '(mag05gia + ' || abs(NEW.mag01qto) || ') ,';
ELSEIF mmc.mmctipocaus='S' THEN
sql:=sql || '(mag05gia - ' || abs(NEW.mag01qto) || ') ,';
END IF;

--GIACENZA INIZIALE QUANTITA'
IF mmc.mmcgiainiqu='+' THEN
sql:=sql || 'mag05giq=(mag05giq + ' || abs(NEW.mag01qto) || ') ,';
ELSEIF mmc.mmcgiainiqu='-' THEN
sql:=sql || 'mag05giq=(mag05giq - ' || abs(NEW.mag01qto) || ') ,';
END IF;
--GIACENZA INIZIALE VALORE'
IF mmc.mmcgiainiva='+' THEN
sql:=sql || 'mag05giv=(mag05giv + ' || abs(NEW.mag01val) || ') ,';
ELSEIF mmc.mmcgiainiva='-' THEN
sql:=sql || 'mag05giv=(mag05giv - ' || abs(NEW.mag01val) || ') ,';
END IF;

--CARICHI QUANTITA'
IF mmc.mmccarichqu='+' THEN
sql:=sql || 'mag05caq=(mag05caq + ' || abs(NEW.mag01qto) || ') ,';
ELSEIF mmc.mmccarichqu='-' THEN
sql:=sql || 'mag05caq=(mag05caq - ' || abs(NEW.mag01qto) || ') ,';
END IF;
--CARICHI ALTRI'
IF mmc.mmccarichal='+' THEN
sql:=sql || 'mag05caa=(mag05caa + ' || abs(NEW.mag01qto) || ') ,';
ELSEIF mmc.mmccarichal='-' THEN
sql:=sql || 'mag05caa=(mag05caa - ' || abs(NEW.mag01qto) || ') ,';
END IF;
--CARICHI VALORE'
IF mmc.mmccarichva='+' THEN
sql:=sql || 'mag05cav=(mag05cav + ' || abs(NEW.mag01val) || ') ,';
ELSEIF mmc.mmccarichva='-' THEN
sql:=sql || 'mag05cav=(mag05cav - ' || abs(NEW.mag01val) || ') ,';
END IF;
--AGGIORNA ULTIMA DATA CARICO'
IF mmc.mmcaggcardt=True THEN
IF mag05.mag05duc IS NULL THEN
sql:=sql || 'mag05duc = (''' || to_char(datmov, 'YYYY-MM-DD') || ''') ,';
ELSE
IF datmov > mag05.mag05duc THEN
sql:=sql || 'mag05duc = (''' || to_char(datmov, 'YYYY-MM-DD') || ''') ,';
END IF;
END IF;
END IF;
--AGGIORNA ULTIMA COSTO CARICO'
IF mmc.mmcaggcarco=True THEN
sql:=sql || 'mag05uci = (''' || abs(NEW.mag01pre) || ''') ,';
END IF;

--SCARICHI QUANTITA'
IF mmc.mmcscaricqu='+' THEN
sql:=sql || 'mag05scq=(mag05caq + ' || abs(NEW.mag01qto) || ') ,';
ELSEIF mmc.mmcscaricqu='-' THEN
sql:=sql || 'mag05scq=(mag05caq - ' || abs(NEW.mag01qto) || ') ,';
END IF;
--SCARICHI ALTRI'
IF mmc.mmcscarical='+' THEN
sql:=sql || 'mag05saa=(mag05caa + ' || abs(NEW.mag01qto) || ') ,';
ELSEIF mmc.mmcscarical='-' THEN
sql:=sql || 'mag05saa=(mag05caa - ' || abs(NEW.mag01qto) || ') ,';
END IF;
--SCARICHI VALORE'
IF mmc.mmcscaricva='+' THEN
sql:=sql || 'mag05scv=(mag05cav + ' || abs(NEW.mag01val) || ') ,';
ELSEIF mmc.mmcscaricva='-' THEN
sql:=sql || 'mag05scv=(mag05cav - ' || abs(NEW.mag01val) || ') ,';
END IF;
--AGGIORNA ULTIMA DATA SCARICO'
IF mmc.mmcaggscadt=True THEN
sql:=sql || 'mag05dus = (''' || to_char(datmov, 'YYYY-MM-DD') || ''') ,';
END IF;

sql:=substring(sql from 1 for (char_length(sql)-1));
sql:=sql || ' Where (mag05art = $$' || NEW.mag01art || '$$) and (mag05mag = ' || magaorig || ')';

EXECUTE sql;

RETURN NEW;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION somma_maga_saldi() OWNER TO postgres;


CREATE OR REPLACE FUNCTION sottrae_maga_saldi()
RETURNS "trigger" AS
$BODY$DECLARE
magaorig integer;
sql varchar;
mmc RECORD;
BEGIN

sql:='';
magaorig:=(select zerosenull(mag0000f.mag00mma) FROM mag0000f WHERE mag00pro=OLD.mag01pro);
RAISE NOTICE 'magaorig = %', magaorig;

IF magaorig > 0 THEN
RAISE NOTICE 'OLD.mag01art = %', OLD.mag01art;
PERFORM inserisci_record_maga_saldi(magaorig, OLD.mag01art::text);
RAISE NOTICE 'dopo inserisci_record_maga_saldi';
SELECT INTO mmc * FROM tabmmc WHERE mmccodicaus=OLD.mag01mmc;

sql:=sql || 'Update mag0500f SET mag05gia = ';

--GIACENZA
IF mmc.mmctipocaus='C' THEN
sql:=sql || '(mag05gia - ' || abs(OLD.mag01qto) || ') ,';
ELSEIF mmc.mmctipocaus='S' THEN
sql:=sql || '(mag05gia + ' || abs(OLD.mag01qto) || ') ,';
END IF;

--GIACENZA INIZIALE QUANTITA'
IF mmc.mmcgiainiqu='+' THEN
sql:=sql || 'mag05giq=(mag05giq - ' || abs(OLD.mag01qto) || ') ,';
ELSEIF mmc.mmcgiainiqu='-' THEN
sql:=sql || 'mag05giq=(mag05giq + ' || abs(OLD.mag01qto) || ') ,';
END IF;
--GIACENZA INIZIALE VALORE'
IF mmc.mmcgiainiva='+' THEN
sql:=sql || 'mag05giv=(mag05giv - ' || abs(OLD.mag01val) || ') ,';
ELSEIF mmc.mmcgiainiva='-' THEN
sql:=sql || 'mag05giv=(mag05giv + ' || abs(OLD.mag01val) || ') ,';
END IF;

--CARICHI QUANTITA'
IF mmc.mmccarichqu='+' THEN
sql:=sql || 'mag05caq=(mag05caq - ' || abs(OLD.mag01qto) || ') ,';
ELSEIF mmc.mmccarichqu='-' THEN
sql:=sql || 'mag05caq=(mag05caq + ' || abs(OLD.mag01qto) || ') ,';
END IF;
--CARICHI ALTRI'
IF mmc.mmccarichal='+' THEN
sql:=sql || 'mag05caa=(mag05caa - ' || abs(OLD.mag01qto) || ') ,';
ELSEIF mmc.mmccarichal='-' THEN
sql:=sql || 'mag05caa=(mag05caa + ' || abs(OLD.mag01qto) || ') ,';
END IF;
--CARICHI VALORE'
IF mmc.mmccarichva='+' THEN
sql:=sql || 'mag05cav=(mag05cav - ' || abs(OLD.mag01val) || ') ,';
ELSEIF mmc.mmccarichva='-' THEN
sql:=sql || 'mag05cav=(mag05cav + ' || abs(OLD.mag01val) || ') ,';
END IF;

--SCARICHI QUANTITA'
IF mmc.mmcscaricqu='+' THEN
sql:=sql || 'mag05scq=(mag05caq - ' || abs(OLD.mag01qto) || ') ,';
ELSEIF mmc.mmcscaricqu='-' THEN
sql:=sql || 'mag05scq=(mag05caq + ' || abs(OLD.mag01qto) || ') ,';
END IF;
--SCARICHI ALTRI'
IF mmc.mmcscarical='+' THEN
sql:=sql || 'mag05saa=(mag05caa - ' || abs(OLD.mag01qto) || ') ,';
ELSEIF mmc.mmcscarical='-' THEN
sql:=sql || 'mag05saa=(mag05caa + ' || abs(OLD.mag01qto) || ') ,';
END IF;
--SCARICHI VALORE'
IF mmc.mmcscaricva='+' THEN
sql:=sql || 'mag05scv=(mag05cav - ' || abs(OLD.mag01val) || ') ,';
ELSEIF mmc.mmcscaricva='-' THEN
sql:=sql || 'mag05scv=(mag05cav + ' || abs(OLD.mag01val) || ') ,';
END IF;

sql:=substring(sql from 1 for (char_length(sql)-1));
sql:=sql || ' Where (mag05art = $$' || OLD.mag01art || '$$) and (mag05mag = ' || magaorig || ')';
EXECUTE sql;
END IF;
RETURN NEW;

END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION sottrae_maga_saldi() OWNER TO postgres;


CREATE TABLE mag0000f
(
mag00pro integer NOT NULL, -- progressivo
mag00rmc integer, -- progressivo registrazione contro magazzino corrisponden
mag00con character varying(10), -- codice contro tabbella pco0000f.pco00kei
mag00fco character varying(1) DEFAULT 'N'::character varying, -- s=movimentodi contro magazzino
mag00dmu date, -- data movimento
mag00ndo character varying(20), -- numero documento
mag00ddu date, -- data documento
mag00ser character varying(3), -- serie magazzino
mag00mma integer, -- magazzino codice
mag00cma integer, -- contro magazzino
mag00nfa character varying(8), -- numero fattura
mag00dfa date, -- data fattura
mag00gio boolean DEFAULT false, -- giornale di magazzino stampato
mag00fat integer, -- collegamento a fatture fat0000f.fat00pro
mag00bol boolean DEFAULT false, -- bollato registro carico/scarico stampato
mag00oin character varying(30),
mag00din timestamp without time zone,
mag00omo character varying(30),
mag00dmo timestamp without time zone,
CONSTRAINT mag0000f_pk PRIMARY KEY (mag00pro),
CONSTRAINT mag00con_ke FOREIGN KEY (mag00con)
REFERENCES pco0000f (pco00key) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITHOUT OIDS;
ALTER TABLE mag0000f OWNER TO postgres;
COMMENT ON COLUMN mag0000f.mag00pro IS 'progressivo';
COMMENT ON COLUMN mag0000f.mag00rmc IS 'progressivo registrazione contro magazzino corrisponden';
COMMENT ON COLUMN mag0000f.mag00con IS 'codice contro tabbella pco0000f.pco00kei';
COMMENT ON COLUMN mag0000f.mag00fco IS 's=movimentodi contro magazzino';
COMMENT ON COLUMN mag0000f.mag00dmu IS 'data movimento';
COMMENT ON COLUMN mag0000f.mag00ndo IS 'numero documento';
COMMENT ON COLUMN mag0000f.mag00ddu IS 'data documento';
COMMENT ON COLUMN mag0000f.mag00ser IS 'serie magazzino';
COMMENT ON COLUMN mag0000f.mag00mma IS 'magazzino codice';
COMMENT ON COLUMN mag0000f.mag00cma IS 'contro magazzino';
COMMENT ON COLUMN mag0000f.mag00nfa IS 'numero fattura';
COMMENT ON COLUMN mag0000f.mag00dfa IS 'data fattura';
COMMENT ON COLUMN mag0000f.mag00gio IS 'giornale di magazzino stampato';
COMMENT ON COLUMN mag0000f.mag00fat IS 'collegamento a fatture fat0000f.fat00pro';
COMMENT ON COLUMN mag0000f.mag00bol IS 'bollato registro carico/scarico stampato';


-- Index: fki_mag00con_ke

-- DROP INDEX fki_mag00con_ke;

CREATE INDEX fki_mag00con_ke
ON mag0000f
USING btree
(mag00con);

-- Index: mag00con_k

-- DROP INDEX mag00con_k;

CREATE INDEX mag00con_k
ON mag0000f
USING btree
(mag00con);

-- Index: mag00dmu_k

-- DROP INDEX mag00dmu_k;

CREATE INDEX mag00dmu_k
ON mag0000f
USING btree
(mag00dmu);

-- Index: mag00fat

-- DROP INDEX mag00fat;

CREATE INDEX mag00fat
ON mag0000f
USING btree
(mag00fat);

-- Index: mag00fco_k

-- DROP INDEX mag00fco_k;

CREATE INDEX mag00fco_k
ON mag0000f
USING btree
(mag00fco);

-- Index: mag00mma_k

-- DROP INDEX mag00mma_k;

CREATE INDEX mag00mma_k
ON mag0000f
USING btree
(mag00mma);

-- Index: mag00rmc_k

-- DROP INDEX mag00rmc_k;

CREATE UNIQUE INDEX mag00rmc_k
ON mag0000f
USING btree
(mag00rmc);

-- Index: mag00ser_k

-- DROP INDEX mag00ser_k;

CREATE INDEX mag00ser_k
ON mag0000f
USING btree
(mag00ser);



-- Trigger: mag0000f_after_update on mag0000f

-- DROP TRIGGER mag0000f_after_update ON mag0000f;

CREATE TRIGGER mag0000f_after_update
AFTER UPDATE
ON mag0000f
FOR EACH ROW
EXECUTE PROCEDURE mag0000_update_aggiorna_saldi_mag0500f();

-- Trigger: mag0000f_before_delete on mag0000f

-- DROP TRIGGER mag0000f_before_delete ON mag0000f;

CREATE TRIGGER mag0000f_before_delete
BEFORE DELETE
ON mag0000f
FOR EACH ROW
EXECUTE PROCEDURE mag0000_delete_aggiorna_saldi_mag0500f();


CREATE TABLE mag0100f
(
mag01pro integer NOT NULL, -- progressivo
mag01rig integer NOT NULL, -- numero rigo
mag01art character varying(13), -- codice articolo
mag01bum character varying(3), -- unita di misura secondaria tabbum
mag01bu2 character varying(3), -- unita di misura secondaria tabbum
mag01qto numeric(11,2) DEFAULT 0, -- quantita origine(quella digitata)
mag01coe numeric(11,2) DEFAULT 1, -- coefficente di conversione
mag01qta numeric(11,2), -- quantita(mag01qto x mag00coe)
mag01pre numeric(11,2), -- valore unitario
mag01val numeric(11,2), -- valore totale
mag01mmc integer, -- causale di magazzino
mag01iva integer, -- codice iva
mag01pft integer, -- fat0100f.fat01pro
mag01sfm integer DEFAULT 0, -- legame con tabbellatabsfm(stato fisico)
mag01ecp character varying(4), -- legame con tabbella ecp(eventuali classi di pericolosit
mag01des character(30), -- descrizione registro
mag01nrc integer, -- progressivo registro di carici/scarico
mag01oin character varying(30),
mag01din timestamp without time zone,
mag01omo character varying(30),
mag01dmo character varying,
mag01rft integer, -- fat0100f.fat01pro
CONSTRAINT mag0100f_pk PRIMARY KEY (mag01pro, mag01rig),
CONSTRAINT pppppp FOREIGN KEY (mag01pro)
REFERENCES mag0000f (mag00pro) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITHOUT OIDS;
ALTER TABLE mag0100f OWNER TO postgres;
COMMENT ON COLUMN mag0100f.mag01pro IS 'progressivo';
COMMENT ON COLUMN mag0100f.mag01rig IS 'numero rigo';
COMMENT ON COLUMN mag0100f.mag01art IS 'codice articolo';
COMMENT ON COLUMN mag0100f.mag01bum IS 'unita di misura secondaria tabbum';
COMMENT ON COLUMN mag0100f.mag01bu2 IS 'unita di misura secondaria tabbum';
COMMENT ON COLUMN mag0100f.mag01qto IS 'quantita origine(quella digitata)';
COMMENT ON COLUMN mag0100f.mag01coe IS 'coefficente di conversione';
COMMENT ON COLUMN mag0100f.mag01qta IS 'quantita(mag01qto x mag00coe)';
COMMENT ON COLUMN mag0100f.mag01pre IS 'valore unitario';
COMMENT ON COLUMN mag0100f.mag01val IS 'valore totale';
COMMENT ON COLUMN mag0100f.mag01mmc IS 'causale di magazzino';
COMMENT ON COLUMN mag0100f.mag01iva IS 'codice iva';
COMMENT ON COLUMN mag0100f.mag01pft IS 'fat0100f.fat01pro';
COMMENT ON COLUMN mag0100f.mag01sfm IS 'legame con tabbellatabsfm(stato fisico)';
COMMENT ON COLUMN mag0100f.mag01ecp IS 'legame con tabbella ecp(eventuali classi di pericolosit';
COMMENT ON COLUMN mag0100f.mag01des IS 'descrizione registro';
COMMENT ON COLUMN mag0100f.mag01nrc IS 'progressivo registro di carici/scarico';
COMMENT ON COLUMN mag0100f.mag01rft IS 'fat0100f.fat01pro';


-- Index: fki_mag0100f_mag00pro_ke

-- DROP INDEX fki_mag0100f_mag00pro_ke;

CREATE INDEX fki_mag0100f_mag00pro_ke
ON mag0100f
USING btree
(mag01pro);

-- Index: fki_pppppp

-- DROP INDEX fki_pppppp;

CREATE INDEX fki_pppppp
ON mag0100f
USING btree
(mag01pro);



-- Trigger: mag0100f_after_insert on mag0100f

-- DROP TRIGGER mag0100f_after_insert ON mag0100f;

CREATE TRIGGER mag0100f_after_insert
AFTER INSERT
ON mag0100f
FOR EACH ROW
EXECUTE PROCEDURE somma_maga_saldi();

-- Trigger: mag0100f_after_update on mag0100f

-- DROP TRIGGER mag0100f_after_update ON mag0100f;

CREATE TRIGGER mag0100f_after_update
AFTER UPDATE
ON mag0100f
FOR EACH ROW
EXECUTE PROCEDURE somma_maga_saldi();

-- Trigger: mag0100f_before_update on mag0100f

-- DROP TRIGGER mag0100f_before_update ON mag0100f;

CREATE TRIGGER mag0100f_before_update
BEFORE UPDATE
ON mag0100f
FOR EACH ROW
EXECUTE PROCEDURE sottrae_maga_saldi();


CREATE TABLE mag0500f
(
mag05mag integer NOT NULL, -- codice magazzino
mag05art character varying(13) NOT NULL, -- codice articolo
mag05gia numeric(16,2) DEFAULT 0, -- giacenza
mag05giq numeric(16,2) DEFAULT 0, -- giacensa iniziale quantita
mag05giv numeric(16,2) DEFAULT 0, -- giacenza iniziale valore
mag05caq numeric(16,2) DEFAULT 0, -- carichi quantita
mag05cav numeric(16,2) DEFAULT 0, -- carichi valore
mag05caa numeric(16,2) DEFAULT 0, -- carichi altri
mag05scq numeric(16,2) DEFAULT 0, -- scarichi quantita
mag05scv numeric(16,2) DEFAULT 0, -- scarichi valore
mag05saa numeric(16,2) DEFAULT 0, -- scarichi altri
mag05duc timestamp without time zone, -- data ultimo carico
mag05uci numeric(16,2) DEFAULT 0, -- ultimo costo imputato
mag05dus timestamp without time zone, -- data ultimo scarico
CONSTRAINT mag0500f_pk PRIMARY KEY (mag05mag, mag05art)
)
WITHOUT OIDS;
ALTER TABLE mag0500f OWNER TO postgres;
COMMENT ON TABLE mag0500f IS 'saldi di magazzino';
COMMENT ON COLUMN mag0500f.mag05mag IS 'codice magazzino';
COMMENT ON COLUMN mag0500f.mag05art IS 'codice articolo';
COMMENT ON COLUMN mag0500f.mag05gia IS 'giacenza';
COMMENT ON COLUMN mag0500f.mag05giq IS 'giacensa iniziale quantita';
COMMENT ON COLUMN mag0500f.mag05giv IS 'giacenza iniziale valore';
COMMENT ON COLUMN mag0500f.mag05caq IS 'carichi quantita';
COMMENT ON COLUMN mag0500f.mag05cav IS 'carichi valore';
COMMENT ON COLUMN mag0500f.mag05caa IS 'carichi altri';
COMMENT ON COLUMN mag0500f.mag05scq IS 'scarichi quantita';
COMMENT ON COLUMN mag0500f.mag05scv IS 'scarichi valore';
COMMENT ON COLUMN mag0500f.mag05saa IS 'scarichi altri';
COMMENT ON COLUMN mag0500f.mag05duc IS 'data ultimo carico';
COMMENT ON COLUMN mag0500f.mag05uci IS 'ultimo costo imputato';
COMMENT ON COLUMN mag0500f.mag05dus IS 'data ultimo scarico';


-- Index: mag05art_k

-- DROP INDEX mag05art_k;

CREATE INDEX mag05art_k
ON mag0500f
USING btree
(mag05art);

-- Index: mag05mag_k

-- DROP INDEX mag05mag_k;

CREATE INDEX mag05mag_k
ON mag0500f
USING btree
(mag05mag);



CREATE TABLE pco0000f
(
pco00key character varying(10) NOT NULL, -- 0101 xxxxx=fornitore 0201=clienti 0301 xxxxx=altri
pco00cod integer, -- codice cliente
pco00tip character varying(1), -- c=cliente f=fornitore a=altro
pco00rag character varying(40), -- regione sociale
pco00rind character varying(30), -- indirizzo
pco00com integer DEFAULT 0, -- codice comune
pco00cit character varying(30), -- citta
pco00cap character varying(5), -- cap
pco00pro character varying(2), -- provincia
pco00cfp character varying(16), -- codice fiscale
pco00piv character varying(11), -- parita iva
pco00pag integer, -- codice pagamento della tabbella pag0000f
pco00ban character varying(10), -- tabbella abicap
pco00con character varying(30), -- cordinate bancarie iban
pco00lis character varying(1), -- codice listino di vendita
pco00not text, -- note
pco00oin character varying(30), -- operatore inserimento
pco00din timestamp without time zone, -- data inserimento
pco00omo character varying(30), -- operatore modifica
pco00dmo timestamp without time zone, -- data modifica
CONSTRAINT pco00key_pk PRIMARY KEY (pco00key)
)
WITHOUT OIDS;
ALTER TABLE pco0000f OWNER TO postgres;
COMMENT ON COLUMN pco0000f.pco00key IS '0101 xxxxx=fornitore 0201=clienti 0301 xxxxx=altri';
COMMENT ON COLUMN pco0000f.pco00cod IS 'codice cliente';
COMMENT ON COLUMN pco0000f.pco00tip IS 'c=cliente f=fornitore a=altro';
COMMENT ON COLUMN pco0000f.pco00rag IS 'regione sociale';
COMMENT ON COLUMN pco0000f.pco00rind IS 'indirizzo';
COMMENT ON COLUMN pco0000f.pco00com IS 'codice comune';
COMMENT ON COLUMN pco0000f.pco00cit IS 'citta';
COMMENT ON COLUMN pco0000f.pco00cap IS 'cap';
COMMENT ON COLUMN pco0000f.pco00pro IS 'provincia';
COMMENT ON COLUMN pco0000f.pco00cfp IS 'codice fiscale';
COMMENT ON COLUMN pco0000f.pco00piv IS 'parita iva';
COMMENT ON COLUMN pco0000f.pco00pag IS 'codice pagamento della tabbella pag0000f';
COMMENT ON COLUMN pco0000f.pco00ban IS 'tabbella abicap';
COMMENT ON COLUMN pco0000f.pco00con IS 'cordinate bancarie iban';
COMMENT ON COLUMN pco0000f.pco00lis IS 'codice listino di vendita';
COMMENT ON COLUMN pco0000f.pco00not IS 'note';
COMMENT ON COLUMN pco0000f.pco00oin IS 'operatore inserimento';
COMMENT ON COLUMN pco0000f.pco00din IS 'data inserimento';
COMMENT ON COLUMN pco0000f.pco00omo IS 'operatore modifica';
COMMENT ON COLUMN pco0000f.pco00dmo IS 'data modifica';




CREATE TABLE tabmmc
(
mmccodicaus integer NOT NULL, -- codice causale magazzino
mmcdesccaus character(30), -- descrizione causale
mmctipocaus character varying(1), -- a=altro c=carico s=scarico
mmcrelacaus character varying(1), -- c=clienti f=fornitori a=altri
mmcaltrmaga boolean, -- richiede l' inserimento de contro magazzino e contro cau
mmcaltrcaus integer, -- contro causale
mmcgiainiqu character varying(1), -- giacenza iniziale quantita + -blank
mmcgiainiva character varying(1), -- giacensa iniziale valore + -blank
mmccarichqu character varying(1), -- carichi quantita + -blank
mmccarichal character varying(1), -- carichi altri+ -blank
mmccarichva character varying(1), -- carichi valore + -blank
mmcaggcardt boolean, -- aggiorna ultima data carico (s/n)
mmcaggcarco boolean, -- aggiorna ultimo costo carico(s/n)
mmcscaricqu character varying(1), -- scarici quantita+ - blank
mmcscarical character varying(1), -- scarici altri+ -blank
mmcscaricva character varying(1), -- scarico a valore+ -blank
mmcaggscadt boolean, -- aggiorna ultima data scarico(s/n)
mmcdataorac timestamp without time zone, -- data ora creazione
mmcutentrec character varying(30), -- utente creazione
mmcdataoram timestamp without time zone, -- data ora modifica
mmcutentemo character varying(30), -- utente modifica
CONSTRAINT tabmmc_pk PRIMARY KEY (mmccodicaus)
)
WITHOUT OIDS;
ALTER TABLE tabmmc OWNER TO postgres;
COMMENT ON COLUMN tabmmc.mmccodicaus IS 'codice causale magazzino';
COMMENT ON COLUMN tabmmc.mmcdesccaus IS 'descrizione causale';
COMMENT ON COLUMN tabmmc.mmctipocaus IS 'a=altro c=carico s=scarico';
COMMENT ON COLUMN tabmmc.mmcrelacaus IS 'c=clienti f=fornitori a=altri';
COMMENT ON COLUMN tabmmc.mmcaltrmaga IS 'richiede l'' inserimento de contro magazzino e contro cau';
COMMENT ON COLUMN tabmmc.mmcaltrcaus IS 'contro causale';
COMMENT ON COLUMN tabmmc.mmcgiainiqu IS 'giacenza iniziale quantita + -blank';
COMMENT ON COLUMN tabmmc.mmcgiainiva IS 'giacensa iniziale valore + -blank';
COMMENT ON COLUMN tabmmc.mmccarichqu IS 'carichi quantita + -blank';
COMMENT ON COLUMN tabmmc.mmccarichal IS 'carichi altri+ -blank';
COMMENT ON COLUMN tabmmc.mmccarichva IS 'carichi valore + -blank';
COMMENT ON COLUMN tabmmc.mmcaggcardt IS 'aggiorna ultima data carico (s/n)';
COMMENT ON COLUMN tabmmc.mmcaggcarco IS 'aggiorna ultimo costo carico(s/n)';
COMMENT ON COLUMN tabmmc.mmcscaricqu IS 'scarici quantita+ - blank';
COMMENT ON COLUMN tabmmc.mmcscarical IS 'scarici altri+ -blank';
COMMENT ON COLUMN tabmmc.mmcscaricva IS 'scarico a valore+ -blank';
COMMENT ON COLUMN tabmmc.mmcaggscadt IS 'aggiorna ultima data scarico(s/n)';
COMMENT ON COLUMN tabmmc.mmcdataorac IS 'data ora creazione';
COMMENT ON COLUMN tabmmc.mmcutentrec IS 'utente creazione';
COMMENT ON COLUMN tabmmc.mmcdataoram IS 'data ora modifica';
COMMENT ON COLUMN tabmmc.mmcutentemo IS 'utente modifica';
taffy2 è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2009, 14:00   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Il DUMP del DB?

Comunque io sconsiglio l'uso dei trigger per problemi come questo, soprattutto se fatti con Dynamic SQL...

Userei piuttosto una vista che, sulla base delle tabelle originali in cui ci sono le informazioni, calcola quanto desiderato.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2009, 18:09   #3
taffy2
Junior Member
 
Iscritto dal: Jul 2009
Messaggi: 2
Ecco il DUMP, comunque tabelle, funzioni e trigger erano inclusi nello script Sql. Per quanto riguarda la Vista, se sono pochi records allora il discorso potrebbe funzionare. Sicuramente una tabella di appoggio è molto più performante per calcolare un saldo al posto di leggere migliaia di records per calcolarsi il saldo. Il DUMP contiene già i dati, tutto il resto delle tabelle non contiene ancora nulla e mancano gli indici, ma le tabelle interessate sono pronte per utilizzarle con i trigger. Il DATABASE lo sto completando ancora, ho solo visto che i TRIGGER non mi funzionano come io vorrei. La qualsiasi cosa fai sul dettaglio (mag0100f) è funzionante. Anche sul Master (mag0000f) se cambi il magazzino, la tabella mag0500f si aggiorna correttamente. Solo se cancello il record in testata (mag0000f), non ottengo l'effetto desiderato. Ti ringrazio anticipatamente della collaborazione.
Allegati
File Type: zip tasagest.zip (18.0 KB, 0 visite)

Ultima modifica di taffy2 : 08-07-2009 alle 18:15.
taffy2 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Il satellite cinese Jilin-1 ha fotografa...
Arrivano i nuovi iPhone ed è subi...
Il chip N1 degli iPhone 17 supporta il W...
La cinese Space Pioneer riesce a eseguir...
Xiaomi copia Apple: arriva la serie 17 e...
A 10 anni dalla prima rilevazione delle ...
Samsung annuncia il rilascio della One U...
La nuova MG4 spopola: già 26.000 ...
Monopattini pericolosi? Secondo una rice...
La Commissione Europea respinge le richi...
The Witcher: ecco le prime immagini dell...
Mitsubishi Electric verso l'acquisizione...
Pasticcio Tesla: nessuno vuole il Cybert...
Qualcomm, il nuovo SoC top di gamma &egr...
La memoria che cambierà l'AI: il ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v