You are on page 1of 34

REPUBLIQUE TUNISIENNEMINISTRE DE

L’ENSEIGNEMENT SUPERIEURINSTITUT
SUPERIEUR DES ETUDE TECHNOLOGIQUE DE
NABEUL

RAPPORT DE STAGE :
SAGEM TUNISIE

SDIRI MOHAMED SALAH


REMERCIMENT

Au terme de ce travail, Je tiens à remercier tous ceux qui ont

Contribué de près ou de loin à la réalisation de ce rapport et de faire réussir mon stage.

Tout d’abord j’adresse mes vifs remerciements à mon encadreur M.ABEDA SABER

pour m’avoir donné les moyens, les conseils techniques et l’assistance nécessaires.

J’ai particulièrement apprécié sa compétence, son professionnalisme et sa patience

envers moi pour éclairer les aspects techniques et scientifiques sombres.

J’exprime également mes remerciements à toutes les personnes de la direction des

ressources humaines et le service de formation.

1
CHAPITRE I : PRESENTATION GENERALE

I. INTRODUCTION :
SAGEM TUNISIE fait partie du groupe SAFRAN qui est parmi les leaders dans la
conception des produits électroniques, de télécommunication, de traitement et la
transmission numérique de l’information.

SAGEM est le deuxième groupe français de télécommunication, le troisième groupe


européen de défense et de sécurité, parmi ces clients les plus constructeurs de
l’Amérique, d’Europe et de l’Asie. Il est implanté dans plus de 30 pays parmi eux la
Tunisie.

SAGEM Tunisie Communications fondée en janvier 2003 en termes de rachat d’une


petite entité de 86 personnes ( SATELEC TUNISIE ), SAGEM COMMUNICATIONS a
développé autour de ce petit noyau un site de production LOW COST qui compte de
nos jours plus de 4000 personnes ,c’ est une société totalement exportatrice non
résidente ,qui fabrique les cartes électronique en tant que sou traitant, des
consommables fax ainsi que les produits internes terminaux monétiques et des
modems de connexion à haut débit…
Actuellement le site compte plus de 4000 employés et il y’a l’idée d’implantation d’un
troisième site.

Les usines sont implantées dans la banlieue sud de Tunis (Ben Arous), à l’adresse :
usine SAGEM TUNISIE Borg Gorbel 2013 Ben Arous Tunisie.

2
II. ORGANISATION DU SAGEM TUNISIE
L’activité de SAGEM TUNISIE se structure autour des unités opérationnelles de
fabrication (UF) et d’unités de support administratif et financier (service)

1. UNITE DE FABRIQUATION

L’unité de fabrication assure la réalisation du programme de production, en termes de


qualité, coûts et délais .elle gère les moyens humains et matériels nécessaires à la
réalisation des opérations dont elle a la charge. Son périmètre va des
approvisionnements jusqu’à la livraison, SAGEM TUNISIE contient principalement les
unités de fabrications reparti sur deux usines.

2. SERVICES

Les bureaux de services représentent les supports de production dans les usines, ils
gèrent les problèmes rencontrés en cour de fabrication, dans la société de SAGEM
Tunisie on trouve le service suivant :

 Service qualité et environnement (SQE) :

- Assure de façon permanente la satisfaction du client

 Service industriel :

- Ce Service a pour mission la maintenance des outils de production ainsi la


maintenance et l’entretien des bâtiments. Maîtriser le taux de disponibilité des
moyens et minimiser le coût d’exploitation des équipements.

 Service Contrôle De Gestion Et Informatique :

- Assurer la maîtrise des flux financiers dans l’entreprise.


- Déterminer et analyser les résultats comptables périodiques.
- Réaliser le contrôle de gestion.
- Réaliser le pilotage des moyens informatiques.
- Assure la sécurité du réseau
- Gérer et administrer le réseau de l’entreprise
- Développement des applications

 Service Process :

3
- le service procès Chargé de la réception et de la mise en place, de la
garantie de fiabilité et de capacité de l’ensemble des moyens techniques du
site validés par les pôles technologiques, ainsi la proposition d’axes
d’améliorations de la qualité et de la productivité aussi l’optimisation de
l’exploitation des moyens de productions.

 Service des Ressources Humaines :

