Bonjour,
j'aimerai savoir comment récupérer les types des champs d'une base de données Access. J'utilise le composant ZeosLib avec le module ZSQLMetadata mais il semble que celà ne fonctionne pas avec ce type de BDD
Bonjour,
j'aimerai savoir comment récupérer les types des champs d'une base de données Access. J'utilise le composant ZeosLib avec le module ZSQLMetadata mais il semble que celà ne fonctionne pas avec ce type de BDD
Je voulais éviter d'utiliser plusieurs composants (car je dois aussi me connecter à une base Firebird) mais je vais regarder du côté du composant ADO si tu me dis que c'est possible
J'ai pas mal recherché sur Internet mais je n'ai pas trouvé la solution pour extraire les metadata de ma base Access via ADO...est-ce que tu serais le faire BuzzLeclaire ?
Oui biensur attention ce n'est pas simple, cela m'a pris quelques jours voir semaine avant de sortir cela, je comprends que tu ne trouve pas facilement.
Il faut utiliser les schemas pour y arriver, ici j'affiche le résultat dans un StringGrid
J'ai testé pas mal d'autre schema ces 2 schemas sont les plus renseignés.
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 With ADOCnx do Begin Try Try Screen.Cursor := crHourGlass; // On fait patienter Provider := 'Microsoft.Jet.OLEDB.4.0'; LoginPrompt := False; ConnectionString :='Data Source=' + TonCheminEtTaBaseMDB + ';Persist Security Info=False'; // On envoi sur un ADOTable1 les informations des champs d'indexes OpenSchema(siIndexes, emptyparam, emptyparam, TADODataSet(ADOTable1)); ADOTable1.Open; // On envoi sur un ADOTable d'autres informations sur les colonnes (les champs) OpenSchema(siColumns, emptyparam, emptyparam, TADODataSet(ADOTable)); ADOTable.Open; {Récupération des informations sur les champs Access et Remplissage du StringGridChamps} With ADODataSet1 do Begin CommandText := 'Select TOP 1 * From [' + TaTable +']'; // Top 1 inutile d'en prendre plus ici Active := True; StringGridChamps.RowCount := FieldList.Count + 1; For i:= 0 to FieldList.Count-1 do Begin StringGridChamps.Cells[1,i+1] := IntToStr(i+1); // Numero de ligne StringGridChamps.Cells[2,i+1] := Fields[i].FieldName; // Nom du champs en texte StringGridChamps.Cells[3,i+1] := FieldTypeNames[FieldDefs[i].DataType]; // Type de Champs StringGridChamps.Cells[5,i+1] := Inttostr(Fields[i].Size); // Taille du champs With ADOTable1 do // est-ce un champs indexé ? Begin Filtered := False; Filter := 'TABLE_NAME = '+ QuotedStr(TaTable) + ' And COLUMN_NAME = ' + QuotedStr(ADODataSet1.Fields[i].FieldName); Filtered := True; // Donc on filtre sur le champ en cours de lecture If (FieldByName('PRIMARY_KEY').AsBoolean) // est-il une clé principal ? then StringGridChamps.Cells[6,i+1] := 'True' else StringGridChamps.Cells[6,i+1] := ''; if (FieldByName('UNIQUE').AsBoolean) // non ou sans doublons autorisée ? then StringGridChamps.Cells[7,i+1] := 'True' else StringGridChamps.Cells[7,i+1] := ''; end; With ADOTable do Begin Filtered := False; Filter := 'TABLE_NAME = '+ QuotedStr(TaTable) + ' And COLUMN_NAME = ' + QuotedStr(ADODataSet1.Fields[i].FieldName); Filtered := True; // Donc on filtre sur le champ en cours de lecture StringGridChamps.Cells[4,i+1] := Fields.Fields[11].AsString; // Type de champ en nombre StringGridChamps.Cells[8,i+1] := Fields.Fields[10].AsString; // Est-t-il Nullable ? end; end; Active := False; // Close; end; Except on E : Exception do Begin // Gestion des erreurs; end; end; Finally Screen.Cursor := crDefault; end; end;
N'oublis pas de remplacer :
TaTable par le nom véritable de la table
TonCheminEtTaBaseMDB par le chemin et le nom de ta base access ex : c:\essai\trucdeouf.MDB
Merci beaucoup pour ton code, ça marche impec
Par contre, est-ce que tu sais s'il est possible de récupérer la valeur par défaut de chaque champ ??
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager