Author Topic: Mysql Validate di trigger before insert  (Read 4891 times)

0 Members and 1 Guest are viewing this topic.

Offline fansul

  • Hero Member
  • *
  • Posts: 894
Mysql Validate di trigger before insert
« on: April 10, 2009, 05:04:36 AM »
Mau tanya lagi nich.
tentang Mysql trigger before insert validate.
saya mau potong stock waktu insert data penjualan,
sebelumnya saya mau check dulu stock tersebut cukup nggak lewat trigger before insert
tapi saya dapat masalah bagaimana caranya kasih tahu ke vfp klu data penjualan yang mau di insert itu stocknya tidak cukup.
Atau ada cara lain sebelum data stock terpotong bisa di check dulu cukup nggak
Atau cara saya yang salah, mohon solusinya
saya udah cari2 di internet nggak ketemu caranya.
trigger yang saya bikin seperti ini.
tks

yang penting bagaimana caranya jangan sampai data di penjualan
terinsert tapi di stock tidak terpotong atau membuat terjadinya min
stock.

DELIMITER $$
DROP TRIGGER IF EXISTS tbi_jual_detil
CREATE DEFINER =root@localhost TRIGGER tbi_jual_detil BEFORE INSERT ON jual_detail
FOR EACH ROW

BEGIN 
   select cd_barang, ms_s_pcs, ms_s_harga INTO
          @vcd_barang, @vms_s_pcs, @vms_s_harga   
   from stock as a
   where NEW.cd_barang = a.cd_barang LIMIT 1;

   IF (@vms_s_pcs - NEW.pcs ) < 0 THEN

      Disini bagaimana caranya saya kasih tahu ke vfp,
      data penjualan yang mau di insert itu stocknya nggak cukup        

   END IF ;
END;
$$
DELIMITER ;



DELIMITER $$
DROP TRIGGER IF EXISTS tai_jual_detil
CREATE DEFINER = root@localhost  TRIGGER tai_jual_detil AFTER INSERT ON jual_detail
FOR EACH ROW
BEGIN

   UPDATE master_stock set ms_s_pcs = ms_s_pcs - NEW.pcs
           WHERE trim(cd_barang) = trim(NEW.cd_barang)
END;
$$
DELIMITER;

« Last Edit: April 10, 2009, 05:17:46 AM by fansul »

Offline taz

  • Administrator
  • Hero Member
  • *
  • Posts: 2.515
  • Do SEARCH berfore post guys!
    • http://fox-id.com
Re: Mysql Validate di trigger before insert
« Reply #1 on: April 13, 2009, 12:54:11 AM »
masalahnya begini, satu satunay cara berkomunikasi antara VFP <> mySQL ya lewat tabel.
Berarti kalau ngga mas fansul bikin temp table yang memberitahukan vfp bahwa stok tidak cukup.
Permasalahannya, bagaimana bisa mySQL ngasih tau vfp kl data di tabel tadi adaperubahan? NAH LO! kayak paradigma Ayam <> Telur duluan mana hihihi.
Saya sendiri sampai sekarang kalau dengan pendekatan seperti itu belum nemu solusinya.
Yang bisa saya pikirkan begini :
Bizrule tidak saya taruh sebagai triger di mysql.
Atau paling tidak jika memang menginginkan di buat di mysql, pecah menjadi beberapa bagian.
Jadi kasus diatas minimal yaitu CekStok dan InsertStok.
pada kasus diatas, function InsertStok akan memanggil Function CekStok sebelum diproses. Jadi mas fansul tidak perlu memberitahukan VFP gimana kalau stok tidak cukup.
Problem solved (literaly) BUT WAIT!
Trus gimana kita kasih UI ke user kalau stok tidak cukup? NAH LO kembali lagi kan?kekekek.
Bisa bisa dengan memanfaatkan error message di mySQL (yang bisa kita trap dengan SQLSETPROP)
masalahnya kodenya jadi syusah banget di VFP (TRY - CATCH - FINALY). dan pasti jadi berat di server (banget!!, bayangin kalau ada 50 aja user yang melakukan post tersebut ; yang notabene post paling sering dilakukan)

Kalau saya (OK Jangan bilang : ITU MAH SAYA HARUS BIKIN DARI AWAL :p, kla tidak dari awal yang kepikiran seperti diatas)
Pake N-Tier, atau proses checking kita bikin di sisi client, walaupun jadinya FAT CLIENT tapi dengan spec minimal PC sekarang jauhhh dari cukup, karena satu post saja, bukan puluhan/ratusan/ribuan sekali thread.
- Fox-id.org is KiOSS Project exclusive member -


Offline taz

  • Administrator
  • Hero Member
  • *
  • Posts: 2.515
  • Do SEARCH berfore post guys!
    • http://fox-id.com
Re: Mysql Validate di trigger before insert
« Reply #2 on: April 13, 2009, 01:12:13 AM »
wah makasih pak david buat pencerahannya (dan PMnya :P).
Tapi saya maih belom mudeng . trus variable _tally itu ditaruh mana ya? pengecekan most recenly executed table <> dengan kasus diatas pak?
- Fox-id.org is KiOSS Project exclusive member -


Offline taz

  • Administrator
  • Hero Member
  • *
  • Posts: 2.515
  • Do SEARCH berfore post guys!
    • http://fox-id.com
Re: Mysql Validate di trigger before insert
« Reply #3 on: April 13, 2009, 01:31:50 AM »
iya pak. maksud saya, dengan variable tally tersebut penerapan dengan kasus diatas itu dimananya pak.
jadi yang perlu di cek berapa data yang baru saja diproses diatas itu dimana pak?
- Fox-id.org is KiOSS Project exclusive member -


Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: Mysql Validate di trigger before insert
« Reply #4 on: April 13, 2009, 04:46:44 AM »
Oh ya sorry ngantuk lelet,  command insertnya SPT...  _tally nggak berlaku
« Last Edit: April 13, 2009, 05:39:28 PM by davidmustakim »

Offline fansul

  • Hero Member
  • *
  • Posts: 894
Re: Mysql Validate di trigger before insert
« Reply #5 on: April 13, 2009, 07:13:43 AM »
rupanya benar apa yang saya pikirkan, rupanya tetap harus di lakukan di sisi vfp.Klu bisa di lakukan di mysql kan kita nggak perlu query bolak-balik ke server.
sambil mencari solusi dan trik dari rekan2, sekarang saya bikin function di mysql di call dari vfp untuk check stock nya seperti yang di sarankan pak taz.
Oh ya sekalian tanya, di database server apa lagi yang bisa langsung check seperti di oracle.

create or replace trigger before_detail_jual
before insert on detail_jual
for each row
declare
begin
   if (
        :new.pcs < 0
      )
   then
     Raise_application_error(-20001,'Stock tidak cukup  ');
   end if;
end;

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: Mysql Validate di trigger before insert
« Reply #6 on: April 13, 2009, 07:23:05 AM »
Fungsi message itu sebenarnya sudah menjawab pertanyaan
Quote
Disini bagaimana caranya saya kasih tahu ke vfp,
data penjualan yang mau di insert itu stocknya nggak cukup 
,  tetapi menyangkut masalah
Quote
yang penting bagaimana caranya jangan sampai data di penjualan
terinsert tapi di stock tidak terpotong atau membuat terjadinya min
stock.
maka soal bolak-balik sama aja jumlah/frekwensi-nya karena bagaimanapun harus balik ke vfp untuk menyajikan opsi tindakan selanjutnya bagi users kan ?
« Last Edit: April 13, 2009, 07:28:03 AM by davidmustakim »

Offline fansul

  • Hero Member
  • *
  • Posts: 894
