Le premier site francophone dédié au développement Pocket PC

Création d'une application CEDB en EVC : généralités et méthodes
Auteur
Jean-François Poirier
Date 28 marsl 2003
 
   


Difficulté de l'article:
Fichier zip utilitaires : article1.zip

Analyser le produit, concevoir les bases de données

Un produit que l'on devra créer sur PDA permettra de saisir les informations SUR LE TERRAIN. Le produit peut donc être utilisé dans plusieurs corps de métier : BTP, Médecine, Industries, Services, Interventions, Commercial, Métiers de bouche…

Ce futur produit qui doit être mis en place doit respecter plusieurs objectifs :

Permettre de saisir RAPIDEMENT sur le terrain les informations UTILES en moindre quantité (informations sur le client, sur sa demande, mais aussi informations sur le temps passé, le salarié concerné…)
Permettre de saisir AISEMMENT, afin d'omettre tout risque d'erreur ou d'acharnement sur la machine.

Une fois les informations saisies, le produit doit permettre à l'utilisateur d'importer les données sur son PC pour le traitement des données. 2 méthodes sont possibles :

Importations depuis ActiveSync©
Importations par méthode " remote " (on passe par un fichier temporaire non-converti par ActiveSync) que l'on transfert via rapi, la télécommande PC-PDA fournie par Microsoft)

Ainsi, il faut :

Eviter de saisir trop d'informations en masse sur le PDA sans importer celles-ci à une fréquence donnée. Cela dépendra de l'activité de l'entreprise, du nombre de PDA, du nombre de saisies effectuées par jours etc… Il faudra, si un " collecteur " est developpé (une application traitant les données importées), créer un outil interne à celui-ci rapellant la fréquence d'import des données en fonctions des paramètres de l'entreprise.
Optimiser AU MAXIMUM le traitement des données sur l'application CE. La plupart des développeurs prennent de " mauvaises habitudes " lorsqu'ils développent sur Embedded VC++, car ils résonnent comme s'ils programmaient en VC++. Cependant, le moteur ADOCE sous winCE est très sensible : il sature au bout d'un milliers d'enregistrements traités et n'accepte pas les requetes SQL complexes.
De plus, contrairement à ADO, il n'affiche aucun message d'erreur : si un champs est manquant, le curseur " sablier " continue de tourner sur l'écran du PDA, malgrès les " TRY…CATCH ".
L'optimisation consiste :
À BANNIR les opérations bénins qui pourtant marchent sous Win32 (parcourir n fois une table, n étant un indice de boucle, pire si la boucle est faite sur une autre table !)
EVITER AU MAXIMUM les fermetures et ré-ouvertures continuelles de tables, même si cela pourrait s'avérer le meilleur moyen de s'approcher de notre " m_strFilter…table.Requery() " sous VC++
Créer des fonctions qui IRRÉMÉDIABLEMENT suppriment doublons ou tout autre enregistrement nuisible, pouvant empêcher la lecture des données.
Enfin, si le produit sera créé sous émulateur avant d'être compilé pour la machine, il faut IMPÉRATIVEMENT tester ce même produit sur l'émulateur ET sur la machine EN MÊME TEMPS pendant sa conception.

Créer les fichiers CDB pour l'émulation et la machine

Utiliser ActiveSync et/ou Pocket Access

Il faut en premier lieu créer les bases de données qui seront utilisées par les applications, selon qu'elles soient développées et testés sur machine et/ou sur émulateur. D'abord, les créer sous Access 97 ou 2000. Ensuite, les convertir au format CDB pour l'émulateur et/ou la machine-cible.

Sur HPC2/11 (émulateur Handled PC)

Étant donné qu'il est IMPOSSIBLE sur PC de copier quelconque CDB (les bases reposent dans le système émulé), il faut les créer à la main.Il faut donc démarrer Pocket Access et selon le même modèle que Access sur PC créer les bases depuis le début et les sauvegarder. C'est plutôt frustrant mais il n'y a pas d'autres moyens connus.


L'émulateur HPCPro avec Pocket Access en route.

 

Sur PocketPC ou PalmSize PC

Il n'y a pas Pocket Access mais on peut copier des fichiers CDB créés dans le système. Le chemin est : "C:\Program Files\Windows CE Tools\". Dans ce dossier, il faut aller dans le dossier correspondant à la version de winCE et ensuite aller dans le dossier correpondant à la plateforme. Voir ci-dessous (partie 3) pour la création d'un ficher cdb pour émulateur, car ActiveSync ne le gère pas et LES BASES CDB SOUS EMULATEURS ET SOUS LA MACHINE SONT DIFFERENTS ET INCOMPATIBLES.

