Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2004, 10h06   #1
Futur Membre du Club
 
Inscription : novembre 2002
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 17
Points : 15
Points : 15
Par défaut TRIGGERS - String truncation ou numeric overflow

J'ai créé des triggers d'update sur IB 6 (version open source).
Sur plusieurs dizaines de tables, ce type trigger marche, mais pas sur mes trois plus grandes tables.
J'aimerais savoir si les triggers sont limités en taille, ou alors les concaténations de chaînes de type varchar.
En effet, à l'exécution du trigger, lorsque je fais un update sur ma table, j'ai un string truncation.

Voici le code de mon trigger.

Note : TRIM2 et QUOTEDSTR sont deux UDFs fournies par défaut par interbase.

Voilà, si quelqu'un peut m'aider, merci, sinon, tant pis !

Code :
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
26
27
28
29
30
31
32
33
34
CREATE TRIGGER UTILISATEUR_UPDATE FOR UTILISATEUR
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
INSERT INTO REPLICATION VALUES(
GEN_ID(MON_GEN,1),
'UPDATE UTILISATEUR SET UTILISATEUR_NUM=
'||TRIM2(NEW.UTILISATEUR_NUM)||',FONCTION_NUM=
'||TRIM2(NEW.FONCTION_NUM)||',UTILISATEUR_NOM=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_NOM))||',UTILISATEUR_PRENOM=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_PRENOM))||',UTILISATEUR_ADR_VILLE=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_ADR_VILLE))||',UTILISATEUR_ADR1=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_ADR1))||',UTILISATEUR_ADR2=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_ADR2))||',UTILISATEUR_CODE_POSTAL=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_CODE_POSTAL))||',UTILISATEUR_PAYS=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_PAYS))||',UTILISATEUR_MAIL_PRO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MAIL_PRO))||',UTILISATEUR_TEL_PRO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_TEL_PRO))||',UTILISATEUR_MOBILE_PRO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MOBILE_PRO))||',UTILISATEUR_FAX_PRO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_FAX_PRO))||',UTILISATEUR_MAIL_PERSO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MAIL_PERSO))||',UTILISATEUR_TEL_PERSO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_TEL_PERSO))||',UTILISATEUR_MOBILE_PERSO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_MOBILE_PERSO))||',UTILISATEUR_FAX_PERSO=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_FAX_PERSO))||',UTILISATEUR_DATE_CREATION=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_DATE_CREATION))||',UTILISATEUR_DATE_MODIF=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_DATE_MODIF))||',UTILISATEUR_NOTES=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_NOTES))||',TITRE_NUM=
'||TRIM2(NEW.TITRE_NUM)||',UTILISATEUR_SEXE=
'||TRIM2(NEW.UTILISATEUR_SEXE)||',UTILISATEUR_LOGIN=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_LOGIN))||',UTILISATEUR_PASSWORD=
'||QUOTEDSTR(TRIM2(NEW.UTILISATEUR_PASSWORD))||',PROFIL_NUM=
'||TRIM2(NEW.PROFIL_NUM)||
'WHERE UTILISATEUR_NUM='||Old.UTILISATEUR_NUM);
end
Edité par Barbibulle : merci de mettre le code entre les balises code, celà le rend plus lisible et donc sera plus attrayant. sinon tant pis...
AlBoLeToNo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2004, 10h53   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Ce message d'erreur arrive en général quand on essaye d'affecter une chaine plus grande que ce que peux contenir la colonne.

Dans votre table REPLICATION combien fait la colonne varchar ?
Pour plus de sécurité (mais avec le risque d'enregister qu'une partie de l'information) vous pouvez coupper à la valeur max de votre varchar la chaine affecté.

Sinon celà peux provenir également de vos UDF car en entrée elle accepent un varchar d'une certaine longueur et donc si vous essayez de lui envoyer plus vous aurez ce message...

Donc vérifiez la déclaration de vos deux fonctions UDF pour voir sir celà ne vient pas de ça non plus.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2004, 12h12   #3
Futur Membre du Club
 
Inscription : novembre 2002
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 17
Points : 15
Points : 15
Par défaut [résolution partielle ] pb String truncation dans triggers

Vous avez entièrement raison.
Je me suis rendu compte que ma table réplication est suffisamment grande (5000 caractères).
Ma déclaration d'udf est également suffisamment grande.
Par contre, ça doit venir du fait que j'utilise un PChar, que doit on utiliser comme type de chaîne. Parce que je viens de me rendre compte que ça ne marche pas quand ça dépasse 256 caractères.

En tout cas, merci pour votre réponse qui m'a bien aiguillé.
AlBoLeToNo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2004, 12h31   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Par défaut Re: [résolution partielle ] pb String truncation dans trigge

Citation:
Envoyé par AlBoLeToNo
Par contre, ça doit venir du fait que j'utilise un PChar, que doit on utiliser comme type de chaîne. Parce que je viens de me rendre compte que ça ne marche pas quand ça dépasse 256 caractères.
de quel PCHAR parlez vous ? C'est dans votre programme que ca ne fonctionne pas et non dans le trigger ?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2004, 12h35   #5
Futur Membre du Club
 
Inscription : novembre 2002
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 17
Points : 15
Points : 15
Par défaut [résolu] String truncation

Oui en fait, dans mon écriture de l'udf, j'avais une fonction qui prenait un cstring 5000. Ca, c'était bon. Mais par contre, derrière, j'avais codé une DLL qui prenait un PChar en paramètre !!! Soit pas plus de 256 !
J'ai donc remplacé le PChar par un array [1..5001] et tout va bien !!!
Ouf !
Je suis vraiment nul !
Merci beaucoup en tout cas !
AlBoLeToNo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2004, 12h58   #6
Membre confirmé
 
Avatar de TMuet
 
Homme Olivier Muet
Responsable de service informatique
Inscription : septembre 2003
Messages : 222
Détails du profil
Informations personnelles :
Nom : Homme Olivier Muet
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 222
Points : 254
Points : 254
Par défaut Re: [résolu] String truncation

Citation:
Envoyé par AlBoLeToNo
PChar en paramètre !!! Soit pas plus de 256 !
Je suis vraiment nul !


Un PChar n'a pas à proprement parler de taille, sinon celle nécessaire dans l'OS pour allouer un pointeur ; car un PChar est bel et bien un pointeur

Il ne fait donc pas 256 ou 5000, il fait 4 en XP-32 bits et pas 1 de plus.
Par contre, il se peut qu'il pointe sur une zone de taille 256 ou 5000

Mais en tous cas, un PChar ne peut être la cause du problème de taille dont tu parles.
TMuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h44.


 
 
 
 
Partenaires

Hébergement Web