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 :
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;
La création est fonctionnelle.

Maintenant j'ouvre cette base de données et je recherche la version de cette manière :

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;
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 !!!
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.