Sur machine

Il suffit simplement de copier/coller le fichier MDB vers le PDA.

Attention ! Le fichier est mis par défaut dans "My Documents". Il est possible de changer ce répertoire de destination sur certaines machines. N'oubliez pas, dans ActiveSync, de faire "Outils>Paramètres de conversion", afin de cocher ou décocher l'option "Convertir les fichiers synchronisés, copiés ou déplacés". La conversion vous demandera les tables à convertir et vous renseignera sur l'état d'avancement de cette conversion vers votre PDA.

Créer un fichier CDB pour émulateur sans Pocket Access

Pour cela, il faut disposer d'une application, appellée " MDBTOTDB ".

Elle est disponible dans le fichier ZIP que vous pouvez trouver avec cet article. Transférez mdbtocdb.exe dans un dossier du PC (avec un raccourci de préférence) et tdbtocdb.vb dans l'émulateur dans : "C:\windows ce tools\%versionCE%\%machine%\emulation\…\windows\start menu " où :

%versionCE% est le dossier de windows (wce300 par exemple pour CE3.00)
%machine% est le dossier correspondant à la machine.

Dans le cas du pocket PC, principalement, placer le programme vb dans "C:\Windows CE Tools\wce300\MS Pocket PC\emulation\palm300\windows\start menu".

Démarrer l'exécutable et choisir le fichier Access MDB (en ayant pris soin de le nettoyer et de compacter la base) en cliquant sur le bouton "SELECT DB". Puis, faites "Convert DB". Utilisez le bouton "Copy to Emulator" pour transférer le TDB obtenu dans "My Documents\" sur l'émulateur.

Ensuite, rendez-vous dans ce dossier (là aussi, créer un raccourci est très utile). Exécutez le bloc-note (ou wordpad) et ouvrez le TDB. Il faut alors corriger le TDB car il est francisé. Il faut donc remplacer en priorité les "vrai" et "faux" par "true" et "false", mais aussi supprimer les lignes vides.

Une fois le fichier TDB nettoyé, exécutez le TdbToCdb depuis l'émulateur. Cliquez sur "Select TDB", choisissez le et cliquez sur "Create Tables".Après un moment d'attente, le message " CDB Successfully generated" s'affichera. Si en bas, dans la liste des erreurs SQL, des requêtes s'affichent, provoquant l'arrêt de la conversion, vous devez vérifier votre TDB.


Il y a des chances pour qu'au moment où vous cliquez sur "Select TDB" une erreur se produise. Pour cela, démarrer eVB et faites "Outils->Platform Manager". Sélectionnez votre plate-forme puis votre environnement et enfin veillez à ce que tous vos contrôles soient à "Yes" en Design comme en Emulation.

Fermez tout et redémarrez l'émulateur si nécessaire (il démarre automatiquement quand vous sélectionnez votre environnement afin de vérifier l'état de chaque contrôle). Exécutez à nouveau TdbToCdb puis sélectionnez votre TDB et enfin convertissez la en CDB.

Note : si vous devez changer une structure, il vous faudra tout recommencer.

Fichiers ADOCE

Les fichiers ADOCE (Access Database Object for windows CE), sont une série de fichiers CPP,C et H, que vous devez inclure dans votre projet, et qui seront utilisés par les classes de bases CVOConnection et CVORecordset (voir plus bas).

Cependant, pour créer ces fichiers, vous devez connaître la méthode qui n'est pas si simple :

Vous devez en premier lieu vous procurer DATAACCESS31, fournie avec le SDK de développement, où téléchargeable sur le site de Microsoft.
Ensuite, copiez les fichiers ADOCEC31.IDL, ADOCE31IDL, ADOXCE31.IDL depuis "C:\windows CE Tools\dataaccess31\include"

Collez ces fichiers dans le dossier " include " du SDK concerné.

Pour le Pocket PC, par exemple, il s'agit de "C:\Windows CE Tools\wce300\MS Pocket PC\include".

Ouvrez un explorateur et selon le processeur de votre machine mais aussi en fonction de la version de CE, allez dans le dossier "bin" correspondant.

Par exemple, si vous utiliser CE3.00 et processeur ARM, allez dans : "C\Program Files\Microsoft Embedded Tools\EVC\WCE300\BIN\". Repérez le fichier wceYYY.bat (YYY=processeur). Dans l'exemple, il s'agit de wcearm.bat.