- le service RH Chargé d’assurer la gestion des ressources humaines qui vont


permettre la réalisation des objectifs industriels de l’établissement.

 Service Douanes :

- ce service assurer la réception (dédouanement) des matières premières ainsi


que l’expédition des produits finis et semi-finis.

 Service Industrialisation:

- Crée en nov2007, ce service a pour mission de réussir & de le passage de la


phase proto à la phase de mise en production série des produits. Il opère
actuellement sur U2.

4
CHAPITRE II : PROCESSUS DE FABRICATION

Test final

Test In Situ

Brasage vague

Insertion manuelle

Brasage dans four

Dépose de CMS : Pick and Place

Dépose de CMS: Chip shooter

Dépôt Pâte à braser

Processus de fabrication sur une ligne de production

I. SERIGRAPHI

La sérigraphie est un moyen de déposer un produit d’une manière sélective en


utilisant un écran muni d’ouvertures et une racle. On utilise la racle pour amener
le produit d’une extrémité à L’autre de l’écran, en exerçant une pression sur Le
produit à une vitesse de déplacement constant. Ceci permet de Transférer le
produit sur le circuit imprimé au Passage des ouvertures. Le produit à déposer

5
est une crème à braser dont les caractéristiques principales sont la viscosité et
la Thixotropie.

Fig 1  : le phénomène de sérigraphie

II. FONCTIONNEMENT DE LA MACHINE 


On peut décrire le fonctionnement de cette machine avec les systèmes cités dessous :

 LE SYSTEME DE MAINTIEN DE LA CARTE  :

Le maintien de la carte sur le convoyeur de la machine se fait soit :

-Par Verrouillage mécanique

-Par du vide ou il y’aura aspiration de la carte

 LE SYSTEME DE RACLAGE :

C’est le système permettant la mise en œuvre de l’opération de raclage, les paramètres


à surveillés sont :

6
- angle de raclage (orientation de la tête / déplacement)

- pression d’appui sur le pochoir

- équilibrage gauche droite

- angle des racles

 LE SYSTEME DE VISION (ALIGEMENTS)  :

C’est le système permettant l’alignement de la carte avec le pochoir pour que les
ouvertures de ce dernier coïncident bien avec les plages d’accueil.

 LE SYSTEME DE NETTOYAGE  :

Après plusieurs cycles de sérigraphie la crème vient rester sur la face inférieure du
pochoir, Pour palier à ça les machines de sérigraphies sont équipées d’un système de
nettoyage permettant de balayer tout le pochoir en injectant un produit de nettoyage à
l’aide d’une pompe.

Fig 2  : la machine de sérigraphie

III. MACHINE DE POSE


7
La deuxième opération après la sérigraphie est la pose des composants avec une
vitesse très élevée sur les plages d’accueil correspondant.
Il y’a différents types de composant à poser qui différent essentiellement par:

 La taille : La taille des composant allant du petit composant CMS jusqu’au grand
composant comme les connecteurs.
 Le conditionnement des composants :
Ils peuvent être approvisionnés soit en bandes soit en plateau
 Le type des composants : selon la nature de fonctionnement des composant sur la
carte il y’a les composants résistifs, les composants programmables, les composants
pour la connectique. Le rôle essentiel d’une machine de pose est de placer ces
Composants aux emplacements spécifiés de la carte avec le maximum de précision
et de rapidité qu’il faut en tenant compte bien sur des différences notées dessus
entre les divers composants.
Donc pour chaque carte électronique devant recevoir des composants il y’a une
séquence bien déterminé que la machine doit faire pour avoir à la sortie une carte
équipée.

Fig  3:les tables fig4  : chargeur

Fig 5  : la tourelle fig 6 : camera d’analyse

CHAPITRE III : SERVICE DE DEPANNAGE

8
1. DEPANNAGE 

Sur une poste de dépannage on trouve :


 Un tableau qui contient :
 Feuille de dépannage, dans laquelle le dépanneur inscrit les genres des pannes
rencontrés et dans qu’elle étape du process cette panne est commise.
 Nomenclature arborescente
 Schéma électrique
 Schéma de composants montés en surface
 Schéma de composants piqués
 Armoire pour les différents composants a utilisés
 Boite pour les rebuts

2. RETOUCHE SOUDAGE 

Lorsque la qualité en sortie de vague se dégrade au cours de la journée ,il faut


absolument vérifier que tous les sous-ensembles fonctionnent correctement ,alors il est
nécessaire qu’ après l’opération de brasage ,le nettoyage s’impose pour tout circuit
électrique en particulier si la brasure a été faite avec un flux actif ;ceci pour éliminer
toute forme de contamination sous forme d’acides ,de sels ,d’agents ionique ,de produit
de réaction et de décomposition de flux ,de graisse ,de poussières d’impuretés.

3. POSTE D’ASSEMBLAGE

Le poste d’assemblage c’est le départ du cycle de la fabrication


Dans cette étape l’ouvrier est censé à assembler sur la micro
Un afficheur LCD Qui communique avec elle à travers un zébras

4. POSTE D’INTÉGRATION

Le travail au poste d’intégration consiste à assembler la carte micro et la carte


d’alimentation sur le socle inférieur du compteur et mettre toute les liaisons nécessaire.

5. POSTE TEST IN-SITU

Le test consiste à contrôler les pannes après entrer four qui vérifier le court-circuit.

6. POSTE DE TEST FONCTIONNEL

9
Le test effectué dans ce poste concerne la compatibilité de la version du compteur, le
fonctionnement des boutons la communication avec le flag et le modem, le bon
fonctionnement anti-fraude et le test micro.

7. SERVICE PROCCES

Lors d’un nouveau produit on doit créer une nouvelle programme sur les différons
machine de la ligne CMS surtout la machine de sérigraphie MPM AP 25, pour le faire on
doit respecter un démarche pour obtenir une sérigraphie bonne on doit vérifier que les
mires de la carte est confondu avec les mires du écran, dans l’UF monétique la plus
grande carte nécessite 6 mires a déclaré aux programmes

8. SERVICE TEST 

Ce service a pour objectif la maintenance des TI, TF gérer à travers un ordinateur et de


résoudre ses problème logistique tel que le réseau, connexion ADSL ou matérielle tel
que les câbles de connexion et les ports USB.

fig7 : Le poste de dépannage

10
Partie II : DEVELOPPEMENT D’UNE APPLICATION
D’ACQUISITION ET DE STATIQTIQUE APRES LES
TEST DES PRODUITS

I. LE DEVELOPPEMENT INFORMATIQUE CHEZ SAGEM


COMMUNICATION (Ben Arous)

11
Selon la période de mon stage j’ai constaté que le développement chez Sagem
consiste a créé des applications de gestion et des applications orienté industriel.

Par exemple :

-applications de test de matériel (test sur les produits de Sagem)

-application de statistique pour l’amélioration des tests et l’aide de prendre


des décisions pour améliorer la production. 

Il y a des autres domaines de développement en utilisant d’autres outils pour


des autre raisons comme labVIEW que je n’avais pas l’occasion de l’explorer,
à cause d’un régime de travail très élever.

II. DEVELOPPEMENR D’UNE APPLICATION D’ACQUISITION DES


DONNEES ET DE STATISTIQUE

1. CREATION D’UNE INTERFACE GRAPHIQUE EN MODE ASSISTANT


DANS LABWINDOWS/CVI

LabWindows /CVI donne la possibilité d’utilisé des contrôle facile utilisé pour réduire le
temps de développement. Après le lancement de l’environnent on clique sur File->New-
>Project from Template, la dialogue suivante s’affiche.

Il nous reste que sélectionné user Interface Application puis le nommer « ex.
Application1 » ensuite valider par OK. Une nouvelle interface vierge apparait.

12
fig 9 : interface prête à l’exploiter

1.1 LE CONTROLE TEXT (String) :

Pour l’utilisé il suffit de cliquer sur le bouton droite dans l’interface montrer ci-
dessus voire (fig 9) ensuite en choisi parmi les contrôle Text le contrôle String
(voir annexe fig ?). Une foi le contrôle apparait dans la zone de l’interface et pour
rendre le référencement de l’objet plus claire pendant la phase de programmation
on l’attribue un nom constant pour le spécifier, on procède pour l’éditer par un
clic droit sur le contrôle, une boite apparait ensuite en peut donner un nom plus
significatif dans le champ Constant name (voir annexe fig ??).

1.2 EXPLOITATION DU CONTROLE TEXT EN MODE


PROGRAMMATION

1.2.1 La fonction getCtrlVal() :

 Déclaration : int GetCtrlVal (panelHandle int, int controlID, @ du


variable);
Dans la programmation évènementielle graphique en C pour utiliser un
contrôle on doit spécifier le numéro de Handle, le contrôle cible et le
variable pour contenir le résultat, La fonction getCtrlVal permet de
récupérer la valeur du champ Text saisi dans une variable nommée n.
Exemple :
char n [20]; // tableau de type char de 20 cellules
GetCtrlVal(panelHandle,PANEL_NOM,&n);

13
1.2.2 LA FONCTION SetCtrlVal() :

 Déclaration : int SetCtrlVal (panelHandle int, int controlID, la valeur void *);
Définit la valeur d'un contrôle à une valeur que vous spécifiez.
Exemple :
SetCtrlVal (panelHandle ,PANEL_NOM, n);

1.3 LE BOUTON DE COMMANDE

1.3.1 PRINCIPE DE LA FONCTION CALLBACK

La fonction de rappel répondre à tous les évènements du programme par


exemple une action sur une commande de l'interface graphique. Les
prototypes de la fonction de rappel définie dans bibliothèque userint.h.
LabWindows / CVI transmet les informations d'événements de l'interface
graphique pour les fonctions de rappel. Par exemple, les fonctions de rappel
de
Recevoir le type d’événement qui a eu lieu l’interface utilisateur.
C'est à dire qu’on va passer une fonction en paramètre d'une autre fonction
(on passe par des pointeurs de fonctions).
Résumé : Cela sert énormément pour pouvoir faire des notifications par
exemple (beaucoup de systèmes d'interfaces graphiques utilisent ce
système).

Fichier source (.c)

main ()

Contrôle 1 Event Contrôle 1


info Callback Function
Indicateur
Contrôle 2
Contrôle 2 Event Callback Function
info
Panel
Callback Function
Event
info

Schéma illustre le principe de la fonction Callback

14
1.3.2 RECUPERATION DES DONNEES DE LA ZONE DE TEXT

Je commence tout d’abord par un exemple en code C

Code :

int CVICALLBACK ok (int panel, int control, int event,


void *callbackData, int eventData1, int eventData2)
{
char n[100]; //une variable pour contenir le nom d'utilisateur
char p[100];//une variable pour contenir le password
switch (event)
{
case EVENT_COMMIT: //évènement du clic sur le bouton OK
GetCtrlVal( panelHandle,PANEL_NOMm,&n);//récupération du nom
GetCtrlVal( panelHandle,PANEL_NOMm,&p);// récupération du
password
break;
}
return 0;
}

2. PERSISTANCE DES DONNEES

2.1COMMUNIQUER AVEC UNE BASE DE DONNES

Après le test par les instruments de test et acquisition «opération


consiste à la numérisation des signaux analogique par des
instruments DAQ »de produit les résultats et les valeurs de test
doivent être enregistré dans une base de données pour les
récupérer dans la phase de statistique.

la démarche à suivre avec LabWindows/CVI pour communiquer avec une base de


données. De la même façon qu’une application se décompose en plusieurs phases :

1
Initialisation

2
Boucle de gestion des événements

3
Clôture de l’application

Toute interaction avec une base va se faire à travers une session. Cette dernière
15
peut-être décomposée comme suit :

Exécution ou activation des requêtes SQL

Connexion à la base de données

Récupération ou traitement des données

Clôture des requêtes

Déconnexion de la base

C’est une phase un peu délicate et je n’ai pas pu la terminer encours de ce stage,
mais j’ai continué à travailler jusqu’au jour d’hui

2.2 CREATION D’UNE BASE DE DONNEES AVEC


LABWINDOWS/CVI

la création d’une base de données nécessite par fois la création d’un fichier
header (.h) contient la définition des ID « de type entier » qui vont servir ensuite
pour les fonctions SetCtrlVal et GetCtrlVal

exemple :

#define PANEL_TABLE 2

#define PANEL_TEXTBOX 3

#define PANEL_SQLDBAddDataSource 4 /* callback function: SQLAddDataSource */

#define PANEL_SQLDBint 5 /* callback function: SQLInitializate */

