berhubung kemaren ada yang request jadi saya tempel di blog ini
oke langsung aja,
jadi trigger itu fungsinya untuk jadi pemicu, misalnya :
pas kita jual barang, stok harus berkurang....
pas kita beli barang, stok harus bertambah...
pas kita update penjualan, stok harus dikurangi yang lama dan ditambah yang baru...
nah itu lah yang gunanya trigger, kalo ga pake trigger juga bisa, tapi lambat dan codingnya ribet.
misalnya saya punya tabel penjualan (master & detail) seperti ini
//Master
CREATE TABLE `mjual` (
`NOMOR_JUAL` char(10) NOT NULL,
`TANGGAL` date NOT NULL,
`NOPLAT` varchar(10) default NULL,
`MOTOR` varchar(20) default NULL,
`BIAYA_PASANG` double default '0',
`JENIS_BAYAR` varchar(20) default 'TUNAI',
`STATUS` varchar(50) default 'LUNAS',
PRIMARY KEY (`NOMOR_JUAL`),
UNIQUE KEY `IDJual` (`NOMOR_JUAL`)
)
//detail
CREATE TABLE `djual` (
`NOMOR_JUAL` char(10) NOT NULL,
`ID_BARANG` varchar(20) NOT NULL,
`JUMLAH` int(11) default '0',
`HARGA_JUAL` double default '0',
`DISKON` double default '0',
KEY `IDJual` (`NOMOR_JUAL`),
KEY `IDBarang` (`ID_BARANG`),
CONSTRAINT `djual_fk` FOREIGN KEY (`NOMOR_JUAL`) REFERENCES `mjual` (`NOMOR_JUAL`) ON UPDATE CASCADE,
CONSTRAINT `djual_fk1` FOREIGN KEY (`ID_BARANG`) REFERENCES `barang` (`ID_BARANG`) ON UPDATE CASCADE
)
//tabel barang
CREATE TABLE `barang` (
`ID_BARANG` varchar(20) NOT NULL,
`NAMA_BARANG` varchar(75) default NULL,
`SATUAN` varchar(10) default NULL,
`HARGA_BELI` double default '0',
`HARGA_BARANG` double default '0',
`STOK` int(11) default '0',
`NAMA_SUPPLIER` varchar(30) default NULL,
PRIMARY KEY (`ID_BARANG`),
UNIQUE KEY `IDGuru` (`ID_BARANG`),
KEY `IDSupplier` (`NAMA_SUPPLIER`),
CONSTRAINT `barang_fk` FOREIGN KEY (`NAMA_SUPPLIER`) REFERENCES `supplier` (`NAMA_SUPPLIER`) ON UPDATE CASCADE
)
//tabel supplier
CREATE TABLE `supplier` (
`NAMA_SUPPLIER` varchar(30) NOT NULL,
`ALAMAT` varchar(100) default NULL,
`TELEPON` varchar(30) default NULL,
`EMAIL` varchar(50) default NULL,
`NAMA_SALESMAN` varchar(30) default NULL,
`TELEPON_SALESMAN` varchar(30) default NULL,
`SISA_HUTANG` double default '0',
)
misalnya saya punya data tabel barang seperti ini
ID_BARANG | NAMA_BARANG | STOK | HARGA_BARANG
00000000001 | sabun colek | 100 | 3000
00000000002 | sabun mandi | 100 | 1500
nah nanti di tabel penjualan (detail) ketika kita masukin
kode 00000000001
jumlah penjualan 15,
maka stok 00000000001 harus menjadi 85. (inilah yang dimaksud trigger AFTER INSERT)
stok hanya akan berkurang, JIKA barang terjual (sesuai kodebarang yang diinput)
CREATE TRIGGER `djual_after_ins_tr` AFTER INSERT ON `djual`
FOR EACH ROW
BEGIN
UPDATE barang SET stok = stok - NEW.jumlah
WHERE ID_Barang = NEW.ID_Barang;
END;
nah gimana kalo ternyata salah input? trus jumlahnya bukan 15, tapi 20, kita tinggal update aja detail penjualannya, ganti si 15 jadi 20
kode 00000000001
jumlah penjualan 20,
maka stok 00000000001 harus menjadi 80. (inilah yang dimaksud trigger AFTER UPDATE)
CREATE TRIGGER `djual_after_upd_tr` AFTER UPDATE ON `djual`
FOR EACH ROW
BEGIN
UPDATE barang SET stok = stok - NEW.jumlah + OLD.jumlah
WHERE ID_Barang = OLD.ID_Barang;
END;
nah gimana kalo salah? dan datanya harus dihapus?
contoh kode 00000000001 uda dimasukkin jumlah jualnya 15, trus mau dihapus karena salah, tentu stoknya harus kembali lagi kan jadi 100,
(inilah yang dimaksud trigger BEFORE DELETE)
jadi sebelum datanya dihapus, sistem otomatis kembalikan stok yang lama.
CREATE TRIGGER `djual_before_del_tr` BEFORE DELETE ON `djual`
FOR EACH ROW
BEGIN
UPDATE barang SET stok = stok + OLD.jumlah
WHERE ID_Barang = OLD.ID_Barang;
END;
yah silahkan anda coba di db engine masing2, sesuaikan sintaksnya dengan versi SQL yang dipakai :D
Semoga membantu,
thanks.
mas, tempat menuliskan CREATE TRIGGER untuk hapus,update, insert itu di mana?
BalasHapussaya membuat database di phpmyadmin, di phpmyadmin tersebut tidak ada strigger,
mohon penjelasannya,.
ada kok
Hapusketik di SQL Script
penerapan di delphinya bgmana?mas
BalasHapusga usah coding lagi kok
Hapusckup buat trigger di MySQL nya,
udah deh
masukin datanya aja, nanti dia ngurangin sendiri
jadi kita ga pusing sama coding di delphinya
edit perintah trigger nya setelah create gimana? apakah di hapus dulu atau cara lihat di database kita ada trigger nya gimana? bisa aja selang waktu lama lupa ada trigger nya...
BalasHapuskalo belum terbiasa dengan command line, bisa pakai berbagai UI untuk database.
Hapussaya biasa pakai EMS untuk MySQL, Postgresql, SQLServer
jadi tinggal buka dan edit..
ada tabTRIGGER pada setiap Table
EMS nya dapet dari mana ? freeware kah ?
Hapusketik aja di google , download EMS
Hapusyang lite versionnya freeware, tapi udah cukup powerfull
mantap master
BalasHapusaslkum, pak sy mau nanya nih , sy mau buat kode otomatis tapi yang sy telusuri dar igoogle, smua menggunakan record count .. bgmn kalau seandainya salah satu record dihapus, maka bsa eror .. no urut kodenya akan sama. mohon pencerahannya pliss. VIA Fb : iwanhyvastha24@yahoo.co.id VIA email : iwanhyvastha@gmail.com
BalasHapusHalo terimakasih sudah berkunjung di giavano.blogspot.com
Hapusuntuk autonumbering yang mudah, reusable,
silahkan cek disini
http://giavano.blogspot.com/2013/07/autonumbering-penomoran-otomatis-pada.html
:)
punya aku ko wktu di dbgrid delphinya ga berubah ya ? padahal kalo saya coba di sqlnya berubah ko. mohon bantuan nya
BalasHapusHalo terimakasih sudah berkunjung.
HapusMungkin penggunaan adoquery atau tablenya belum di refresh.
Komponen apa yang anda pakai?
Halo terimakasih sudah berkunjung.
HapusMungkin penggunaan adoquery atau tablenya belum di refresh.
Komponen apa yang anda pakai?
gan klo jumlah pemesanannya 1 kok di ane ga berubah ya stocknya,, tapi kalo lebih dari satu baru bisa berubah....
BalasHapuskira kira yang salahnya dimana ya..
Mantapppppp . . Sangat membantu . . karena sebelumnya saya gunakan pengurangan stok dari coding di programnya . . panjang and ribed . . kalo pake trigger lebih simple . . thanks ilmunya
BalasHapusmas bagimana kalau input melebihi stok barang
BalasHapus(barang tidak bisa di proses)
1. Buat variable
HapusDeclare .....
2. Isi variabel dengan stok yg ada di tbl barang
Set (nama var) = select .... from ... where kodebarang=new.kodebarang
3. Tambahkan if
If new.jumlah > (variabel stok ) then
....
Else
...
End if
... trigger before insert (data tdk disimpan) / after insert (data disimpan tapi diberi keterangan gagal) bergantung pada kebutuhan
:)
1. Buat variable
BalasHapusDeclare .....
2. Isi variabel dengan stok yg ada di tbl barang
Set (nama var) = select .... from ... where kodebarang=new.kodebarang
3. Tambahkan if
If new.jumlah > (variabel stok ) then
....
Else
...
End if
... trigger before insert (data tdk disimpan) / after insert (data disimpan tapi diberi keterangan gagal) bergantung pada kebutuhan
:)
dangke sangat membantu
Hapusmas boleh tanya ini keluar dari topik kalau saya ingin buat perkalian antara harga barang dngan jumlah di tabel transaksi itu gimana ya
Hapusmakasih sangat membantu saya untuk buat projek
HapusHalo...
HapusAda beberapa cara
1. Buat kolom "biaya"
-buat trigger after insert
-update ... set biaya = jumlah*harga
Tp cara diatas kurang efektif.
2. Tampilkan data dari database dengan menggunakan "view"
-create view as
Select ...., jumlah*harga as biaya
From ... , ...
Where ...
3. Buat kolom "view" di datagridview/dbgrid/stringgrid
(Ambil kolom jumlah * kolom harga dari grid yg dipakai)
Semoga bermanfaat :)
Saran sy pakai cara no.2
bang kalau saya input jumlah*harga = biaya di textbox mengunakan visual c# 2010 baru di tampilkan di dtagridview cara gimna ya koneksi dngan mysql
BalasHapuskalau saya input langsung bisa di tampilkan
mohon bantuanya master
makasih sya udah coba no 2 di mysql jadi tapi di c# jadi juga perklian jadi juga tapi saat saya kilik button tambah dia tidak muncul di datagridview
trigger Pengurangan stok support decimal gimana gan
BalasHapusmisalnya (1 + -0.5)
Tipe datanya gan, jangan INT tapi decimal / double
Hapusudah decimal gan
BalasHapuskalau saya query hasil nya bener
tapi kalau trigger gak bener kalau support koma
komanya pake titik coba gan 0,5 -> 0.5
Hapusiya memang makai titik gan
BalasHapusini contoh salah satu bagian trigger saya gan
set new.Stock1 = old.Stock1 + new.qtyupdate;
eksekusi triggernya lewat Java/c#/delphi/dll atau lsg lewat database gan?
Hapustipe data buat stock, sama tipe data buat parameter, sama tipe data buat input harus sama gan, termasuk jumlah angka dibelakang komanya..
Komentar ini telah dihapus oleh pengarang.
BalasHapusKomentar ini telah dihapus oleh pengarang.
BalasHapuslangsung lewat database gan, type datanya sama, jumlah angka di belakang koma juga sama gan
BalasHapusmas cara membuat triger memberikan informasi stok tidak menycukupi gimana yah mas
BalasHapus