Précédent   Forum du club des développeurs et IT Pro > Bases de données > Autres SGBD > InterBase
InterBase Forum d'entraide sur le SGBD InterBase de Codegear. Avant de poster -> F.A.Q Interbase, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/05/2012, 17h20   #1
DUALTECH
Invité de passage
 
Homme Dual Tech
Développeur informatique
Inscription : mai 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Dual Tech
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2012
Messages : 15
Points : 3
Points : 3
Par défaut Trigger PRIMARY KEY ne fonctionne pas

Quelqu’un me dit pou quoi les Trigger des PRIMARY KEY ne fonctionnent pas même sur IBCONSOL
Voila ma table
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
CREATE DOMAIN "AUTO_INC" AS INTEGER;
CREATE DOMAIN "CAR_COURT" AS VARCHAR(30);
CREATE DOMAIN "HEURE" AS TIME;
CREATE DOMAIN "LA_DATE" AS DATE;
CREATE DOMAIN "MONNAIE" AS NUMERIC(15, 2)
	 DEFAULT 0;
CREATE DOMAIN "NOTE" AS VARCHAR(300);
CREATE DOMAIN "NUMERO" AS INTEGER
	 DEFAULT 0;
CREATE DOMAIN "UN_CAR" AS VARCHAR(1);
 
CREATE TABLE "PROFORMA" 
(
  "ID_PROFORMA"	"AUTO_INC" NOT NULL,
  "CODE_MODE_PAIEMENT"	"UN_CAR",
  "USERNAME"	"CAR_COURT",
  "CODE_OPERATEUR"	VARCHAR(10),
  "NUM_PROFORMA"	"NUMERO",
  "DATE_PROFORMA"	"LA_DATE",
   "HEURE_PROFORMA"	"HEURE",
  "OBS_PROFORMA"	"NOTE",
  "CLOS_PROFORMA"	"UN_CAR",
  "TYPE_PRIX_PROFORMA"	"UN_CAR",
CONSTRAINT "PK_PROFORMA" PRIMARY KEY ("ID_PROFORMA"));
Voila le Trigger qui fonctionne correctement
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SET  TERM ^ ;
CREATE TRIGGER "INSERTION_PROFORMA" FOR "PROFORMA" 
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable num_proforma integer;
begin
     IF (new.ID_PROFORMA IS NULL) then
     new.ID_PROFORMA = GEN_ID(S_PROFORMA, 1);
     IF (new.date_proforma IS NULL) then new.date_proforma = 'today';
     IF (new.heure_proforma IS NULL) then new.heure_proforma = 'now';
     SELECT max(num_proforma) FROM proforma
       WHERE num_proforma BETWEEN ((extract(year FROM new.date_proforma)) * 10000 + 1) AND
                                  ((extract(year FROM new.date_proforma)) * 10000 + 9999)
     INTO :num_proforma;
     IF (:num_proforma IS NULL) then
     new.num_proforma = ((extract(year FROM new.date_proforma)) * 10000 + 1);
     else new.num_proforma = :num_proforma + 1;
end
 ^
enfin le trigger qui ne fonctionne pas

Code sql :
1
2
3
4
5
6
7
8
9
CREATE TRIGGER "TI_PROFORMA" FOR "PROFORMA" 
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable numrows integer;
begin
      IF (new.ID_PROFORMA IS NULL) then
     new.ID_PROFORMA = GEN_ID(S_PROFORMA, 1);
end
 ^
merci a tous
DUALTECH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2012, 18h28   #2
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 876
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 876
Points : 11 750
Points : 11 750
Que signifie qu'il ne fonctionne pas ?
Il y a une erreur de compilation ? Une erreur d'exécution ? Un résultat qui n'est pas celui attendu ?
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises
[code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2012, 11h18   #3
DUALTECH
Invité de passage
 
Homme Dual Tech
Développeur informatique
Inscription : mai 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Dual Tech
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2012
Messages : 15
Points : 3
Points : 3
Merci al1_24 pour ta réponse
Ne fonctionne pas signifie que les Triggers n’ajouter pas les valeurs au PRIMARY KEY depuis le générateur
Mais avec les d'autre champs (NoN PRIMARY KEY) se dernier fonctionne
Voila la commande
Code sql :
1
2
IF (new.ID_PROFORMA IS NULL) then
     new.ID_PROFORMA = GEN_ID(S_PROFORMA, 1);
DUALTECH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2012, 09h17   #4
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 211
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 4 211
Points : 7 270
Points : 7 270
si par
Citation:
n’ajouter pas les valeurs au PRIMARY KEY depuis le générateur
il faut comprendre "ne modifie pas la valeur du champ défini comme PRIMARY KEY" il faudrait peut être déjà vérifié que la valeur de new.ID_PROFORMA soit bien nulle vant d'affirmer que le trigger ne fonctionne pas .

un simple test avec un Insert en désactivant le TRIGGER "INSERTION_PROFORMA" , et sans indiquer de valeur a ID_PROFORMA devrait le vérifier

Code par exemple :
1
2
 
INSERT INTO PROFORMA(CODE_OPERATEUR) VALUES ('TEST')
bien sur ce code suppose qu'il n'y a aucune contraintes
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2012, 16h06   #5
DUALTECH
Invité de passage
 
Homme Dual Tech
Développeur informatique
Inscription : mai 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Homme Dual Tech
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2012
Messages : 15
Points : 3
Points : 3
Merci SergioMaster mais je n’ai pas compris
Est-ce qu' il ya une méthode professionnelle pour rempiler les ID depuis les générateur ?
DUALTECH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h06.


 
 
 
 
Partenaires

Hébergement Web