Vous n'êtes pas identifié(e).

#1 Général » trigger entre deux tables : partage d'id » 08/08/2013 14:32:15

elsane2908
Réponses : 2

Bonjour à tous,

après plusieurs tentatives et des recherches sur mon ami google je reste sur un échec ! je me tourne alors vers vous pour m'aider.

j'ai deux tables avec plusieurs champs mais je ne cite que ceux qui m'intéresse :
sb_data_44 avec comme identifiant rowid(serial) et un champ id_tblcommerce (integer)
tbl_commerce_test avec un champ identifiant id_commerce(serial) et un champ rowid_tbldata44

mon objectif est que chaque table reçoit l'identifiant de l'autre après une insertion (le tout en gérant éventuellement des accès simultanés)
Hors je n'arrive pas à recevoir l'id ( id_commerce) de la table tbl_commerce_test dans la table sb_data_44 (sur le champ id_tblcommerce).
tbl_commerce_test reçoit bien lui l'identifiant de sb_data_44.

je suis sur un système figé où les données sont utilisées et gérées dans par un premier logiciel métier, et dont l'organisation ne permet d'être attaquée par un second logiciel ... d'où mon besoin de faire coincider les identifiants.

je soupçonne mon update en fin de fonction, je l'ai placé ailleurs mais rien ...

voici ma fonction

CREATE OR REPLACE FUNCTION base_sig.fct_synchro()
  RETURNS trigger AS
$BODY$
DECLARE idc integer;
DECLARE rid_dyn integer;

BEGIN
 
IF (TG_OP = 'DELETE') THEN
		DELETE FROM sch_t1_commerce.tbl_commerce_test WHERE rowid_tbldata44=OLD.rowid;
		IF NOT FOUND THEN RETURN NULL; END IF;
		RETURN OLD;
ELSIF (TG_OP = 'INSERT') THEN
		INSERT INTO sch_t1_commerce.tbl_commerce_test (rowid_tbldata44) VALUES (rid_dyn)	;

		RETURN NEW;	
END IF;
	
RETURN NULL; 


SELECT tbl_commerce_test.id_commerce into idc FROM sch_t1_commerce.tbl_commerce_test, base_sig.sb_data_44 WHERE tbl_commerce_test.rowid_tbldata44=rid_dyn;
UPDATE base_sig.sb_data_44 SET id_tblcommerce = idc WHERE sb_data_44.rowid=rid_dyn;


END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION base_sig.fct_synchro()
  OWNER TO postgres;

et mon trigger :

CREATE TRIGGER tg_synchro
AFTER INSERT OR UPDATE OR DELETE
ON base_sig.sb_data_44
FOR EACH ROW
EXECUTE PROCEDURE base_sig.fct_synchro();
ALTER TABLE base_sig.sb_data_44;

Merci pour vos conseils

#3 Re : Général » Pg en local, connection par d'autres machines en réseau sur la base » 06/09/2011 10:50:41

Merci pour vos réponses !

donc ok pour la liaison Pg <-> Access wink
Pour confirmation, la base en "local" (rappel, pg non installé sur un serveur) sera donc accessible par Access installé sur un autre poste en réseau ?

#4 Général » Pg en local, connection par d'autres machines en réseau sur la base » 06/09/2011 08:52:14

elsane2908
Réponses : 7

Bonjour,

Suis débutant, milles excuses si je pose des questions (débiles ?) dont les réponses peuvent être evidentes ...

Le contexte :
- pg installé en local sur une machine en réseau (en local car pas de serveur disponible)
- Access installé sur d'autres machines dans ce réseau pour consultation des bases pg (possible ça ?)
- Windows xp comme OS

Mes questions :
- Pourrais-je me connecter aux bases pg via Access (odbc ?)
- les utilisateurs auront-ils un accès aux bases ? pour cela, faut-il stocker les bases ailleurs que dans le répertoire Data (d'après ce que j'ai lu)
- donc, le simple fait de stocker les bases dans un autre répertoire que Date dans le réseau permettra-t-il de permettre une connection aux bases

Merci !!

Pied de page des forums

Propulsé par FluxBB