16
NOTE : les ID contrôle prennent la deuxième position dans les paramètres du Set et Get et la fonction
SetCtrlAttrib

Pour créer un fichier base de données (.mdb) on procède comme ceci 

Code :

int CVICALLBACK SQLInitializate (int panel, int control, int event,

void *callbackData, int eventData1, int eventData2)

float ODBCVer;

switch (event)

case EVENT_COMMIT:

//create new databse file

if (!FileExists ("test_empty.mdb", 0))

MessagePopup("Error","Not found file,please check test_empty.mdb in


directory");

return -1;

DeleteFile ("test.mdb");

CopyFile ("test_empty.mdb", "test.mdb");

//initialisation de la base de données

if (SQLDBint(&AccessDb)==FAIL)

MessagePopup("Error","Database init failed!");

return -1;

17
SQLDBGetODBCVersion(AccessDb,&ODBCVer);

if (ODBCVer<3)

MessagePopup("Error","ODBC version is too lower!");

SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);

SetCtrlAttribute (panelHandle, PANEL_SQLDBAddDataSource, ATTR_DIMMED,


0);

InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"Database
initialize,SQLDBint");

break;

return 0;

18
Conclusion

Le stage au sien de SAGEM, a été une occasion pour l’insertion dans la vie
professionnelle.

Au cours de ce stage j’ai eu un stage de qualité en plus une expérience assez


valeureuse qui m’a permis de pratiquer mes connaissances universitaires. En effet, j’ai
pu évaluer mes connaissances par rapport aux besoins de l’entreprise et acquérir de
nouvelles Technologies et méthodes qui me seront utiles à l’avenir. Evidemment, j’ai dû
m’adapter aux horaires de l’entreprise qui sont : 8h-12h et 12 :30-17h. Tous ces
facteurs m’ont permis de découvrir le monde de l’entreprise sur un plan professionnel .

19
Annexe

20
Ajout d’un bouton

Edition des paramètres du bouton

21
Génération automatique du code de bouton

Code générer

22
Edition des paramètres du tableau « elle va contenir les valeurs de test »

Aperçu d’ une interface de variation des courbe de teste

Code d’initialisation de la base de données  :

23
int CVICALLBACK SQLInitializate (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
float ODBCVer;
switch (event)
{
case EVENT_COMMIT:
//création d’une nouvelle base de données
if (!FileExists ("test_empty.mdb", 0))
{
MessagePopup("Error","Not found file,please check test_empty.mdb in directory");
return -1;
}
DeleteFile ("test.mdb");
CopyFile ("test_empty.mdb", "test.mdb");

//initialisation de la base
if (SQLDBint(&AccessDb)==FAIL)
{
MessagePopup("Error","Database init failed!");
return -1;
}
//vérification de la version de l’ODBC
SQLDBGetODBCVersion(AccessDb,&ODBCVer);
if (ODBCVer<3)
{
MessagePopup("Error","ODBC version is too lower!");
}
SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_SQLDBAddDataSource, ATTR_DIMMED, 0);
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"Database initialize,SQLDBint");
break;
}
return 0;
}

Code d’ajout d’une source de données  :

int CVICALLBACK SQLAddDataSource (int panel, int control, int event,


void *callbackData, int eventData1, int eventData2)
{
long errorcode;
switch (event)
{
case EVENT_COMMIT:

24
//requête si la configuration DSN existe
if (SQLDBFindDSN(AccessDb,"TempAccess")==FAIL)
{

//setup temp DSN


if(SQLDBAddDataSource (ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)\0",
"DSN=TempAccess\0DBQ=test.mdb\0")!=PASS)
{
SQLDBGetInstallerError (&errorcode, AccessDb->ErrorMessage, 500, IGNORE);
MessagePopup("Error",AccessDb->ErrorMessage);
}
else
{
SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_SQLConnection, ATTR_DIMMED, 0);
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"Add a new data source: SQLDBAddDataSource");
}
}
else
{
SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_SQLConnection, ATTR_DIMMED, 0);
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"data source is existed: SQLDBFindDSN");
}
break;
}
return 0;
}

Code de la fonction de connexion à la base de données :

int CVICALLBACK SQLConnection (int panel, int control, int event,


void *callbackData, int eventData1, int eventData2)
{
char DSNName[20];
char temp[200];

switch (event)
{
case EVENT_COMMIT:
//Connect database
if (SQLDBDSNConnect (AccessDb, "TempAccess", "admin","" )!=PASS)
{
MessagePopup("Error",AccessDb->ErrorMessage);
}
else
{
//lecture du nom de DSN
SQLDBGetDriverInfo (AccessDb, SQL_DATA_SOURCE_NAME, DSNName, 20, NULL);

25
strcpy(temp,"Connect database:SQLDBDSNConnect DSN name:");
strcat(temp,DSNName);
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,temp);
SetCtrlAttribute (panelHandle, PANEL_SQLDBEndTran, ATTR_DIMMED, 0);
SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_SQLDBDiscardConn, ATTR_DIMMED, 0);
}
break;
}
return 0;
}

Code de la fonction qui permet de crée une table :

int CVICALLBACK SQLCreateTable (int panel, int control, int event,


void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
//création d’une nouvelle table
if (SQLDBExecImmediate (AccessDb, "create table Employee([ID] AUTOINCREMENT PRIMARY KEY,[Name]
varchar(20),[Birthday] DATETIME,[Pay] double)")!=PASS)
{
MessagePopup("Error",AccessDb->ErrorMessage);
}
else
{
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"executes a preparable statement
Immediate:SQLDBExecImmediate create Employee table");
SetCtrlAttribute (panelHandle, PANEL_SQLDBEndTran1, ATTR_DIMMED, 0);
SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);
}
break;
}
return 0;
}

Code d’une fonction de transaction  :

int CVICALLBACK SQLDBEndTran1 (int panel, int control, int event,


void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
//submit transactions
SQLDBTransaction (AccessDb, SQL_COMMIT);

26
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"submit create transactions:SQLDBEndTran");

//insertion des données


SQLDBExecImmediate (AccessDb, "insert into Employee ([ID],[Name],[Birthday],[Pay]) values (1,'med','2010-4-
5',2050)");
SQLDBExecImmediate (AccessDb, "insert into Employee ([ID],[Name],[Birthday],[Pay]) values (2,'sdiri','2006-8-
21',4000)");
SQLDBExecImmediate (AccessDb, "insert into Employee ([ID],[Name],[Birthday],[Pay]) values (3,'shr','2001-8-
21',3000.43)");
SQLDBExecImmediate (AccessDb, "insert into Employee ([ID],[Name],[Birthday],[Pay]) values (4,'aoni','1998-8-
21',8057.54)");
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"insert new data");
SetCtrlAttribute (panelHandle, PANEL_SQLDBEndTran1, ATTR_DIMMED, 0);
SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);

//submit transactions
SQLDBTransaction (AccessDb, SQL_COMMIT);
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,"submit insert transactions:SQLDBEndTran");
SetCtrlAttribute (panelHandle, PANEL_SQLReadData, ATTR_DIMMED, 0);
SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);
break;
}
return 0;
}

Code de la fonction de Lecture des données :

