Archives de septembre 2006
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
Ecrire du code SQL portable
Quelques sites de référence pour ne plus coder du SQL tête baissée et prendre les bons réflexes de la portabilité :
- SQLzoo.net – A Gentle Introduction to SQL (http://sqlzoo.net/) : idéal pour vérifier et tester sur plusieurs bases de données,
- Les fonctions dans SQL (http://sqlpro.developpez.com/cours/sqlaz/fonctions/) : tableau comparatif des différentes fonctions (ne pas tout croire les yeux fermés car certaines fonctions marquées non disponibles existent bel et bien),
- Tips on Writing Portable SQL (http://phplens.com/lens/adodb/tips_portable_sql.htm) : très orienté PHP et ADOdb mais intéressant,
- Building Truly Portable Database Applications in PHP (http://www.analysisandsolutions.com/presentations/portability/slides/toc.htm) : étude vraiment complète.
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.