PRO*C : effacer le contenu d'un varchar

PRO*C : effacer le contenu d'un varchar - SQL/NoSQL - Programmation

Marsh Posté le 15-12-2004 à 17:26:44    

Code :
  1. void Consulter_Manifestations(){
  2.   int encore=1;
  3.  
  4.   system("clear" );
  5.   printf("%*s",55,"---Liste des Manifestations---\n\n" );
  6.   printf("%*s %*s %*s\n\n",8,"Numro",52,"Intitule",12,"Date" );
  7.  
  8.   EXEC SQL DECLARE curseur_les_manifs CURSOR FOR
  9.     SELECT *
  10.     FROM Manifestation;
  11.   EXEC SQL open curseur_les_manifs;
  12.  
  13.   while (encore) {
  14.     EXEC SQL fetch curseur_les_manifs into :NumManif,:IntituleManif,:DateManif;
  15.     encore=!sqlca.sqlcode;
  16.     if(encore){
  17.       IntituleManif.len=strlen(IntituleManif.arr);
  18.       DateManif.len=strlen(DateManif.arr);
  19.       IntituleManif.arr[IntituleManif.len]='\0';
  20.       DateManif.arr[DateManif.len]='\0';
  21.       printf("%*d %*s %*s\n",8,NumManif,52,IntituleManif.arr,12,DateManif.arr);
  22.     }
  23.   }
  24.   EXEC SQL close curseur_les_manifs;
  25.   scanf("%d",&encore);
  26. }


 
j'ai ce code la dans un projet que j'ai à faire
Le probleme c'est que dans ma procédure d'affichage, entre 2 lignes de la table les varchar sont pas effacés et j'ai des caracteres en trop.
 
exemple : si la ligne 1 donne
1     TotoTata    16/12/04
et si la ligne 2 doit donner normalement
2         Titi    10/05/03
ca m'affiche
2     TitiTata    10/05/03
 
Je vois pas comment faire :/


---------------
GT : Befa21
Reply

Marsh Posté le 15-12-2004 à 17:26:44   

Reply

Marsh Posté le 16-12-2004 à 15:13:16    

up


---------------
GT : Befa21
Reply

Marsh Posté le 17-12-2004 à 10:25:19    

up


---------------
GT : Befa21
Reply

Marsh Posté le 19-12-2004 à 19:41:12    

ça passionne les foules :lol:


---------------
GT : Befa21
Reply

Marsh Posté le 19-12-2004 à 20:52:54    

attend ya le people qui s'amene la :sol:

Reply

Marsh Posté le 19-12-2004 à 21:48:01    

C'est ton printf qui va pas bien. Tu lui demande d'imprimer les 52 premiers caractères de la variable IntituleManif.arr. Le zéro binaire ajouté en fin de chaîne n'y changera rien.
 
edit :
Ce que tu peux faire c'est faire un memset(IntituleManif.arr, '\0', LGMAX) juste après le printf.
Tu peux également en profiter pour virer les 4 lignes de code inutiles au dessus du printf...
 
edit II :
Arrange la boucle while stp. C'est vraiment moche.

Code :
  1. memset(IntituleManif.arr, '\0', LGMAX);
  2. EXEC SQL fetch curseur_les_manifs into
  3.    :NumManif, :IntituleManif, :DateManif;
  4. encore=!sqlca.sqlcode;
  5. while (encore) {
  6.    printf("%*d %*s %*s\n",  8, NumManif,
  7.                            52, IntituleManif.arr,
  8.                            12, DateManif.arr);
  9.    memset(IntituleManif.arr, '\0', LGMAX);
  10.    EXEC SQL fetch curseur_les_manifs into
  11.       :NumManif, :IntituleManif, :DateManif;
  12.    encore=!sqlca.sqlcode;
  13. }


C'est la manière usuelle de faire une boucle de ce style.
On peut évidemment factoriser par une petite macro ou fonction inline...
[:pains-aux-raisins]


Message édité par pains-aux-raisins le 19-12-2004 à 22:01:20
Reply

Marsh Posté le 06-01-2005 à 15:05:14    

merci  :jap:


---------------
GT : Befa21
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed