IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[8i][forms 6i] charger un bloc avec un curseur


Sujet :

Oracle

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut [8i][forms 6i] charger un bloc avec un curseur
    Bonjour tout le monde,

    Je développe des formulaires sous forms 6i pour une base en 8i.
    Le formulaire sur lequel je travaille en ce moment est découpé en plusieurs onglets, chacun d'entre eux correspondant à un bloc de données et une table distincte.

    Lors de la création d'un nouvel enregistrement, il faut que je "précharge" un de ces onglets (associé à la table B2830) : en fonction du résultat d'une requête (un curseur) j'effectue une suite de CREATE_RECORD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    PROCEDURE CHARGER_B0337 IS
    	CURSOR LCu_b0337_b0300 IS
    		SELECT   TA_LIB, TA_CODE
    		FROM     B0300, B0337
    		WHERE    TA_TABLE = '37'
    		AND      TA_CODE  = T37_CODE
    		AND      TA_ACTI  = '0'
    		AND      T37_SPECIFCLIENT = 'O'
    		ORDER BY T37_ORDRE;
    	LRT_b0337_b0300 LCu_b0337_b0300%ROWTYPE;
    BEGIN
    	GO_BLOCK('B2830');
    	FIRST_RECORD;
    	OPEN LCu_b0337_b0300;
    	LOOP
    		FETCH LCu_b0337_b0300 INTO LRT_b0337_b0300;
    		EXIT WHEN LCu_b0337_b0300%NOTFOUND;
    		CREATE_RECORD;
    		:B2830.SPEC_CODE := :B2820.SPEC_CODE;
    		:B2830.T37_CODE := LRT_b0337_b0300.TA_CODE;
    		:B2830.TA_LIB := LRT_b0337_b0300.TA_LIB;
    MSG_BOX('TA_LIB = ' || :B2830.TA_LIB); -- TMP
    	END LOOP;
    	CLOSE LCu_b0337_b0300;
    	FIRST_RECORD;
    	GO_ITEM('B2820.ST_CODE');
    END;
    J'ai exécuté la requête du curseur sous SQLPlus => elle ramène 23 lignes (dont aucune ne contient une colonne NULL).
    L'appel à MSG_BOX que j'ai marqué "TMP" m'affiche bien les valeurs successives retournées par le curseur et pourtant...

    l'onglet ne contient finalement qu'un seul record qui est le dernier ramené par la requête.

    Quelle erreur dans mon code ou de paramétrage explique la "disparition" (l'écrasement successif ?) des 22 autres records ?

    J'ai utilisé cette technique dans un autre écran et en comparant je ne trouve pas de différence mais je ne dois pas chercher au bon endroit.

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Remplace create_record par next_record.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par plaineR
    Remplace create_record par next_record.
    Aucune différence.
    Une autre idée ?

    Si jamais ça peut te donner une indication sur la cause de mon erreur voici le code que j'utilise dans l'écran où le préchargement fonctionne "sans écrasement" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    PROCEDURE CHARGER_B0337 IS
    	LConn_conn_id EXEC_SQL.CONNTYPE;
    	LCu_b0337	EXEC_SQL.CURSTYPE;
    	LC_sql_stmt VARCHAR2(500);
     
    	LI_nIgn PLS_INTEGER;
    	LC_ta_lib VARCHAR2(30);
    	LC_ta_code VARCHAR2(5);
    	LC_t37_type VARCHAR2(1);
    BEGIN
    	GO_BLOCK('B2801');
     
    	LConn_conn_id := EXEC_SQL.DEFAULT_CONNECTION;
    	LCu_b0337 := EXEC_SQL.OPEN_CURSOR(LConn_conn_id);
    	LC_sql_stmt := 'SELECT   TA_LIB, TA_CODE, T37_TYPE ' ||
    								 'FROM     B0300, B0337 ' ||
    								 'WHERE    TA_TABLE = ''37'' ' ||
    								 'AND      TA_CODE  = T37_CODE ' ||
    								 'AND      TA_ACTI  = ''0'' ' ||
    								 'AND      T37_CODEOPERANDE1 IS NULL ';
    	IF :B2800.AN_TYPE = 'C' THEN
    		LC_sql_stmt := LC_sql_stmt ||
    								 'AND      T37_ECHANTILLON = ''O'' ';
    	ELSIF :B2800.AN_TYPE = 'G' THEN
    		LC_sql_stmt := LC_sql_stmt ||
    								 'AND      T37_AGRE = ''O'' ';
    	ELSIF :B2800.AN_TYPE = 'N' THEN
    		LC_sql_stmt := LC_sql_stmt ||
    								 'AND      T37_ANALYSE = ''O'' ';
    	END IF;
    	LC_sql_stmt := LC_sql_stmt || 'ORDER BY T37_ORDRE';
     
    	EXEC_SQL.PARSE(LConn_conn_id, LCu_b0337, LC_sql_stmt);
    	EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_b0337, 1, LC_ta_lib, 30);
    	EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_b0337, 2, LC_ta_code, 5);
    	EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_b0337, 3, LC_t37_type, 1);
     
    	LI_nIgn := EXEC_SQL.EXECUTE(LConn_conn_id, LCu_b0337);
    	WHILE ( EXEC_SQL.FETCH_ROWS(LConn_conn_id, LCu_b0337) > 0 ) LOOP
    		CREATE_RECORD;
     
    		EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_b0337, 1, :B2801.TA_LIB);
    		EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_b0337, 2, :B2801.T37_CODE);
    		EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_b0337, 3, :B2801.AN1_TYPE);
    	END LOOP;
     
    	EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_b0337);
    	EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
     
    	FIRST_RECORD;
    	GO_FIELD('B2800.T48_LIEU');
    END;

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If :SYSTEM.RECORD_STATUS <> 'NEW' Then
       Create_Record ;
    End if ;

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    1. Tu n'as pas de message d'erreur ?
    2. Tu n'as pas des champs qui ont la propriété required à true et qui ne seraient pas renseignés ?

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par SheikYerbouti
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If :SYSTEM.RECORD_STATUS <> 'NEW' Then
       Create_Record ;
    End if ;
    J'ai mis ton code, supprimé les autres appels à CREATE_RECORD et NEXT_RECORD => même résultat.

    Citation Envoyé par plaineR
    1. Tu n'as pas de message d'erreur ?
    2. Tu n'as pas des champs qui ont la propriété required à true et qui ne seraient pas renseignés ?
    1. Aucun message d'erreur aussi bien en débug qu'en production
    2. Voici la description du bloc B2830 :
    nom / required ? / base table ?
    SPEC_CODE / O / O
    T37_CODE / O / O
    TA_LIB / N / N
    SPEC_CIBLE / N / O
    SPEC_MIN / N / O
    SPEC_MAX

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Cela veut dire qu'il n'arrive pas a valider l'enregistrement et ecrase donc toujours le même !

    le trigger ON-ERROR existe ?

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par SheikYerbouti
    Cela veut dire qu'il n'arrive pas a valider l'enregistrement et ecrase donc toujours le même !

    le trigger ON-ERROR existe ?
    Je comprends ton raisonnement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    DECLARE 
      errcode     NUMBER        := ERROR_CODE; 
      dbmserrcode NUMBER; 
      dbmserrtext VARCHAR2(200); 
    BEGIN 
    	dbmserrcode := DBMS_ERROR_CODE; 
      dbmserrtext := DBMS_ERROR_TEXT; 
      IF errcode = 40508 THEN 
        /* 
        ** Form Builder a eu un problème lors de l'INSERTion. 
        ** Rechercher dans la base de données l'erreur à l'origine
        ** du problème. 
        */ 
     
        IF dbmserrcode = -1438 THEN 
          /* 
          ** ORA-01438 : "valeur trop grande pour la colonne" 
          */ 
          Message('Nombre trop grand. Recommencez.'); 
        ELSIF dbmserrcode = -1400 THEN 
          /* 
          ** ORA-01400 : "Colonne obligatoire NULL"
          */ 
          Message('Vous avez oublié de fournir une valeur. Recommencez.'); 
        ELSE 
          /* 
          ** Imprimer un message générique comportant 
          ** le message d'erreur de la base de données. 
          */     
          Message('Echec d''insertion dû à '||dbmserrtext);
        END IF; 
      END IF;  
     
    	:GLOBAL.ERR := NULL;
     
    	IF errcode = 40208 OR errcode = 41009 OR errcode = 40200 OR errcode = 40700 THEN 
      	GOTO OK;
    	END IF;
    	IF errcode = 50004 OR errcode = 50002 OR errcode = 50003 OR errcode = 40209 
    	 																												OR errcode = 50026 THEN
      	MESSAGE('Format invalide',NO_ACKNOWLEDGE);
      	:GLOBAL.ERR := 'X';
      	GOTO OK;
    	END IF;
    	IF errcode = 40202 THEN
      	MESSAGE('Donnée obligatoire',NO_ACKNOWLEDGE);
      	:GLOBAL.ERR := 'X';
      	GOTO OK;
    	END IF;
    	MSG_BOX (MESSAGE_TYPE||'-'||TO_CHAR(MESSAGE_CODE)||' '||MESSAGE_TEXT);
          :GLOBAL.AFF_ERR := 'N';
    <<OK>>
    	NULL;
    END;
    Au fait merci à vous 2 de votre rapidité.
    Vous ne pouvez pas savoir à quel point vos remarques me font progresser.

    [EDIT]
    J'ai désactivé la contrainte sur la colonne B2830.T37_CODE et passé la propriété required de l'item correspondant à 'Non' et pourtant la fonction de chargement produit encore le même résultat (pas mieux, pas moins bien, pas de message d'erreur)
    [/EDIT]

  9. #9
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Imagine-toi que les questions nous font également progresser

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Dans le même ordre d'idée voici l'ordre DML de création de la table B2830 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE B2830
    (
      SPEC_CODE  VARCHAR2(8) NOT NULL,
      T37_CODE   VARCHAR2(5) NOT NULL,
      SPEC_CIBLE NUMBER(8, 4),
      SPEC_MIN   NUMBER(8, 4),
      SPEC_MAX   NUMBER(8, 4),
      CONSTRAINT UNIQ_SPEC_CODE_T37_CODE UNIQUE (SPEC_CODE, T37_CODE)
    );
    la clause d'unicité du couple (SPEC_CODE, T37_CODE) ne devrait pas poser de problème au CREATE_RECORD / NEXT_RECORD puisque cette condition est toujours satisfaite, non ?

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Pouvez-vous virer temporairement le trigger ON-ERROR ? (il suffit de le renommer en ON_ERROR, par exemple)

  12. #12
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Es-tu sûr de ne pas déclenchez une des erreurs 40208, 40200, 41009 et 40700 ? Vu que tu les trappes cela pourrait expliquer que tu n'aies pas d'erreur?
    Notamment 40200 : tous tes champs sont insert allowed, update allowed ? ton bloc également ?

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    On s'approche de la cause : en remplaçant le code du trigger ON-ERROR (je ne peux pas le renommer car il résulte d'une référence sur un objet de migration), il me lève 2 erreurs ORA-01403 et FRM-40202

    Ceci dit, ces erreurs ne sont peut être pas liés à cette fonction et il va falloir que je détermine l'origine.
    Je vous tiens au courant rapidement dès que j'en sais plus.

    Néanmoins, il me semble que le code de mon trigger n'est pas en contradiction avec la structure de ma table : les contraintes d'unicité et de nullité sont respectées à chaque insertion (CREATE_RECORD / NEXT_RECORD).

    Quel est votre avis sur ce point ?

  14. #14
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    D'où vient l'erreur when_no_data_found ? A mon avis c'est la source de l'erreur, c'est peut-être à cause d'elle qu'un champ obligatoire n'est pas renseigné ?

    Quel champs n'arrive-t-il pas à renseigner ?

  15. #15
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Il faudrait se pencher sur les triggers de validation (When-Validate-Item, When-Validate-Record)

  16. #16
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par plaineR
    D'où vient l'erreur when_no_data_found ? A mon avis c'est la source de l'erreur, c'est peut-être à cause d'elle qu'un champ obligatoire n'est pas renseigné ?

    Quel champs n'arrive-t-il pas à renseigner ?
    Toutes les erreurs sont inhérentes à cette fonction de chargement (youpi !)

    Pour l'instant je ne vois ABSOLUMENT pas ce qui cause une ORA-01403 et d'ailleurs je ne sais même pas où chercher très sincèrement

    Je continue de creuser.
    Merci encore pour toutes vos pistes...

  17. #17
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Si tu n'as aucune idée d'où cela peut venir je ferai un truc comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    PROCEDURE CHARGER_B0337 IS 
       CURSOR LCu_b0337_b0300 IS 
          SELECT   TA_LIB, TA_CODE 
          FROM     B0300, B0337 
          WHERE    TA_TABLE = '37' 
          AND      TA_CODE  = T37_CODE 
          AND      TA_ACTI  = '0' 
          AND      T37_SPECIFCLIENT = 'O' 
          ORDER BY T37_ORDRE; 
       LRT_b0337_b0300 LCu_b0337_b0300%ROWTYPE; 
    BEGIN 
       message ('1');pause;
       GO_BLOCK('B2830'); 
       message ('2');pause;
       FIRST_RECORD; 
       message ('3');pause;
       OPEN LCu_b0337_b0300; 
       LOOP 
          message ('4');pause;
          FETCH LCu_b0337_b0300 INTO LRT_b0337_b0300; 
          EXIT WHEN LCu_b0337_b0300%NOTFOUND; 
          CREATE_RECORD; 
          message ('5');pause;
          :B2830.SPEC_CODE := :B2820.SPEC_CODE; 
          :B2830.T37_CODE := LRT_b0337_b0300.TA_CODE; 
          :B2830.TA_LIB := LRT_b0337_b0300.TA_LIB; 
          message ('7');pause;
       END LOOP; 
       message ('6');pause;
       CLOSE LCu_b0337_b0300; 
       FIRST_RECORD; 
       GO_ITEM('B2820.ST_CODE'); 
    END;
    Regarde à quel niveau cela plante.

    Comme te l'as dit SheikYerbouti, regarde dans les triggers de ton block ou de ton item qui peuvent se déclencher (WVI, WVR).

  18. #18
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    L'instruction incriminée est :En fait, la table B2820 a 3 contraintes :
    - SPEC_CODE NOT NULL
    - ST_CODE NOT NULL
    - (SPEC_CODE, ST_CODE) NOT NULL

    Or, quand l'utilisateur créait un nouvel enregistrement je tentais de faire un GO_BLOCK et donc de quitter le bloc par défaut B2820 sans avoir satisfait les contraintes.

    Par conséquent, j'avais le choix entre :
    - désactiver les contraintes de la table B2820 ou
    - utiliser un autre trigger pour effectuer mon chargement.

    J'ai opté pour la 2ème solution qui fonctionne à merveille.
    Merci encore à vous 2, vous m'avez sorti une ENORME épine du pied

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/04/2009, 10h39
  2. [forms 6i] charger un fichier dans une table avec sqlloader
    Par moneyinthebank dans le forum SQL*Loader
    Réponses: 8
    Dernier message: 29/04/2006, 02h15
  3. centrer un bloc avec des div+css
    Par fabrisss dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 28/10/2005, 00h41
  4. FORMS 6i - Déplacement entre blocs -
    Par safou dans le forum Forms
    Réponses: 10
    Dernier message: 25/10/2005, 16h40
  5. [Forms] Update d'un bloc basé
    Par zeuss dans le forum Forms
    Réponses: 14
    Dernier message: 02/02/2005, 13h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo