Kamis, April 30, 2009

Menyalin Field dxMemdata Secara Runtime Dari Dataset Lain

Tdxmemdata sudah mempunyai method untuk menyalin semua field yang ada di dataset lain. Method ini menghapus semua field yang ada, kemudian menyalin semua field yang kompatibel yang ada di dataset sumber.

dxMemData.CreateFieldsFromDataSet(dataset);

Kadang kala dibutuhkan untuk menyalin sebagian field saja, dan kemudian ditambahkan dengan field yang dibuat sendiri.

try
dxMemDataTest.Close;
zroqEmplAct.Close;

///// create 3 fields manually
dxMemDataTest.FieldDefs.Add('Nama', ftstring, 40, False);
dxMemDataTest.FieldDefs.Add('Posisi', ftstring, 40, False); dxMemDataTest.FieldDefs.Add('Bagian', ftstring, 40, False);
dxMemDataTest.FieldDefs[0].CreateField(dxMemDataTest); dxMemDataTest.FieldDefs[1].CreateField(dxMemDataTest); dxMemDataTest.FieldDefs[2].CreateField(dxMemDataTest);

//// add another 5 fields by copying from a zeos dataset
dxMemDataTest.Fields.Add(zroqEmplActEAD_Id); dxMemDataTest.Fields.Add(zroqEmplActEAD_EmployeeCode); dxMemDataTest.Fields.Add(zroqEmplActEAD_Shift);
dxMemDataTest.Fields.Add(zroqEmplActEAD_ActivityDate); dxMemDataTest.Fields.Add(zroqEmplActEAD_ActivityCode);

//// open dxmemdata with 3+5 fields
dxMemDataTest.Open;


except
MessageDlg('Gagal membuat field dxMemdata',mtWarning,[mbOk],0);
end;


Metode ini berhasil berjalan baik. Anehnya metode ini menghasilkan EInvalidPointer dengan pesan Invalid Pointer Operation saat aplikasinya mau ditutup.

Kemungkinan ini disebabkan oleh pemanggilan method Fields.add(TField) yang mana seharusnya sudah otomatis tereksekusi jika menjalankan method Fields.Create(dataset). Jadi dilema karena tujuan awalnya hanya untuk create field tertentu, bukan semua field.

Tidak ada komentar: