Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
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 10/07/2007, 11h49   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 11
Points : 0
Points : 0
Par défaut Problème bloc multiligne

Bonjour

je suis entrain de developper une application sous Oracle 10g.
j'essai maintenant de remplir un Bloc multiligne a partir d'un type Clob de la base de donnée (le Clob contien une chaine de caractère volumineuse)

je vé expliquer la loguique du raisonement:

si le bloc multiligne est vide donc :je doit creer un nouveau record et le remplir apartir du clob

sinon :je doit comparer l'enregistrement en cours avec les autre déja saisi dans le bloc (la comparaison se fé sur une colonne qui s'appele x_sh)
s'il existe deja je passe
sinon je l'ajoute


voila le code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
go_block('X_ARTICLE');	
while :System.Last_Record <> 'TRUE' 
loop 
IF  :article.x_sh = SUBSTR(var_ligne, 28, 10)) then	
flag:=false;// flag de type BOOLEAN
end IF;
next_record;
end loop;
IF flag = true then
          CREATE_RECORD;
          	             :article.x_sh:=SUBSTR(var_ligne, 28, 10);
                          :article.x_valeur:=SUBSTR(var_ligne, 95, 13);
                          :article.x_poida:=SUBSTR(var_ligne, 108, 13);
              	:article.x_rsa:=SUBSTR(var_ligne, 1, 0);
              	:article.x_qtcompl:=SUBSTR(var_ligne, 121, 13);
              	:article.x_payso:=SUBSTR(var_ligne, 142, 2);
              	:article.x_asp:=SUBSTR(var_ligne, 136, 1);
              	:article.x_libsh:=SUBSTR(var_ligne, 180, 210);
              	:article.x_uc2:=SUBSTR(var_ligne, 403, 2);
              	:article.x_CODEUC:=SUBSTR(var_ligne, 134,2);
        END IF;
else flag :=true;
j'ai toujours de problème dans ce code, il n'afiche rien , je compte bq sur votre aide
merci
melleweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 12h42   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
c'est quoi :article ?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 12h55   #3
Invité de passage
 
Inscription : juillet 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 11
Points : 0
Points : 0
:article.sh c'é (:nom_du_bloc.nom_du_champs)
melleweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 14h09   #4
Membre éclairé
 
Inscription : août 2005
Messages : 316
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : août 2005
Messages : 316
Points : 342
Points : 342
Ce qui m'etonne c'est le go_block('X_ARTICLE'); alors que le bloc est nommé
:article aprés
et je pense qu'il faudrait positionné a true flag avant la boucle de parcours du block
c.langlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 14h16   #5
Invité de passage
 
Inscription : juillet 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 11
Points : 0
Points : 0
non j'ai mis x_article dans mon code et non pas article (j'ai ecri article eu lieu de x_article parceque x_ vaut une emoticonne dans ce forum)
melleweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 14h36   #6
Membre éclairé
 
Inscription : août 2005
Messages : 316
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : août 2005
Messages : 316
Points : 342
Points : 342
et concernnant l'initialisation de flag avant la boucle ?
de plus je pense qu'il faudrait un first_record avant la boucle.
c.langlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 16h25   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
je n'ai sans doute pas tout compris, c'est du code serveur ou du plsql outil style Forms ?
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 16h36   #8
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
salut Laurent,

C'est du Style Forms, le post n'est pas dans le bon sous forum
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 16h44   #9
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
salut ,

essaie ce code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
go_block('X_ARTICLE'); 
first_record;   
while :System.Last_Record <> 'TRUE' 
loop 
IF  :article.x_sh != SUBSTR(var_ligne, 28, 10)) then    
          CREATE_RECORD;
                  :article.x_sh:=SUBSTR(var_ligne, 28, 10);
                  :article.x_valeur:=SUBSTR(var_ligne, 95, 13);
                  :article.x_poida:=SUBSTR(var_ligne, 108, 13);
                  :article.x_rsa:=SUBSTR(var_ligne, 1, 0);
                  :article.x_qtcompl:=SUBSTR(var_ligne, 121, 13);
                  :article.x_payso:=SUBSTR(var_ligne, 142, 2);
                  :article.x_asp:=SUBSTR(var_ligne, 136, 1);
                  :article.x_libsh:=SUBSTR(var_ligne, 180, 210);
                  :article.x_uc2:=SUBSTR(var_ligne, 403, 2);
END IF;
next_record;
end loop;
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 17h50   #10
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Il faudrait peut-être déja initialiser flag à true au début.
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 17h54   #11
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

la condition suffit, il n'a pas besoin de rajouter la variable flag.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
if  :article.x_sh != SUBSTR(var_ligne, 28, 10)) then    
          CREATE_RECORD;
                  :article.x_sh:=SUBSTR(var_ligne, 28, 10);
                  :article.x_valeur:=SUBSTR(var_ligne, 95, 13);
                  :article.x_poida:=SUBSTR(var_ligne, 108, 13);
                  :article.x_rsa:=SUBSTR(var_ligne, 1, 0);
                  :article.x_qtcompl:=SUBSTR(var_ligne, 121, 13);
                  :article.x_payso:=SUBSTR(var_ligne, 142, 2);
                  :article.x_asp:=SUBSTR(var_ligne, 136, 1);
                  :article.x_libsh:=SUBSTR(var_ligne, 180, 210);
                  :article.x_uc2:=SUBSTR(var_ligne, 403, 2);
END IF;
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 18h21   #12
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Salim 11, je pense que ton code ne fait pas ce qui est demandé.
Il va créer une ligne nouvelle a chaque enregistrement existant !

Il faut d'abord parcourir TOUTES les lignes existantes pour savoir si celui qu'on veut créer existe !
D'ou l'utilisation du flag (= enreg a creer).
L'algo est bon, me semble-t-il.
Mais il faut initialiser le flag a TRUE (enreg inexistant par défaut) pour que ca marche !
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 18h39   #13
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,
Oui tu as raison Garuda. Je vois flou aujourd'hui .

mais on peut l'améliorer, en rajoutant une condition à la boucle while dés qu'il le trouve il sort .
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
go_block('X_ARTICLE');
first_record;
flag:=TRUE;    
while :System.Last_Record <> 'TRUE' and  flag
loop 
if  :article.x_sh = SUBSTR(var_ligne, 28, 10)) then    
flag:=false;// flag de type boolean
end if;
next_record;
end loop;
if flag = true then
          CREATE_RECORD;
                  :article.x_sh:=SUBSTR(var_ligne, 28, 10);
                  :article.x_valeur:=SUBSTR(var_ligne, 95, 13);
                  :article.x_poida:=SUBSTR(var_ligne, 108, 13);
                  :article.x_rsa:=SUBSTR(var_ligne, 1, 0);
                  :article.x_qtcompl:=SUBSTR(var_ligne, 121, 13);
                  :article.x_payso:=SUBSTR(var_ligne, 142, 2);
                  :article.x_asp:=SUBSTR(var_ligne, 136, 1);
                  :article.x_libsh:=SUBSTR(var_ligne, 180, 210);
                  :article.x_uc2:=SUBSTR(var_ligne, 403, 2);
                  :article.x_CODEUC:=SUBSTR(var_ligne, 134,2);
END IF;
salim11 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 09h31.


 
 
 
 
Partenaires

Hébergement Web