lundi 23 août 2010

Nouveau blogue.

Mon blogue a été changé. Voici le nouveau:
http://blogueabedoracle.blogspot.com

Abed

lundi 12 juillet 2010

Processus d'écoute d'ORACLE.

Parfois, il se pourrait qu'on va y avoir une erreur de processus d'écoute (le système ne pourra pas se connecter comme la montre cette figure):



Pour résoudre ce problème, il suffit de redémarrer le service de Listener. Voici les étapes:
  • Aller dans panneau de configuration - outils d'administration - services
  • Chercher OracleOradb10g_Home1TNSListener
  • Cliquer à gauche sur redémarrer le service
  • Fermer la fenêtre Outils d'administration
  • Relancer PL/SQL Developer, TOAD ou SQL Plus
  • Connecter avec le compte et ça devrait marcher.

vendredi 9 juillet 2010

Raccourcis pour Forms et Reports Builder.

Il est possible qu'on peut mettre un raccourci sur le bureau de windows pour le lancement rapide d'Oracle Forms Builder 10g, dont voici les démarches.

  • Créer un fichier texte et nommer le Forms.bat
  • Saisir les paramètres suivants:
SET FORMS_PATH=C:\DevSuiteHome_1\cgenf61\admin,C:\DevSuiteHome_1\Forms
C:\DevSuiteHome_1\BIN\Frmbld.exe
  • Sauvegarder le fichier.
  • Lancer Forms en cliquant deux fois sur l'icône.
On fait la même chose pour Oracle Reports en créant un fichier nommé Reports.bat

SET REPORTS_PATH=C:\DevSuiteHome_1\cgenf61\admin,C:\DevSuiteHome_1\Forms
C:\DevSuiteHome_1\BIN\rwbuilder.exe

Abed

jeudi 8 juillet 2010

Personnaliser les alertes avec Oracle Forms 10g.

Lorsqu'on va utiliser un bout de code plusieurs fois au niveau d'un module (cas des alertes par exemple), il est beaucoup plus utile de créer une unité de programme. Dans notre cas des alertes, on va créer une fonction et puis de faire appel à l'unité de programme.

  1. Création de l'unité de programme
Se positionner sur le nœud unité de programme:



Cliquer sur Ajout ou (+) en haut du module. Sélectionner Fonction et donner un nom (exemple Afficher_alerte)



Une fenêtre PL/SQL s'affiche à l'écran et on va saisir ce code (cliquez sur l'image pour voir le contenu):



Maintenant la fonction AFFICHER_ALERTE est crée. Donc, on va l'appeler à partir d'un trigger (When-Button-Pressed) en créant un bouton sur un canevas. Il nous reste qu'a saisir le code pour appeler la fonction qui affiche le message de type alerte (sans oublier bien sûr de créer un objet ALERT, sinon le programme ne le trouve pas).



Après la compilation du module, voici les résultats (cas d'un objet ALERT existant)



Cas d'un objet ALERT inexistant au niveau du module.



Testé sous Windows 7, Oracle 10gR2. Le code source (FMB) serait téléchargeable incessamment sur mon site web.
Abed

mercredi 30 juin 2010

Changer le navigateur dans Forms 10g.

Parfois, il va y avoir des problèmes au niveau de navigateur internet pour afficher un formulaire compilé avec Oracle Forms 10g (cause de Jinitiator ou les applets java). Donc, il est préférable de changer le navigateur pour faire des tests (de Firefox vers Internet Explorer ou vice-versa). Pour se faire, on va suivre les étapes suivantes:

  • Lancer Oracle Forms Builder.
  • Aller dans le menu Edition - Préférences. La fenêtre suivante s'affiche à l'écran.

  • Cliquer sur l'onglet Runtime. Dans Emplacement navigateur Web, on va choisir le navigateur approprié.
Testé sous Windows 7, Oracle Forms 10g R2.

lundi 28 juin 2010

Récupérer une table supprimée.

Il est possible qu'on peut récupérer une table effacée par la commande Drop (DROP TABLE NOMTABLE) à moins qu'on active la corbeille d'Oracle.

Pour activer, on va vérifier un paramètre dans la corbeille:
  • Connectez-vous avec sys as sysdba avec PL/SQL Developer, TOAD ou bien tout simplement l'interface texte de SQL PLUS.
  • Tapez cette commande: SHOW PARAMETER RECYCLEBIN, ce qui nous donne le résultat suivant:
NAME TYPE VALUE
--------- -------- -------
recyclebin string on

On voit bien que la corbeille est ON (ça veut dire que les objets effacés sont stockés dans cette corbeille pour les récupérer). Si le paramètre est OFF, on va faire un ALTER SYSTEM indiqué comme suit:
ALTER SYSTEM SET RECYCLEBIN = ON SCOPE=SPFILE;

Ensuite, on va faire un drop de la table employe (DROP TABLE EMPLOYE). À ce moment là, l'objet employe n'existe pas et pour récupérer cette table, on va utiliser un FLASHBACK:
FLASHBACK TABLE EMPLOYE TO BEFORE DROP;

Si on fait maintenant DESC EMPLOYE, le système va afficher la structure de la table effacée.

Afficher le code source d'un objet de la BD.

Pour afficher le code source d'un objet stocké dans la BD (procédure ou fonction), j'ai crée une procédure paramétrable qui permet de faire ce travail, mais avant ça, on doit créer une autre pour la stocker sur le schéma de la BD.

SET SERVEROUTPUT ON (important pour afficher les messages en PL/SQL)
create or replace procedure TestMessage(mes varchar2)
is
begin
dbms_output.put_line(mes);
end;

Cette procédure affiche n'importe quel message sur l'écran. On va compiler cette procédure pour créer l'objet. Ensuite, la voici la procédure aff_code_source:

CREATE OR REPLACE PROCEDURE AFF_CODE_SOURCE(NOM_OBJET IN VARCHAR2)
IS

CURSOR CUR_OBJET
IS
SELECT TEXT FROM USER_SOURCE -- SELECT POUR AFFICHER
WHERE NAME=NOM_OBJET -- LE CODE SOURCE
ORDER BY LINE;

LIG_OBJ CUR_OBJET%ROWTYPE;
INDICE NUMBER:=0;
BEGIN
OPEN CUR_OBJET;
LOOP
FETCH CUR_OBJET INTO LIG_OBJ; --RÉCUPÈRE LA LIGNE
EXIT WHEN CUR_OBJET%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(LIG_OBJ.TEXT); --AFFICHER LE CONTENU DE CHAQUE LIGNE

INDICE := INDICE+1;
END LOOP;

CLOSE CUR_OBJET;
IF INDICE=0 THEN
TestMessage(' ERREUR... LA PROCÉDURE OU LA FONCTION '||NOM_OBJET||' N''A PAS ÉTÉ CRÉE');
END IF;

END AFF_CODE_SOURCE;

Compilez cette procédure et vous verrez les résultats en exécutant la commande suivante:
EXEC AFF_CODE_SOURCE('TESTMESSAGE');

jeudi 17 juin 2010

Oracle 11g release 2.

Après le lancement de la version 11g sous Linux, Oracle vient de sortir cette version sous Windows 32 et 64 bits.
http://www.oracle.com/technology/software/products/database/index.html

mercredi 27 janvier 2010

Intégrer un calendrier avec Oracle Forms.

En utilisant un JavaBean, on pourrait intégrer facilement un calendrier dans un champ de type date afin de simplifier les choses pour des utilisateurs qui veulent manipuler les dates.



Une fois qu'on sélectionne le mois et l'année, le champ date sera renseigné automatiquement.

vendredi 22 janvier 2010

Projet (partie applicative).

Étant donné qu'on a pas assez du temps pour utiliser le DHF afin de créer les modules FORMS de notre application, on va procéder manuellement la création avec Oracle Forms 10g, dont voici les prototypes:

  1. Module Baux: Ce module permet d'ajouter les baux une fois que le locataire trouvera l'appartement ainsi que les conditions de loyer.

2. Module locataire: Ce module permet de mettre à jour les locataires.



3. Module appartements: Ce module permet également la mise à jour des appartements.



Une version de démonstration est en cours de développement.

Abed

mardi 5 janvier 2010

Nouveautés APEX 4.0

Application Express 4.0 se concentrera sur le mode déclaratif pour la prise en charge des fonctionnalités et l’extWeb 2.0 et l’extension de l’outil. Application Express 4.0 intégrera les éléments suivants:

  • Application Express Websheets (nom non encore officiel) - Un système rapide, simple et sûr moyen de recueillir et de partager des informations.
  • Oracle APEX Listener basé sur J2EE pour améliorer les performances, upload de fichier direct, et amélioration de l'impression PDF.
  • Amélioration dans le composant Tabular form incluant des validations et type d’éléments.
  • Support d’AnyChart 4 incluant des assistants pour créer des diagrammes de Gantt et des cartes avec les objets AnyGantt et AnyMap.
  • Extension des éléments de page permettant aux développeurs d’ajouter leurs propres type d’éléments.
  • Nouveaux schémas d’authentification.
  • Et de nombreuses autres améliorations.

Essayez-le gratuitement à cette url: http://tryapexnow.com/

Abed

dimanche 3 janvier 2010

Installer Oracle Forms 10g sous Windows 7.

Pour les gens qui veulent installer la suite Oracle Developer 10 g sous Microsoft Windows 7, à savoir: FORMS, REPORTS et DESIGNER, voici quelques astuces avant de procéder à une installation:

1) Il faudrait changer le mode de compatibilité pour le programme SETUP.EXE (mode XP).

En cliquant sur les propriétés, ce qui nous donne la fenêtre suivante:



On voit ici le mode de compatibilité XP service pack 2. On va cliquer sur Ok pour valider les changements.

2) On va changer les paramètres de la mémoire virtuelle. Si jamais, vous ne changerez pas ces paramètres, voici le message d'erreur de l'installateur:



Donc, il est important de changer les paramètres de la mémoire virtuelle, dont voici les étapes:

  • Allez au panneau de configuration.
  • Chercher l'option de performance.


On va cliquer sur Taille personnalisée et on va définir les tailles. Ensuite, cliquer sur le bouton Définir.

  • Lancez une deuxième fois le programme d'installation de ORACLE DEVELOPER 10 g.
  • Le processus devra continuer jusqu'à la fin.


3) JVM.DLL
  • Installez le dernier jdk sur le site de sun (java.sun.com).
  • Après l'installation de jdk, copiez le fichier jvm.dll qui se trouve dans le dossier C:\Programmes\Java\jdk1.6.0_13\jre\bin\client dans le dossier approprié d'oracle JInitiator (C:\Programmes\Jinitiator 1.3.1\bin\hostpost). Écrasez l'ancienne dll (jvm.dll).
  • Ré-exécutez Forms pour voir si le formulaire s'affiche correctement à l'écran.

Abed

dimanche 20 décembre 2009

Projet - partie 3 (suite).

Génération de la BD physique


L’étape suivante de notre travail sera la génération de la BD physique à partir des informations collectées jusqu'à présent au niveau du RON.

Il faut noter que l’on a fait un certain nombre d’affinage au niveau du modèle logique obtenu à partir du DDT et du modèle conceptuel en entrée.


Au niveau du Design editor, on va utiliser le Server generator pour générer les objets physiques qui seront utilisés pour le stockage de l’information.

On pourra soit générer les commandes DDL au niveau de scripts livrables au DBA, soit des commandes DDL qui seront exécutées sur une Base cible local ou distante.


Objectif

  • Création des tables et des objets afférents du système RESIDENCE LESOLEIL


Étant donné que l’on a créé un seul server model au niveau de notre système, on veillera à ouvrir ce modèle par le Design Editor et de choisir l’option de génération telle que le montre la figure suivante :







Par exemple le DDL nécessaire pour la création de la table IMM_PAIEMENTS est :

PROMPT Creating Table 'IMM_PAIEMENTS'

CREATE TABLE IMM_PAIEMENTS

(NUM_PAIEMENT NUMBER(10) NOT NULL

,LOC_CODE_LOCATAIRE NUMBER(10)

,DATE_PAYEMENT DATE NOT NULL

,MODEPAIEMENT CHAR(1) NOT NULL

,MONTANT NUMBER(10,2) NOT NULL

,ETAT CHAR(1) NOT NULL

,CREATED_BY VARCHAR2(15)

,MODIFIED_BY VARCHAR2(15)

,CREATED_DATE DATE

,MODIFIED_DATE DATE

)

/


Il est important de constater que le script de création des contraintes contient les commandes suivantes :


PROMPT Creating Check Constraint on 'IMM_PAIEMENTS'

ALTER TABLE IMM_PAIEMENTS

ADD (CONSTRAINT AVCON_1260123002_MODEP_000 CHECK (MODEPAIEMENT IN ('C', 'H', 'R', 'D')))

/

PROMPT Creating Check Constraint on 'IMM_PAIEMENTS'

ALTER TABLE IMM_PAIEMENTS

ADD (CONSTRAINT AVCON_1260123002_ETAT_000 CHECK (ETAT IN ('P', 'N')))

/

PROMPT Creating Check Constraint on 'IMM_LOCATAIRES'

