bonjour à toutes et à tous...
cela faisait longtemps..normal.. grand vacance...
Voici ma problématique :
Je créer une base acces de la manière suivante :
CreationBase('c:\','mabase.mdb',4);
Avec cette procédure :
La création est fonctionnelle.
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 procedure TFPrincipal.CreationBase(Chemin, BaseAccess, MSType : string); { Valeur possible de MSType >> 07.53 pour Access 97 fichier mdb (version 8) Type 4 >> 08.50 pour Access 2000 fichier mdb (version 9) Type 5 >> 09.50 pour Access 2002 fichier mdb (version 10) } var Catalog: OLEVariant; chnx : string; begin try Catalog := CreateOleObject('ADOX.Catalog'); chnx := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'User ID=Admin;' + 'Data Source=' + Chemin + BaseAccess + ';' + 'Mode=ReadWrite;' + 'Extended Properties="";' + 'Jet OLEDB:System database="";' + 'Jet OLEDB:Registry Path="";' + 'Jet OLEDB:Database Password="";' + 'Jet OLEDB:Engine Type='+MSType+';' + 'Jet OLEDB:Database Locking Mode=1;' + 'Jet OLEDB:Global Partial Bulk Ops=2;' + 'Jet OLEDB:Global Bulk Transactions=1;' + 'Jet OLEDB:New Database Password="";' + 'Jet OLEDB:Create System Database=False;' + 'Jet OLEDB:Encrypt Database=False;' + 'Jet OLEDB:Don''t Copy Locale on Compact=False;' + 'Jet OLEDB:Compact Without Replica Repair=False;' + 'Jet OLEDB:SFP=False' ; Catalog.create(chnx); Catalog := ''; except on E: Exception do Begin Showmessage(inttostr(EOleException(E).ErrorCode)); // -2147467259 - Erreur de doublon d'une clé primaire - // -2147217897 - La Base de donnée existe déjà - // -2146825018 - propriété non trouvée end; end; end;
Maintenant j'ouvre cette base de données et je recherche la version de cette manière :
1) Lorsque j'ouvre donc ma base précédemment créée avec createBase et que j'utilise la procédure VersionDB ci-dessus, la version d'acces n'ai pas reconnu !!!
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
17
18
19
20
21
22
23 function VersionAccessDB(DB : string): Integer; Var DBEngine, Base: OLEvariant; { >> 07.53 pour Access 97 fichier mdb (version 8) Type 4 >> 08.50 pour Access 2000 fichier mdb (version 9) Type 5 >> 09.50 pour Access 2002 fichier mdb (version 10) } Begin Result := 0; try DBEngine := CreateOLEObject('DAO.DBEngine.36'); try Base := DBEngine.OpenDatabase(DB); Result := StrToInt(AnsiMidStr(Base.Properties['AccessVersion'],2,1)); finally Base := Unassigned; DBEngine := Unassigned; end; except Result := 0; end; end;
2) Si j'ouvre cette base avec Access97 et que je ferme dans la foulée, là lorsque j'utilise la procédure VersionDB j'arrive à trouver la version !!
Je sais que cela viens de Extended Properties qui ici lors de la création de la base est à "", donc j'imagine que c'est là le problème.
J'ai beau chercher en français, anglais, allemand, je trouve rien sur Extended Properties et access, enfin que des choses inutiles.
Si j'essai de faire ce genre de chose :
Extended Properties="AccessVersion=07.53"
Extended Properties=Access 07.53
Extended Properties="AccessVersion={07.53}"
Extended Properties='+'AccessVersion=07.53'+';'
Extended Properties=etc...
rien ne fonctionne.
Quelqu'un saurait me dire :
1) Pourquoi la procédure fonctionne avec une base ouverte ou créer avec access 97 (ou autre) et pas avec ma procédure de CreationBase ?
2) Existe-t-il une référence des Extended Properties quelque part et surtout la syntaxe attention lié à ACCESS
Merci pour vos lumières.
Partager