Avancement mise à jour du site
Fini de faire le tour de tous les morceaux de codes publiés sur le site Code Snippets. Ils sont désormais disponibles dans la catégorie Code Snippets et tous les liens à l’intérieur des billets qui pointaient vers l’extérieur ont été mis à jour pour lier le snippet local.
Il reste encore à terminer la reprise des billets publiés sous Blogger puis éventuellement ceux sous .Text.
Edit : Faudra aussi y synchroniser les blogmarks.
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.
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…
VS2003 – Echec de l’actualisation du projet
Après avoir fermé toutes les session de Visual Studio, Passer dans l’explorateur de fichier et aller dans le sous-répertoire :
- - Documents and Settings
- - – “userlogin” (login de l’utilisateur)
- - – - VSWebCache
- - – - – “hostname” (nom de la machine)
Et supprimer le cache du projet qui pose problème (ou éventuellement de tous les projets).
(Publié à l’origine sur http://www.bigbold.com/snippets/posts/show/1937)
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”.