Exporter un DBGrid vers un fichier XML
Principe de fonctionnement
L’export repose sur une logique simple :
Parcourir le dataset associé au TDBGrid
Pour chaque enregistrement, créer une balise <Record>
Pour chaque champ, générer une balise portant le nom du champ et contenant sa valeur
Sauvegarder le tout dans un fichier XML bien formé (utf‑8, version 1.0)
{ Exporte les données du DBGrid dans un fichier XML.
L'export se fait en parcourant le dataset associé et en créant pour chaque ligne une balise <Record>
contenant pour chaque colonne une balise dont le nom est le nom du champ et le contenu la valeur de la cellule. }
procedure TForm1.ExportDBGridToXML(Grid: TDBGrid; const AFileName: string);
var
XMLDoc: IXMLDocument;
RootNode, RecordNode, FieldNode: IXMLNode;
i: Integer;
begin
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.Active := True;
XMLDoc.Version := '1.0';
XMLDoc.Encoding := 'utf-8';
// Crée le noeud racine
RootNode := XMLDoc.AddChild('Records');
// On désactive temporairement les contrôles du dataset pour améliorer la performance
Grid.DataSource.DataSet.DisableControls;
try
Grid.DataSource.DataSet.First;
while not Grid.DataSource.DataSet.Eof do
begin
// Pour chaque enregistrement, on ajoute un noeud <Record>
RecordNode := RootNode.AddChild('Record');
// Pour chaque colonne du grid, on récupère la valeur du champ et on l'ajoute en tant que noeud enfant
for i := 0 to Grid.Columns.Count - 1 do
begin
if Assigned(Grid.Columns[i].Field) then
begin
FieldNode := RecordNode.AddChild(Grid.Columns[i].Field.FieldName);
FieldNode.Text := Grid.Columns[i].Field.AsString;
end;
end;
Grid.DataSource.DataSet.Next;
end;
finally
Grid.DataSource.DataSet.EnableControls;
end;
// Enregistre le document XML dans le fichier spécifié
XMLDoc.SaveToFile(AFileName);
end;
{ Au clic sur le bouton, on exporte les données du DBGrid dans un fichier XML }
procedure TForm1.ButtonExportClick(Sender: TObject);
begin
ExportDBGridToXML(DBGrid1, 'export.xml');
ShowMessage('Données exportées vers export.xml');
end;Un petit clic (J'aime) qui fait plaisir !