ALTER TABLE IMM_LOCATAIRES

ADD (CONSTRAINT AVCON_1260123002_STATU_000 CHECK (STATUT IN ('A', 'I')))


Celles-ci implémentent les contraintes portant sur les domaines. Dans le cas où l’on voudrait implémenter ces contraintes au moyen de la table CG_REF_CODES, on procèdera de la manière suivante :

Pour chaque colonne et domaine qui ont des valeurs autorisées (allowable values), on mettra la propriété –Dynamic List- sur Yes.




On voit que le STATUT de locataire est un domaine.


Ensuite, on doit y aller au nœud pour chercher le domaine STATUT_LOCATAIRE. En appuyant sur F4 pour changer Dynamic List à yes.



En cliquant sur le menu de création de la table CG_REF_CODES comme montré ci-après :



On obtient le script de création de la table CG_REF_CODES suivant :


SPOOL CG_REF_CODES.lst

PROMPT Creating REF_CODES Table CG_REF_CODES and Indexes

CREATE TABLE CG_REF_CODES

(RV_DOMAIN VARCHAR2(100) NOT NULL

,RV_LOW_VALUE VARCHAR2(240) NOT NULL

,RV_HIGH_VALUE VARCHAR2(240)

,RV_ABBREVIATION VARCHAR2(240)

,RV_MEANING VARCHAR2(240)

)

/

CREATE INDEX X_CG_REF_CODES_1 ON CG_REF_CODES

(RV_DOMAIN

,RV_LOW_VALUE)

/

PROMPT Allowable Value Script

DELETE FROM CG_REF_CODES WHERE RV_DOMAIN = 'MODE_PAIEMENT'

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('MODE_PAIEMENT', 'C', '', '', 'Comptant')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('MODE_PAIEMENT', 'H', '', '', 'Chèque')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('MODE_PAIEMENT', 'R', '', '', 'Crédit')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('MODE_PAIEMENT', 'D', '', '', 'Dépot direct')

/

DELETE FROM CG_REF_CODES WHERE RV_DOMAIN = 'LOYER'

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('LOYER', 'P', '', '', 'Payé')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('LOYER', 'N', '', '', 'Non payé')

/

DELETE FROM CG_REF_CODES WHERE RV_DOMAIN = 'STATUT_LOCATAIRE'

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('STATUT_LOCATAIRE', 'A', '', '', 'Actif')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('STATUT_LOCATAIRE', 'I', '', '', 'Inactif')

/

DELETE FROM CG_REF_CODES WHERE RV_DOMAIN = 'STATUT_APPT'

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('STATUT_APPT', 'V', '', '', 'Vaccant')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('STATUT_APPT', 'O', '', '', 'Occupé')

/

DELETE FROM CG_REF_CODES WHERE RV_DOMAIN = 'TYPE_APPT'

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('TYPE_APPT', 'T', '', '', 'Tous inclut')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('TYPE_APPT', 'R', '', '', 'Rien inclut')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('TYPE_APPT', 'C', '', '', 'Chauffé')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('TYPE_APPT', 'N', '', '', 'Non chauffé')

/

DELETE FROM CG_REF_CODES WHERE RV_DOMAIN = 'ETAT_REPARATION'

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('ETAT_REPARATION', 'E', '', '', 'En attente')

/

INSERT INTO CG_REF_CODES

(RV_DOMAIN, RV_LOW_VALUE, RV_HIGH_VALUE, RV_ABBREVIATION, RV_MEANING)

VALUES

('ETAT_REPARATION', 'R', '', '', 'Réparé')

/

COMMIT

/

PROMPT

PROMPT Finished.

SPOOL OFF



Étant donné que l’on a apporté des affinages au modèle logique, on doit aussi générer les

API de table afin de générer les triggers et package nécessaires pour la vérification des différentes contraintes.

On procède de la même manière que précédemment en sélectionnant le menu suivant :




On vérifie que pour chaque table sélectionnée, on obtient plusieurs fichiers avec l’extension .pkb (package body), pks (package spécifications) et .trg (triggers).

Exécution des scripts sous SQL PLUS :

On va lancer trois scripts (fichiers .sql) : DDL_RES_SOL.SQL, CG_REF_CODES.SQL, api_res_sol.SQL

Description des tables de notre schéma : 8 tables et 2 tables de journalisation.
























Dans la prochaine étape, on va procéder la création des modules de notre système pour ORACLE FORMS à partir de Design Editor.