Re: Mysql Validate di trigger before insert
« Reply #7 on: April 13, 2009, 07:37:11 AM »
benar, klu stock tidak mencukupi baru balik ke vfp dan di terima oleh Aerror tapi klu stock cukup langsung update ke stock, tidak balik ke vfp lagi.
sebenarnya Raise_application_error ini tidak di kenal di vfp makanya di tangkap oleh Aerror di vfp, tapi di kenal di oracle.
mungkin bisa di bikin sesuatu yang di kenal di mysql, tapi waktu di baca di vfp terjadi error.caranya bagaimana ya
« Last Edit: April 13, 2009, 07:42:54 AM by fansul »

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: Mysql Validate di trigger before insert
« Reply #8 on: April 13, 2009, 07:58:53 AM »
apakah tidak bisa dibuat dengan CREATE FUNCTION  atau PROCEDURE dan klausa RETURNS-nya ditangkap dengan cara sama ? atau ada ide dari http://www.java2s.com/Tutorial/Oracle/0480__PL-SQL-Programming/AcompleteexampleusingRAISEAPPLICATIONERROR.htm (??)
« Last Edit: April 13, 2009, 08:32:41 AM by davidmustakim »

Offline taz

  • Administrator
  • Hero Member
  • *
  • Posts: 2.515
  • Do SEARCH berfore post guys!
    • http://fox-id.com
Re: Mysql Validate di trigger before insert
« Reply #9 on: April 13, 2009, 04:27:08 PM »
permasalahannya itu prosedur dibuat dan diproses oleh mySQL, jadi _taly tidak bisa me-trap itu pak (atau bisa? maaf tanpa tes jadi belum tau pasti).
Maka dari itu saya sarankan menggunakan table atau trap error dengan AError dan procedure / function dipisah atau dibuat disisi client (sehingga bisa menggunakan _tally atau metode yang lain)
@fansul : mySQL bisa pak, asal pake innodb. hanya saja detail functionnya saya nggak hafal.
- Fox-id.org is KiOSS Project exclusive member -


Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: Mysql Validate di trigger before insert
« Reply #10 on: April 13, 2009, 05:47:50 PM »
Sorry Mas Taz, ngantuk lelet saya semalam... lupa insert pake sqlexec().. _tally nggak bisa...  kayaknya CREATE FUNCTION ato SP yang lebih ringkas

Offline fansul

  • Hero Member
  • *
  • Posts: 894
Re: Mysql Validate di trigger before insert
« Reply #11 on: April 14, 2009, 06:56:32 AM »
Benar sekali pak david bikin sp di mysql untuk rollback klu validasi gagal, dengan di bantu ide pak taz pakai temp table.

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: Mysql Validate di trigger before insert
« Reply #12 on: April 14, 2009, 07:09:01 AM »
upload ya klo udah... bagus buat future ref...

Offline fansul

  • Hero Member
  • *
  • Posts: 894
Re: Mysql Validate di trigger before insert
« Reply #13 on: April 14, 2009, 07:30:24 AM »
belum di tes full ya pak, baru tadi pagi coba untuk insert data penjualan dan update ke stock dengan kondisi min.Berhubung udah siang mau mandi tak tinggal dulu, malam baru sambung lagi, belum bisa menampilkan error yang kita mau.Hanya akal2 setelah mendapat ilham dari pak david & pak Taz.
kenapa harus pakai sp, karena di trigger dan function tidak boleh pakai rollback
di sp
if @s_pcs < NEW.pcs THEN
   insert into tblerror (pesan) values '' ;  error di sini, respon ke vfp
   rollback;
end if;
file table tblerror harus default not null

di trigger
 call sp
 update stock set s_pcs = s_pcs + NEW.pcs  ....


Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Re: Mysql Validate di trigger before insert
« Reply #14 on: April 14, 2009, 08:02:57 AM »
mantap, mo nyoba juga ntar malam... siang ini mo ngurus native dbf clients dulu hehehe