Sekadar akal-akalan buat generate XML menggunakan TClientDataset. Kode ini sederhana dan telah ditulis agar semudah mungkin dibaca.
TClientDataset memiliki fitur untuk mengkonversi baris-baris data dan definis field dari sebuah TDataset ke Data Packet XML, sehingga bisa kita pake buat menggenerate data untuk dibaca oleh Microsoft Excel.
Karena sumber data adalah TDataset, kode berikut ini akan dapat menggenerate Data Packet XML dari berbagai sumber: ADO, Zeos, MyDAC, UniDAC, IBDataset, dsb. Pokoknya asalkan sumber data berupa turunan TDataset, Insya Allah bisa dikonversi.
* Fungsi ini menggunakan midas.dll, yang sebaiknya dicopy ke folder aplikasi
* Untuk aplikasi DLL-based (seperti UniGUI/Raudus module for ISAPI), midas.dll dicopy ke direktori System32.
* Sebagai alternatif midas.dll (dynamic lingking), bisa dicoba menggunakan unit midaslib, ditambahkan ke clausa uses.
BILA KESULITAN MEMBACA KODE BERIKUT, LIHAT VERSI YANG LEBIH RAPI DI :http://www.cenadep.org/2013/03/20/trik-mengekspor-dataset-ke-excel-melalui-xml/
function JadikanXMLKeExcel(Dataset: TDataset; FileName: TFileName): Boolean;{tambah ke uses: Provider, DBClient, midaslib }var prov: TDataSetProvider; cds : TClientDataSet;
ls : TStringList; st :
TMemoryStream;
tmp : String;
i,j : integer;
begin
Result := False;
if not Dataset.Active then raise Exception.Create('Dataset belum dibuka.');
if Dataset.IsEmpty then raise Exception.Create('Data kosong.');
if FileExists(FileName) then raise Exception.Create('File sudah ada.');
if lowercase(ExtractFileExt(FileName))<>'.xml' then
raise Exception.Create('File harus berekstensi XML.');
prov := TDataSetProvider.Create(Application);
cds := TClientDataSet.Create(Application);
try
prov.dataset := Dataset;
cds.SetProvider(prov);
cds.Open;
st := TMemoryStream.Create;
try
st.Clear;
cds.SaveToStream(st, dfXML);
st.Position := 0;
ls := TStringList.Create;
try
ls.LoadFromStream(st);
tmp := ls.Text;
i := pos('<METADATA>', UpperCase(tmp));
j := pos('</METADATA>', UpperCase(tmp))+length('</METADATA>');
Delete(tmp,i,j-i);
ls.Text := tmp;
ls.SaveToFile(FileName);
Result := FileExists(FileName);
finally
ls.Free;
end;
finally
st.Free;
end;
finally
prov .Free;
cds .Free;
end;
end;
Contoh penggunaan:
procedure TForm3.Button1Click(Sender: TObject);
begin
MyQuery1.Open;
JadikanXMLKeExcel(MyQuery1, 'c:\tested2.xml');
end;
Referensi: KPDI
Tidak ada komentar: