michelc Blog

Just <strong>another</strong> WordPress.com weblog

Archive for the ‘QC’ Category

Contrôles de liste d’options

with 3 comments

Lorsque on utilise un contrôle CheckBoxList ou un contrôle RadioButtonList, il ne faut pas oublier d’utiliser RepeatLayout= »Flow » et RepeatDirection= »Horizontal » pour éviter que le contrôle soit rendu côté client par une table et des balises <tr> et <td>.

Si on souhaite que les différents choix apparaissent verticalement, il faut utiliser RepeatDirection= »Vertical » au lieu de RepeatDirection= »Horizontal » de façon à générer une balise <br /> entre les différentes options. Dans ce cas, il faut également définir la classe par CssClass= »std radiov » et pas simplement CssClass= »std » pour que les options soient correctement alignées les unes sous les autres et pas cadrées complètement à gauche de l’écran.

Written by michel

12 octobre 2006 at 11:29

Publié dans QC

Définition de données avec QC

leave a comment »

Les « pseudo-types » de données de QC présentaient quels types de données utiliser avec QC.

Pour parvenir à ce résultat, on peut créer les tables dont on a besoin directement dans Access, TOAD, SQL Server Enterprise Manager… pour la base de données cible en veillant à bien respecter ces consignes.

Puis, lorsque le besoin d’utiliser une autre base de données se présente, il suffit de recréer les tables à l’identique dans l’autre base de données. Si on a été un peu prévoyant et que l’on dispose des scripts SQL de création de la base de données, il est possible de les modifier à coup de rechercher / remplacer pour les traduire de la syntaxe de la base de données source dans celle la base de données cible.

  • Avantage : on ne se complique pas la vie tant qu’on a pas besoin de changer de base de données.
  • Inconvénient : pas toujours évident d’avoir des scripts à jour (ou de pouvoir les regénérer) et le rechercher / remplacer ne fait pas tout.

Lorsqu’il est très probable que l’application devra être multi bases (ou lorsque la base de données cible n’est pas encore définie au début du projet), il est possible de rédiger les scripts de création de la structure de la base de données directement dans une syntaxe « multi-base ».

L’outil de requêtes disponible avec QC supporte un certain nombre de commandes DDL (Data Definition Language) qui couvrent la majorité des cas rencontrés dans les scripts de création et de mise à jour des tables d’une base de données relationnelle.

Créer une table, sa clé primaire et un index

/* Create table
*/
CREATE TABLE test_Parametres (
idParametre AUTOINCREMENT,
libelle TEXT(100)
);
GO;

/* Create primary key
*/
ALTER TABLE test_Parametres
ADD CONSTRAINT PK_test_Parametres PRIMARY KEY (idParametre);
GO;

/* Create index
*/
CREATE UNIQUE INDEX UK_test_Parametres_libelle ON test_Parametres (libelle);
GO;

Créer une table, une clé étrangère et un index

/* Create table and primary key
*/
CREATE TABLE test_Donnees (
  idDonnee AUTOINCREMENT,
  vraiFaux BOOLEAN,
  petitEntier SMALLINT,
  entier INT,
  grandEntier BIGINT,
  simplePrecision SINGLE,
  doublePrecision DOUBLE,
  desSous CURRENCY,
  texteLong TEXT(2000),
  texteCourt TEXT(100),
  texteMemo MEMO,
  jourHeure DATETIME,
  idParametre INT,
  CONSTRAINT PK_test_Donnees PRIMARY KEY (idDonnee)
);
GO;

/* Create foreign key
*/
ALTER TABLE test_Donnees
ADD CONSTRAINT FK_test_Donnees_Parametres FOREIGN KEY (idParametre) REFERENCES test_Parametres (idParametre) ON DELETE CASCADE ON UPDATE CASCADE;
GO;

/* Create index
*/
CREATE INDEX IK_test_Donnees_texteCourt ON test_Donnees (texteCourt);
GO;

Notes :

  • dans ce cas, la création de la clé primaire a été définie au niveau de la commande CREATE TABLE.
  • ON UPDATE CASCADE n’est pas directement supporté avec Oracle

Modifier une table

/* Add a column
*/
ALTER TABLE test_Donnees ADD COLUMN autreChamp TEXT(50);
GO;

/* Modify a column
*/
ALTER TABLE test_Donnees MODIFY COLUMN autreChamp TEXT(100);
GO;

/* Rename a column
*/
ALTER TABLE test_Donnees RENAME COLUMN autreChamp TO autreTexte;
GO;

/* Remove a column
*/
ALTER TABLE test_Donnees DROP COLUMN autreTexte;
GO;

Note : RENAME COLUMN ne fonctionne pas avec Access et MySQL.

Faire du ménage

DROP TABLE test_Donnees;
GO;

DROP TABLE test_Parametres;
GO;

Written by michel

5 octobre 2006 at 10:06

Publié dans QC, sql

Google Gadgets sur mon site

leave a comment »

Pas mal! Google nous livre tout plein de petits trucs à inclure sur un site : des jeux (pacman, patience, sudoku…), des outils (cartes, calendrier, horloge, calculatrice…), des machins communicants (traduction, messenger, dictionnaire et même sms mais us only ?), etc…

Une fois réglé le petit souci de dimensionnement (dû à l’iframe ou à la css ?) tous ces gadgets Google semblent parfaitement utilisables via une boite Htmlfile de QC.

De quoi se faire un mini-mini Netvibes personnel pour pas cher et sans trop de boulot.

Vu sur Hotlinks

Written by michel

4 octobre 2006 at 10:19

Publié dans QC

Les « pseudo-types » de données de QC

with one comment

QC étant destiné à être multi base de données, il est nécessaire de prendre un certain nombre de précautions pour tout ce qui concerne SQL, qu’il s’agisse des requêtes ou des types de données.

Pour les requêtes on verra plus tard, pour les types de données, c’est ici.

Pour faciliter le développement multi base de données voire simplifier la migration d’une base de données à l’autre, QC ne gère qu’un sous-ensemble de types de données, qui fonctionnent de façon plus ou moins identique dans la plupart des bases de données.

La liste des « pseudo-types » de données reconnues par QC est la suivante :

  • AUTOINCREMENT
  • BOOLEAN
  • SMALLINT
  • INT
  • BIGINT
  • SINGLE
  • DOUBLE
  • CURRENCY
  • TEXT(2000)
  • TEXT
  • MEMO
  • DATETIME
  • DATE
  • TIME
  • BINDATA

Remarques :

  • Pour le type de données TEXT, il faut impérativement définir une longueur comprise entre 1 et 255 ou strictement égale à 2000.
  • Il est conseillé d’éviter d’utiliser des données de types CURRENCY (n’existe réellement que sous Access et Sql Server) et BINDATA.
  • Le type DATE et le type TIME ne doivent pas être utilisés. Ils sont uniquement destinés à gérer des tables déjà existantes pour lesquelles il serait impossible de modifier le type de données.

Transposition pour une base de données Access

  • AUTOINCREMENT : INT NOT NULL IDENTITY (1, 1)
  • BOOLEAN : BIT
  • SMALLINT : SMALLINT
  • INT : INTEGER
  • BIGINT : LONG
  • SINGLE : REAL
  • DOUBLE : DOUBLE PRECISION
  • CURRENCY : MONEY
  • TEXT(2000) : MEMO
  • TEXT : TEXT
  • MEMO : MEMO
  • DATETIME : DATETIME
  • DATE : DATE
  • TIME : TIME
  • BINDATA : IMAGE

Transposition pour une base de données Sql Server

  • AUTOINCREMENT : INT NOT NULL IDENTITY (1, 1)
  • BOOLEAN : BIT
  • SMALLINT : SMALLINT
  • INT : INTEGER
  • BIGINT : BIGINT
  • SINGLE : REAL
  • DOUBLE : DOUBLE PRECISION
  • CURRENCY : MONEY
  • TEXT(2000) : NVARCHAR(2000)
  • TEXT : NVARCHAR
  • MEMO : NTEXT
  • DATETIME : DATETIME
  • DATE : DATETIME
  • TIME : DATETIME
  • BINDATA : IMAGE

Transposition pour une base de données Oracle

  • AUTOINCREMENT : INT NOT NULL
  • BOOLEAN : NUMBER(1,0)
  • SMALLINT : NUMBER(5,0)
  • INT : NUMBER(10,0)
  • BIGINT : NUMBER(20,0)
  • SINGLE : FLOAT(24)
  • DOUBLE : FLOAT(48)
  • CURRENCY : NUMBER(19,1)
  • TEXT(2000) : VARCHAR2(2000)
  • TEXT : VARCHAR2
  • MEMO : CLOB
  • DATETIME : DATE
  • DATE : DATE
  • TIME : DATE
  • BINDATA : BLOB

Dans le cas du pseudo-type AUTOINCREMENT, l’incrémentation automatique est simulée à l’aide :

  • d’une séquence SEQ_NomTable,
  • d’un trigger before insert TRG_BI_NomTable

Transposition pour une base de données PostgreSQL

  • AUTOINCREMENT : BIGSERIAL
  • BOOLEAN : NUMERIC(1)
  • SMALLINT : INT2
  • INT : INT4
  • BIGINT : INT8
  • SINGLE : FLOAT4
  • DOUBLE : FLOAT8
  • CURRENCY : NUMERIC(16,4)
  • TEXT(2000) : VARCHAR(2000)
  • TEXT : VARCHAR
  • MEMO : TEXT
  • DATETIME : TIMESTAMP WITHOUT TIME ZONE
  • DATE : DATE
  • TIME : TIME
  • BINDATA : BYTEA

Transposition pour une base de données MySQL

  • AUTOINCREMENT : INT AUTO_INCREMENT
  • BOOLEAN : TINYINT(1)
  • SMALLINT : SMALLINT
  • INT : INTEGER
  • BIGINT : BIGINT
  • SINGLE : FLOAT
  • DOUBLE : DOUBLE PRECISION
  • CURRENCY : DECIMAL(16,4)
  • TEXT(2000) : TEXT
  • TEXT : VARCHAR
  • MEMO : MEDIUMTEXT
  • DATETIME : DATETIME
  • DATE : DATE
  • TIME : TIME
  • BINDATA : MEDIUMBLOB

Written by michel

27 septembre 2006 at 5:42

Publié dans QC, sql

Déployer un projet QC sur un serveur ASP.NET

leave a comment »

Créer le fichier QC_Deploy.bat sur C:\ ou D:\ selon que l’on travaille avec C:\Portals ou D:\Portals et y insérer les lignes suivantes (en modifiant D:\ en C:\ si nécessaire) :

IF "%1" == "" GOTO Finito

REM ---------- Recopie le répertoire principal

XCOPY D:\Portals\%1\*.* D:\Portals\%1_ftp\ /S /Y /EXCLUDE:D:\QC_deploy.txt
XCOPY D:\Portals\%1\*.css D:\Portals\%1_ftp\ /S /Y

:Finito

Créer également le fichier QC_Deploy.txt sur C:\ ou D:\ pour indiquer les fichiers à exclure du déploiement :

\Engine\bin
\Engine\refs
\Classic\bin
\Framework
\BDHelper
.pdb
.cs
.resx
.csproj
.sln
.webinfo
.bak
.sql
.zip
.rar

Dans le cas où il s’agit de déployer une solution basée sur le framework QC, il est nécessaire d’ajouter le sous-répertoire bin des projets contenus dans la solution après la ligne « \Classic\bin ».

...
\Classic\bin
\Mon_Projet_Numero_1\bin
\Mon_Projet_Numero_2\bin
\Framework
...

Passer ensuite sous l’invite de commandes, sur la racine C:\ ou D:\, et taper la commande QC_Deploy qc puis appuyer sur Entrée. Cela crée un répertoire X:\Portals\qc_ftp qui ne contiend que les fichiers à déployer sans aucun fichier source ou autres fichiers inutiles. Il suffit alors de transférer (généralement par ftp) ces fichiers sur le serveur de production.

Written by michel

26 septembre 2006 at 6:00

Publié dans QC

Trucs à faire

leave a comment »

Pour ne pas oublier :

  • OK : Auto-login quand on est sur localhost,
  • Tâche planifiée pour sauvegarder la base de donnée (si .mdb) lorsqu’elle a été modifiée (pour PI),
  • OK : Gérer l’authentification par défaut sur smtp.gmail.com,
  • OK : Problème sur le module Feedback quand on fait saisir un n° de téléphone.

Et aussi :

  • OK : {@user.dns} et {@user.ip} pas gérés correctement dans _feedback.txt.
  • OK : Générer _dumpdb_xxxxx.sql dans le sous-répertoire data.

Ayé! quasiment tout fait.

Written by michel

20 septembre 2006 at 10:03

Publié dans PI, QC

Débuguer un formulaire personnalisé

leave a comment »

Il est possible d’ajouter un champ caché pour mettre au point le formulaire personnalisé : <input type="hidden" name="_debug" value="true" />

A partir du moment où ce champ est présent dans le formulaire (et quelle que soit sa valaur), le destinataire, le sujet et contenu du mél sont affichés ainsi que le message d’erreur éventuel.

Written by michel

10 Mai 2006 at 12:36

Publié dans QC

Boite de dialogue dlgFiles

leave a comment »

Modification des fichiers dlgFiles.aspx.cs et popupDialog.js pour rendre l’utilisation de la boite de dialogue d’exploration de fichiers un peu plus flexible.

  • le répertoire par défaut est revenu à /data/,
  • le téléchargement de fichiers se fait dans le répertoire en cours (et plus uniquement dans /data/),
  • il est désormais possible de configurer le répertoire initial dans la fonction InputHelper.attachInputFile().
  • En fait, pour aller encore plus loin, il faudrait pouvoir paramétrer s’il est possible de télécharger des fichiers, leur taille, leur type…

Written by michel

3 Mai 2006 at 9:38

Publié dans QC

Validité des boites Htmltext

leave a comment »

Avant son enregistrement en base de données, le code HTML renvoyé par l’éditeur wysiwyg subi les vérifications suivantes :

  • remplacement de l’apostrophe penchée de Word «’» par une apostrophe simple «’»,
  • remplacement des trois points de suspension de Word «…» par trois vrais points «…»,
  • si nécessaire, ajout de la balise fermante «/li» aux listes «ul» et «ol» étant donné que IE ne le fait pas.

Written by michel

14 avril 2006 at 1:43

Publié dans QC

Configuration AdSense

leave a comment »

Amélioration de la partie configuration des AdSense dans le cas où on sélectionne une présentation correspondant à des publicités de type « Link Unit ». Lorsque c’est le cas et que le type de publicité n’a pas été défini à « 4 Links unit » ou « 5 Links unit », il est automatiquement réinitialisé à « 4 Links unit ».

De la même façon, si la présentation sélectionnée ne correspond pas des « Link Unit » alors que le type est défini à « 4 Links unit » ou « 5 Links unit », le type est réinitialisé à « Défaut ».

Written by michel

12 avril 2006 at 8:53

Publié dans QC