Bonjour,
Mon application tente d'être "Multi DB" à partir des composant ADO (ADOQuery et ADOCommand uniquement).
Après avoir développé pour MySql (Via ADO > ODBC), je tente de rendre mon application compatible Access (JET 4.0). La DB est entièrement gérée par l'application (CREATE TABLE, ALTER, ...) j'ai patiemment converti mes scripts de création MySQL vers ACCESS et notamment une table "Users"
Deux types de champ me posent problème :
En MySQL : converti en Acceess par :
TEXT ...........> LONGTEXT
LONGBLOG ...........> LONGBINARY
est-ce correct ?
Concernant les champs TEXT :
l' AJOUT (update) se fait via :
// RIGHTS est un champ TEXT en MySql ou LONGTEXT en access
// ID_USERS est la clé primaire.
et ce de manière identique (générique) en MySql et Access et cela fonctionne, les données sont bien enregistrées dans la table..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ADOQuery := TADOQuery.Create( nil ) ; ADOQuery.Connection := ADOConnection ; ADOQuery.SQL.Clear ; AdoQuery.ParamCheck := False ; AdoQuery.SQL.Add( 'UPDATE USERS SET RIGHTS=? '+ 'WHERE (ID_USERS='+QuotesInteger(ID)+')' ) ; P := AdoQuery.Parameters.AddParameter ; P.Name := 'RIGHTS' ; P.LoadFromStream( Stream, ftMemo ) ; ADOQuery.Prepared := True ; try ADOQuery.ExecSQL ; except ....
Remarque : en MySql l'ID doit être entouré de Quotes (') par en access dans la clause WHERE
Par contre pour la relecture :
// DataSet contient le résultat d'une requète sur la table (SELECT * ...)
.....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Stream := DataSet.CreateBlobStream( DataSet.FieldByName('RIGHTS'), bmRead ) ; Strings := TStringList.Create ; Strings.LoadFromStream( Stream ) ;
Et bien SEUL le premier caractère du champ LONGTEXT se retrouve dans le Strings[0]. en mode Access, par contre en MySql cela fonctionne, tout le memo est bien dans le TStrings.
Si j'utilise :
DataSet.FieldByName( 'RIGHTS' ).AsString
j'ai tout le contenu dans 1 string .... mais alors j'ai par vraiment la notion de "Memo' et quid de la taille du string si le memo est "gros" de plus mon idée d'objet générique SQL se voit déjà entaché de test selon le serveur utilisé.
Any Idea
Partager