Wa'alaikumussalam wr wb Mas Zainul, Query ke excel files tidak bisa melakukan delete from (dml). Untungnya, ddl query : 1. drop table bisa membuang seluruh definisi table. 2. create table bisa membuat tabel pada existing sheet.
Syarat dan ketentuan : 1. hasil drop table bukan membuang sheet, tetapi membuang isi sheet 2. Efek dari drop table yang akan menghasilkan sheet kosong (tanpa kolom dan records apapun) tampak jika koneksi sudah di-close. 3. hasil dari crate table adalah menulis header pada baris 1 sheet tanpa mempedulikan baris setelahnya 4. Efek dari create table yang akan menghasilkan sheet berisi header tampak jika koneksi sudah di-close Jadi, pada koneksi ke Excel files, urutan proses yang setara dengan kemampuan delete from adalah sebagai berikut : A. Syarat dan Ketentuan : > sediakan sebuah sheet kosong sejak dari desain. * contoh : file xldb.xlsx sebagai wadah penyimpan data, berisi sheet : SALES : untuk wadah data transaksi sales PRODUK : untuk wadah data referensi produk (daftar produk) dan dbTmp : sebagai sheet kosong temporary untuk proses setara delete from B. Proses yang setara delete from > koneksi ke file data (misal ke file xldb.xlsx) > memanfaatkan object connection yang ada, dilakukan Execute pada queries dengan urutan proses berikut : 1. drop table sheet temporary * Contoh : DROP TABLE [dbTmp$] 2. create table di sheet temporary, dengan kolom sebanyak yang diproses * Contoh : sheet PRODUK memiliki 2 kolom, yaitu IDPRODUK bertipe numerik dan NMPRODUK bertipe text CREATE TABLE [dbTmp$] ( [IDPRODUK] Long, [NMPRODUK] char(255) ) * biasanya, semua kolom di set char(255) pun tiak mengapa, karena pada query insert into maupun update, datatype nilai yang ditulis mengikuti datatype sumber datanya * penggunaan kurung siku ( [ dan ] ) sebagai antisipasi error, karena nama kolom maupun tabel terkadang menggunakan spasi atau karakter lain yang kurang layak. * jika ada karakter titik pada nama kolom atau nama tabel, ganti dengan karakter # sebaiknya penggunaan karakter selain [A-Z] [0-9] dan underscore dihindari saja lah --- disini, lakukan close connection dulu, lalu open connection lagi --- 3. insert into sheet temporary dari sheet data yang akan diproses * Contoh : sheet PRODUK selain IDPRODUK bernilai < 10 akan dibuang, maka pindahkan record IDPRODUK >=10 ke sheet temporary INSERT INTO [dbTmp$] SELECT * FROM [PRODUK$] WHERE [IDPRODUK]>=10 4. drop tabel yang diproses * contoh : DROP TABLE [PRODUK$] 5. create table yang diproses * contoh : CREATE TABLE [PRODUK$] ( [IDPRODUK] Long, [NMPRODUK] char(255) ) --- disini, lakukan close connection dulu, lalu open connection lagi --- 6. insert into tabel yang diproses dari sheet temporary * contoh : INSERT INTO [PRODUK$] SELECT * FROM [dbTmp$] (optional) 7. drop sheet temporary supaya file size bisa terjaga sebesar isi yang ada saja (barang tak terpakai sudah dibuang) * contoh : DROP TABLE [dbTmp$] --- close connection dan selesai --- Peringatan : > Saat proses close connection dan open connection lagi yang ada setelah proses nomor 2 dan 5, bisa jadi akan memberi kesempatan pada user lain untuk membuka koneksi yang menyebabkan proses menjadi gagal. Jadi, sebaiknya : 1. koneksi data yang hanya berisi proses read, diset agar connection string menyakatan Mode=Read;ReadOnly=1 2. koneksi data yang mengubah isi (update, insert into) termasuk proses di atas TIDAK di-set Mode apapun. > Sebaiknya proses seperti ini digunakan untuk proses akhir. Contoh : User meng-edit (tambah, ubah, hapus records) di interface : 1. proses tambah -> execute query insert into 2. proses ubah -> execute query update dengan set di record tersebut apa adanya yang diisi user di interface 3. proses hapus -> execute query update dengan set seluruh kolom di record tersebut dengan '' (nullstring) atau NULL (tanpa petik) Ketika user akan keluar dari interface, lakukan proses setara DELETE FROM di atas, dengan proses nomor 3 bagian WHERE nilai sebuah kolom yang <>'' seperti : INSERT INTO [dbTmp$] SELECT * FROM [PRODUK$] WHERE [IDPRODUK]<>'' Kira-kira demikianlah... Detilnya, sila dicoba sendiri dulu ya, nanti ditanyakan lagi beserta hasil ujicobanya.. dah bengkak jarinya mencetin layar kecil segini.. lama juga ngetik segitu banyak.. (lumayan buat hiburan, daripada ndengerin client ribut mbahas batasan datanya sendiri... wkwkwkwk... lempar bolanya, ributlah mereka) Wassalamu'alaikum wr wb Kid Sent from my smart enough phone On Feb 18, 2018, at 21:22, Zainul Ulum zainul_u...@yahoo.com [belajar-excel] <belajar-excel@yahoogroups.com> wrote: Assalaamu'alaikum Wr. Wb. Dear Be-Excelers, Terlampir adalah class yang berisi code connection ke excel dengan menggunakan connection string adodb. Salah fungsi dalam class tersebut adalah : UpdateRecordFromDimensionalArray input : dimArray As Variant, sTableInDatabase As String, sKeyFld As String, cKey As Integer ouput: TRUE jika berhasil update dan FALSE jika tidak berhasil update Program berjalan dengan baik untuk SQL "INSERT" objConnection.Execute sSQL_INSERT, objRecordset, adCmdText Tetapi tidak berjalan sesuai harapan untuk SQL "DELETE" objConnection.Execute sSQL_DELETE, objRecordset, adCmdText Mohon pencerahannya, Wassalaamu'alaikum Wr. Wb, -zainul <clsDbXls.cls>