int CVICALLBACK SQLReadData (int panel, int control, int event,


void *callbackData, int eventData1, int eventData2)
{
char TableName[20],ColumnsName[20],ColumnsType[20];
char temp[100];
int i=1,ColumnsSize,RowNumber;
long IDlen,Namelen,DatetimeLen,Paylen;
int ID;
char Name[20],Birthday[20];
double Pay;
switch (event)
{
case EVENT_COMMIT:
//lecture de la table nom
if (SQLDBGetTable(AccessDb, "TABLE")!=PASS)
{
MessagePopup("Error",AccessDb->ErrorMessage);
}
else
{
//bind variable

27
SQLDBBindCol (AccessDb, 3, SQL_C_CHAR, TableName, 20,IGNORE);

while(SQLDBFetch(AccessDb)!=IS_NO_DATA)
{
Fmt(temp,"%s%s","Read table name:SQLDBGetTable:",TableName);
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,temp);
}
SQLDBCloseCursor (AccessDb);
SQLDBResetStatement (AccessDb); //reset statment handle
}

//lecture des colonnes


if (SQLDBGetColumns (AccessDb, TableName)!=PASS)
{
MessagePopup("Error",AccessDb->ErrorMessage);
}
else
{
//bind variable
SQLDBBindCol (AccessDb, 4, SQL_C_CHAR, ColumnsName, 20,IGNORE);
SQLDBBindCol (AccessDb, 6, SQL_C_CHAR, ColumnsType, 20,IGNORE);
SQLDBBindCol (AccessDb, 7, SQL_C_SLONG, &ColumnsSize, IGNORE,IGNORE);
while(SQLDBFetch(AccessDb)!=IS_NO_DATA)
{
Fmt(temp,"%s%s%s%s","Read columns name:SQLDBGetColumns:",ColumnsName," Type:",ColumnsType);
InsertTextBoxLine(panelHandle,PANEL_TEXTBOX,-1,temp);
SetTableColumnAttribute (panelHandle, PANEL_TABLE, i, ATTR_LABEL_TEXT, ColumnsName);
SetTableColumnAttribute (panelHandle, PANEL_TABLE, i, ATTR_COLUMN_WIDTH, ColumnsSize*3);
i++;
}

SQLDBCloseCursor (AccessDb);
SQLDBResetStatement (AccessDb); //reset statment handle
}
//lecture des données
if (SQLDBExecImmediate (AccessDb, "Select * from Employee")!=PASS)
{
MessagePopup("Error",AccessDb->ErrorMessage);
}
else
{
//bind to variable
SQLDBBindCol (AccessDb, 1, SQL_C_ULONG, &ID, IGNORE, &IDlen);
SQLDBBindCol (AccessDb, 2, SQL_C_CHAR, Name, 20,&Namelen);
SQLDBBindCol (AccessDb, 3, SQL_C_CHAR, Birthday, 20,&DatetimeLen);
SQLDBBindCol (AccessDb, 4, SQL_C_DOUBLE, &Pay, IGNORE, &Paylen);
while(SQLDBFetch(AccessDb)!=IS_NO_DATA)
{
InsertTableRows (panelHandle, PANEL_TABLE, -1, 1, VAL_USE_MASTER_CELL_TYPE);
GetNumTableRows (panelHandle, PANEL_TABLE, &RowNumber);

28
SetTableCellAttribute (panelHandle, PANEL_TABLE, MakePoint (1,RowNumber), ATTR_CTRL_VAL,ID );
SetTableCellAttribute (panelHandle, PANEL_TABLE, MakePoint (2,RowNumber), ATTR_CTRL_VAL,Name );
SetTableCellAttribute (panelHandle, PANEL_TABLE, MakePoint (3,RowNumber), ATTR_CTRL_VAL,Birthday );
SetTableCellAttribute (panelHandle, PANEL_TABLE, MakePoint (4,RowNumber), ATTR_CTRL_VAL,Pay );
strcpy(Name,"");
strcpy(Birthday,"");
ID=0;
Pay=0.0;
}
SQLDBCloseCursor (AccessDb);
SQLDBResetStatement (AccessDb); //reset statment handle
}

SetCtrlAttribute (panelHandle, PANEL_SQLUpdate, ATTR_DIMMED, 0);


SetCtrlAttribute (panelHandle, control, ATTR_DIMMED, 1);
break;
}
return 0;
}

29
Pour conclure, j'ai eu un stage de qualité, et je voudrais remercier toute

l'équipe de la direction des ressources humaine et de formation

Ce stage a été très profitable pour moi. En effet, j’ai pu évaluer me

Connaissances par rapport aux besoins de l’entreprise et acquérir de nouvelles

Technologies et méthodes qui me seront utiles à l’avenir. Evidemment, j’ai dû m’adapter aux horaires de
l’entreprise qui sont : 8h-12h et 13h-17h et de 8h. Tous ces facteurs m’ont permis de découvrir le monde
de l’entreprise sur un plan professionnel mais aussi sur un plan humain par le travail en équipe.

En effet, j’ai eu l’occasion de rencontrer des personnes qui m’ont beaucoup aidé tant dans le travail que
pour mon intégration dans l’entreprise. Ils ont pris le temps de m’expliquer toutes mes missions bien qu’ils
aient également du travail. Ils m’ont fait découvrir les locaux, expliquer le fonctionnement de l’entreprise…

Je retire donc de ce stage une impression de réussite. Ce que j’ai découvert lors de celui-ci m’aidera dans
mes études mais aussi dans ma vie professionnelle future.

30
31
32
33

You might also like