Vous devez établir le chemin complet d'acces au fichier sous DOS (chaque mot est limité à 8 lettres, et si 2 dossiers ont le même début de nom, on les reconnait via un " tilde ~" suivi du numéro en fonction du classement).

Nous allons grâce aux IDL générer les fichiers C, CPP et H. Pour cela, ouvrez une fenêtre de commande (pour aller plus vite "Démarrer->Exécuter" puis tapez "command" et OK. Ensuite tapez la commande qui va exéuter le fichier BAT.

Enfin, établissez les chemins complets DOS des fichiers IDL copiés auparavant et celui de l'exécutable MIDL.EXE (qui se trouve dans le SDK) et exécutez MIDL autant de fois qu'il faut avec comme paramètre chaque IDL. Vous retrouverez les fichiers H,CPP et C. Le compilateur ira les chercher tout seul.

Classes VO

Les classes CVOConnection et CVORecordset permettent d'éviter de programmer les instructions de bases, un peu comme si l'on reprogrammait DAO sous Win32. Elles permettent la connexion sur vos bases CDB mais aussi la création et l'exploitation des objets COM Recordset. Ces classes permettent d'obtenir un moyen fiable et proche (au niveau programmation) aux classes CDaoRecordset sous Win32. Elles sont disponibles sur le site de VIRTUAL OFFICE SYSTEM :

http://www.voscorp.com/asp/PPC/Dev/default.asp


Une fois ces classes incluses dans votre projet, il faut les adapter à la version de ADOCE qui sera utilisée au moment de la compilation et donc songer à devoir posséder la version de la DLL correspondante (voir plus bas partie 6) . Actuellement, la version la plus récente est la 3.1.

L'utilisation d'une version ADOCE dépend surtout de l'environnement (émulation ou machine). Ici, en fonction de la version de CE, on préférera utiliser ADOCE 3.0 ou 3.1, prise en charge ou non par l'OS.

Par exemple, la machine HANDLED PC utilise CE 3.00 et son émulateur de type HPCPro 2/11 la version CE 2.11. On préférera utiliser 3.0 sur l'émulateur et 3.1 sur la machine.

Ainsi, il vous faut programmer le compilateur. Pour cela, utilisez les opérateurs #ifdef/#ifndef…#else…#endif

#include <COMDEF.H>

#if (_WIN32_WCE > 211)
#include <ADOCE31.H>
#else
#include <ADOCE30.H>
#endif

const IID IID__Connection = { 0x113033de, 0xf682, 0x11d2, { 0xbb, 0x62,
0x00, 0xc0, 0x4f, 0x68, 0x0a, 0xcc}};

void __stdcall _com_issue_error(HRESULT m_hr)
{
TCHAR pcszError[1024]; _stprintf(pcszError, TEXT("_com_issue_error(%ld)\n"), m_hr); OutputDebugString(pcszError); } BOOL CVOConnection::g_Init = FALSE; CLSID CVOConnection::g_ClsID; #if (_WIN32_WCE > 211) TCHAR* CVOConnection::g_ProgID = TEXT("ADOCE.Connection.3.1"); #else TCHAR* CVOConnection::g_ProgID = TEXT("ADOCE.Connection.3.0"); #endif

LES DLLs

Enfin, une fois votre application réalisée, et une fois celle-ci copiée sur votre PDA, vous devez être sûr que les DLLs ADOCE soient d'une part présente dans le dossier " \windows\ " de votre machine (adoce30.dll ou adoce31.dll) mais aussi les dlls relatives à ADOCE (adoce, adocedb, adoceoledb, adoceres, adoxce).

Il vous faut alors enregistrer celles-ci, afin que le système puisse, depuis votre application, repérer le chemin d'accès de cette DLL depuis la base de registre. Pour cela, vous devez faire "Démarrer->Executer" et taper "regsvrce "\windows\adoce31.dll" " (si vous avez la version 3.1 de adoce).

Note : Pour le pocket PC, il faut maintenir le stylet près de l'horloge tout en appuyant sur le bouton "action" pour faire apparaître la boîte de dialogue "Exécuter".

Un exécutable regsvrce2.exe est joint avec le zip "Article1" ou disponible sur le net à l'adresse suivante : http://www.cegadgets.com/regsvr2.htm. Vous pouvez télécharger cet applicatif et l'exécuter sur votre PDA. Grâce à son interface, vous pouvez y entrer le nom de votre DLL à enregistrer ou à supprimer de la base de registre.

 

Jean-François Poirier

 
   

Copyright 2001-2004 - Tous droits réservés
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.