Archive for the ‘QC’ Category
Contrôles de liste d’options
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.
Définition de données avec QC
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;
Google Gadgets sur mon site
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
Les « pseudo-types » de données de QC
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
Déployer un projet QC sur un serveur ASP.NET
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.
Trucs à faire
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.
Débuguer un formulaire personnalisé
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.
Boite de dialogue dlgFiles
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…
Validité des boites Htmltext
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.
Configuration AdSense
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 ».
Vous devez être connecté pour poster un commentaire.