Arsip: Triger, Field Scanning dan Looping

more 11 years ago
Penjahat
proses loging perubahan field ini bener2 bikin aku penasaran.
ada sebuah table, sebut saja namanya bunga. table bunga ini memiliki puluhan fields. setiap kali ada perubahan data pada table bunga akan kita log history perubahannya nya kedalam table tb_log.
Metode yg paling pas dapat kita terapkan pakek trigger pada MySql. Trigger event nya adalah AFTER UPDATE.
Sebagai ilustrasi dapat aku gambarkan fields dari table bunga
[size=18:97dd97dbb2]
guid int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'primary key nya' ,
field1 int NULL COMMENT 'field yg PeRTama' ,
field2 int NULL COMMENT 'field kedua' ,
field3 int NULL COMMENT 'field ke 3' ,
dan seterusnya....
[/size:97dd97dbb2]
sedangkan table tb_log
[size=18:97dd97dbb2]guid int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'primary key nya' ,
id int NULL COMMENT 'key relasi' ,
date datetime NULL COMMENT 'tanggal perubahan',
history varchar(150) NULL COMMENT 'keterangan'
[/size:97dd97dbb2]
maksudnya adalah jika kita lakukan perubahan pada salah satu field, misal field1 pada table bunga, maka history nya akan kita log di table tb_log
Ilustrasi - nilai field1 yang sebelumnya 25 kita ubah menjadi 30
maka output pada tb_log nya jadi gini
[size=18:97dd97dbb2]
guid id date history
1 1 15/09/2009 Terjadi perubahan field yg pertama dari 25 menjadi 30
[/size:97dd97dbb2]
solusi awal dapat kita pertimbangkan triger berikut (kita asumsikan udah dalam FOR EACH ROW BEGIN ...END)
[size=18:97dd97dbb2]
IF NEW.field1 <> OLD.field1 THEN
SET @PERUBAHAN = 'field yg PeRTama';
SET @DARI_INI = OLD.field1;
SET @JADI_INI = NEW.field1;
INSERT INTO tb_log (id, date, history) VALUES (OLD.guid, NOW(), CONCAT('Terjadi perubahan ', @PERUBAHAN, ' dari ', @DARI_INI, ' menjadi ', @JADI_INI));
END IF
kemudian field2, field3 dan seterusnya....
[/size:97dd97dbb2]
Triger diatas memang berjalan mulus tanpa hambatan. tapi masalahnya ini sangat gak efektif kalo kita punya 20 field atau lebih pada table bunga
kita harus mendefinisikan IF .. THEN ... END IF sebanyak field yg kita punya, membosankan sekali.
nah ini yang bikin aku penasaran....
sebenarnya akan lebih efektif kalo pakek metode looping.
yg aku belum tau adalah, apakah ada pada MySql fungsi atau apapun sebutannya yg dapat melakukan looping dengan men-scan property nya field
logika pada delphi kira-kira kayak gini (bukan syntax sebenarnya alias ngarang)
[size=18:97dd97dbb2]for U := 0 to Fields.count - 1 do
begin
if New.Field[U].value <> Old.Field[U].value then
begin
Perubahan := Old.Field[U].comment;
Dari_Ini := New.Field[U].value;
Jadi_Ini := Old.Field[U].value;
WriteLog(OLD.guid, Now, 'Terjadi perubahan '+Perubahan+' dari '+Dari_Ini+' mejadi '+Jadi_Ini);
end;
end;
[/size:97dd97dbb2]
that's all. brapapun jumlah field kita kodenya ya tetep segitu.
Any idea ????
more 11 years ago
mas_kofa
kalo emang si bunga adalah anak nya MySql, bukan kah si bapak (MySql) sudah mempunyai catatan riwayat hidup (aktifitas) nya si bunga secara detail yang tersimpan dalam sertifikat *.log yang ada rumah bapaknya (server)....
MINAL AIDZIN WALFAIDZIN

more 11 years ago
Penjahat
oh gitu ya, aku kok gak tau ya. pasti hoby baru bapaknya bunga ini nulis diary hehehe....
tapi begini mbak mas kofa, eh jadi nggak enak manggil nya :D
*.log apapun itu adalah bukan yg kita inginkan. karena history nya bunga yg diinginkan adalah history yg dapat kita kreasikan formatnya dan kita baca dari sisi client, bukan server.
analoginya seperti ini : jadi panjang nih....
memasak nasi (atau lebih tepatnya beras kali ya) dengan menggunakan priok (atau apa itu namanya), biasanya kita akan dapat 3 hasil output.
1. nasi, kandungan karbohidratnya tinggi, dan itu makanan pokok kita.
2. tajin, kalo dikasi sedikit gula rasanya enak kayak susu. banyak mengandung vitamin B. biasanya dijadikan alternatif kalo harga susu melambung.
3. kerak nasi(bs jawa intep). Adalah nasi yg kering dan hampir hangus yg terdapat di dasar priok.
Nah, kalo mbak mas kofa pernah jalan-jalan di Madiun, disana ada pedagang kerak nasi(intep), sebut saja namanya mbok Supilah. Keraknya mbok Supilah ini dikemas dengan plastik dan digantung di atas etalasi kakilimanya, bentuknya besar kayak cobek.
Ada rasa pedas, ada rasa manis, ada rasa gurih. mmmmhh jadi lapar nih.
Kita semua yakin keraknya mbok Supilah ini dihasilkan atau diciptakan dengan sengaja oleh mbok Supilah, supaya dapat di bentuk sedemikian rupa dan dikreasikan sehingga terciptalah kerak nasi dengan berbagai pilihan rasa yang enak dan nikmat rasanya.
Keraknya mbok Supilah bukanlah hasil efek samping dari dia masak nasi tadi pagi. Walaupun setiap pagi mbok Supilah ini selalu masak nasi bikin sarapan buat si Parjo anak bungsunya yg masih SD. :lol:
Intinya. kita mau bikin kerak mirip punya mbok Supilah yg gurih-gurih pedas itu.:D
bukan kerak hasil side effect yg pait.:(
Thread tag = [nasi, beras, priok, cobek, pedas, gurih, kerak]
jadi semakin lapar,
SELAMAT BUKA PUASA :wink: :D

more 11 years ago
mas_kofa
untuk memudahkan mbok supilah (TQuery / TTable), mbok supilah perlu menikah / kawin agar mendapatkan anak (bikin Class Turunan dari TQuery tsb), biar anak (turunan) nya saja yang membikin intip (atau membantunya) sehingga mbok supilah bisa kosentrasi membuat sarapan si Parjo anak sulungnya....

more 11 years ago
Penjahat
hehehe... mbak mas kofa ini ngasi solusi kok semakin menjauh sih :)
acara kita bikin intip ini kan gak pake compiler. tapi pake query sql. coba dibaca lagi postinganku yg paling atas. Pasti kemarin-kemarin bacanya mode patas=on ya. :D
coba baca pelan-pelan aja, kalo perlu sambil dicoba.
Kalo pake kompiler sih kukira kita gak ada kesulitan. Misal pake Dephi, tinggal kita manfaatkan aja event AfterInsert, AfterUpdate atau AfterPost.
nah, disini yg menarik kita mau bikin intip pake Triger pada MySql. Tujuannya supaya apapun dan siapapun (baik Delphi, PHP, Navicat dan aplikasi-aplikasi mysql client lain) yg sengaja atau tidak, meng-insert atau meng-update si bunga, maka......jreng.... kunfayakun...intip itu langsung tercipta. :wink:
enak to, mantep to, jangan tambah jauh solusinya nanti tak gendong lo :lol:
Kita cuma membahas MySql. dan lebih sempit lagi Trigger-nya MySql.
Ini hanya makanannya para Es-Ki-El-ler, so para jago-jago Sql, share dong pendapatnya.
Oh ya, keliatannya kendala utama adalah di MySql nggak ada Array.
more ...
- Pages:
- 1
reply |
Report Obsolete
Last Articles
- Project Group dalam Lazarus
- FastPlaz Database Explorer
- Release: FastPlaz Super Mom v0.12.22
- PascalClass #3: Web Development with Free Pascal
- Makna Pascal di Pascal Indonesia
- Kulgram : Instalasi Lazarus di Perangkat Berbasis ARM
- PascalClass #1: Analisa Database dan Machine Learning
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
- Mengenal OXYGENE – Pascal For .NET
- PascalTalk #5: UX: Research, Design and Engineer
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 4 months ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 5 months ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 5 months ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 5 months ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 5 months ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 5 months ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 1 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 8 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 8 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 8 years ago
Random Topic
- Bantuin saya dong...!
by Ardan in Hal umum tentang Pascal Indonesia more 14 years ago - Mouse & Keyboard Events
by xbox in Network, Files, I/O & System more 14 years ago - Kebiasaan para programmer
by budicysco in OOT more 13 years ago - Report -- Delphi 8+Interbase + rave 5.5
by gejenk in Reporting more 12 years ago - Zip Data [Tanya]
by eksant in Tip n Trik Pemrograman more 13 years ago - Delphi {repeat ...until}
by coacoac in Tip n Trik Pemrograman more 13 years ago - Problem Trigger di ZeosDBO dengan DB MySQL
by Manz in MySQL more 12 years ago - nanya delphi lite, turbo delphi, & turbo explorer
by delphiku in Hal umum tentang Pascal Indonesia more 13 years ago - nanya koneksi mysql over internet gimana caranya yah?
by arif_amm in MySQL more 11 years ago - cari file sms.DLL
by nurez in Network, Files, I/O & System more 13 years ago