Author Topic: Cara Supaya Tidak Duplicate Entry  (Read 1223 times)

0 Members and 1 Guest are viewing this topic.

Offline Perkedel

  • Junior Member
  • *
  • Posts: 102
Cara Supaya Tidak Duplicate Entry
« on: January 24, 2016, 07:19:53 PM »
Dear Foxer
Saya menggunakan mysql untuk menyimpan no.urut order yang akan kembali ke 1 jika ganti bulan
permasalahan muncul karena ada 3 user yang enter bersamaan sehingga penyimpanan no.order 001 menjadi bertumpuk
dimana seharusnya :
user 2 dpt no.order 001 (karena perbedaan waktu sepersekian detik mendapat no.order 001)
user 1 dpt no.order 002
user 3 dpt no.order 003
bagaimana caranya supaya data yang tersimpan utk ketiga user tdk menjadi no.order 001 semua
query saya :
*Cek nomor order terakhir
varblnthn = left(dtos(date()),6)
cSQL="select max(noorder) as nilakhir from dataorder where bulantahun=?varblnthn"
SQLEXEC(THISFORM.myconnection,cSQL,'maxcari')
orderakhir=maxcari.nilakhir+1

*Insert ke tabel
cSQL="insert into dataorder (noorder,bulantahun,userid) values (?orderakhir,?varblnthn,?lcUser)"
SQLEXEC(THISFORM.myconnection,cSQL)

Terima Kasih

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.018
  • Awas ya...
Re: Cara Supaya Tidak Duplicate Entry
« Reply #1 on: January 24, 2016, 07:36:03 PM »
lock table

Offline Perkedel

  • Junior Member
  • *
  • Posts: 102
Re: Cara Supaya Tidak Duplicate Entry
« Reply #2 on: January 24, 2016, 07:57:35 PM »
sebelum insert, lock tabel dulu ?
ok saya coba dulu

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.018
  • Awas ya...
Re: Cara Supaya Tidak Duplicate Entry
« Reply #3 on: January 24, 2016, 09:45:32 PM »
BUKAN SEBELUM INSERT TAAAAPIIII sebelum proses menetapkan nomor baru maka LOCK TABEL FAKTUR DAN TETAP  LOCK SAMPAI SELESAI REKAM DI TABEL FAKTUR NOMOR BARU ITU   ---- NOMOR BARU BERIKUT DALAH NOMOR TERAKHIR INI TAMBAH SATU, ATAU PERTAMA SEKALI==NOL + 1  ===== TAPI HAL INI BARU BISA DIKETAHUI/DIBACA BILA LOCK BERHASIL ===JADI,..BILA PAKE DBF MAKA CEK DULU ==>IF FLOCK(TABEL-FAKTUR) ==//BERNILAI TRUE BARULAH BOLEH MULAI PROSES BACA NOMOR TERAKHIR+HITUNG NOMOR BARU BERIKUTNYA LAGI
 =============>>>>> MENDETEKSI TABLE-LOCK MYSQL AGAK RIBET COBA BACA INI http://stackoverflow.com/questions/2499976/detecting-locked-tables-mysql-locked-by-lock-table
« Last Edit: January 24, 2016, 11:56:07 PM by davidmustakim »

Offline hell_angel

  • Junior Member
  • *
  • Posts: 305
Re: Cara Supaya Tidak Duplicate Entry
« Reply #4 on: January 28, 2016, 07:06:48 PM »
sekedar saran, untuk yang begituan, kalo pake mySQL atau MSSQL, gunakan saja Transaction  :tongue7:
A man who can moves a mountain, begins by carrying a small stone....

Offline poison

  • Hero Member
  • *
  • Posts: 1.584
  • Poison 4 Women
Re: Cara Supaya Tidak Duplicate Entry
« Reply #5 on: January 29, 2016, 01:52:49 PM »
bikin aja procedure di MySQL, nah nomer transaksi itu dikerjaan saat insertion....tanpa perlu lock atau transaction

mis :
Code: [Select]
insert into trSales (NoTrans,tglTrans) value (getNoTrans(),'20150116');


***
monggooooooooooooooo
think BIG to get BIG thing

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.018
  • Awas ya...
Re: Cara Supaya Tidak Duplicate Entry
« Reply #6 on: January 29, 2016, 03:00:38 PM »
hahahahaha..TIDAK SESEDERHANA ITU........ NOMOR ITU PERLU DITULIS KE DUA/LEBIH FILE BERBEDA!!

OH YA, DUPLIKASI BISA TERJADI PADA SETIAPNOMOR BARU DI SEBUAH TANGGAL, BUKAN HANYA NOMOR 001
OMONGAN TRANSACTION MEMANG TIDAK NYAMBUNG, TAPI MEMANFAATKAN PRIMARY KEY CONSTRAINT MUNGKIN SAJA JADISOLUSI ALTERNATIF
« Last Edit: January 29, 2016, 03:36:21 PM by davidmustakim »

Offline doditasik

  • Full Member
  • *
  • Posts: 74
.
« Reply #7 on: January 29, 2016, 03:34:40 PM »
Dear Foxer
Saya menggunakan mysql untuk menyimpan no.urut order yang akan kembali ke 1 jika ganti bulan
permasalahan muncul karena ada 3 user yang enter bersamaan sehingga penyimpanan no.order 001 menjadi bertumpuk
dimana seharusnya :
user 2 dpt no.order 001 (karena perbedaan waktu sepersekian detik mendapat no.order 001)
user 1 dpt no.order 002
user 3 dpt no.order 003
bagaimana caranya supaya data yang tersimpan utk ketiga user tdk menjadi no.order 001 semua
query saya :
*Cek nomor order terakhir
varblnthn = left(dtos(date()),6)
cSQL="select max(noorder) as nilakhir from dataorder where bulantahun=?varblnthn"
SQLEXEC(THISFORM.myconnection,cSQL,'maxcari')
orderakhir=maxcari.nilakhir+1

*Insert ke tabel
cSQL="insert into dataorder (noorder,bulantahun,userid) values (?orderakhir,?varblnthn,?lcUser)"
SQLEXEC(THISFORM.myconnection,cSQL)

Terima Kasih

Offline hell_angel

  • Junior Member
  • *
  • Posts: 305
Re: Cara Supaya Tidak Duplicate Entry
« Reply #8 on: January 29, 2016, 04:36:05 PM »
coba saja bungkus dengan transaction, coding ts diatas, lalu simulasikan 3 orang atau lebih memasukkan data transaksi dengan nomor menaik linear, misal penjualan/invoicing, pas mau save, hitung aba-aba 123 lalu click simpan. saya bisa jamin 99% pasti manjur, yang 1% tu cuma tidak mau mengesampingkan faktor lain (misal Tuhan berkehendak yang mau mencet tombol simpan, tiba" disambar petir, bisa tetap gagal juga). kalau tidak tau, nanti ta kasi sample coding. kebetulan tahun 2006 dulu, saya sempat puyeng berkutat dengan kasus macam ini.  :icon_biggrin:
 
Quote
OMONGAN TRANSACTION MEMANG TIDAK NYAMBUNG, TAPI MEMANFAATKAN PRIMARY KEY CONSTRAINT MUNGKIN SAJA JADISOLUSI ALTERNATIF

kalau menurut hemat saya, primary key, cuma mencegah yang mau disimpan, tapi tidak bisa mengatasi saat nomor urut, terambil atau diambil user lain yang duluan meng click save.

 :icon_salut:
A man who can moves a mountain, begins by carrying a small stone....

Offline foxy

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 3.453
    • Foxy Land
Re: Cara Supaya Tidak Duplicate Entry
« Reply #9 on: January 29, 2016, 04:45:35 PM »
hahahahaha..TIDAK SESEDERHANA ITU........ NOMOR ITU PERLU DITULIS KE DUA/LEBIH FILE BERBEDA!!

OH YA, DUPLIKASI BISA TERJADI PADA SETIAPNOMOR BARU DI SEBUAH TANGGAL, BUKAN HANYA NOMOR 001
OMONGAN TRANSACTION MEMANG TIDAK NYAMBUNG, TAPI MEMANFAATKAN PRIMARY KEY CONSTRAINT MUNGKIN SAJA JADISOLUSI ALTERNATIF

Sesederhana itu kok pak.... Pakai fungsi. Masukin di transaction; asal fungsinya gak ngaco ya pasti bener. Gitu aja kok repot; pakai lock-lock file segala.

foxy
This post is provided as is. Feel free to use all the codes and information, however understand that I don't have any obligations to fix any bug(s) or follow up this subject.

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.018
  • Awas ya...
Re: Cara Supaya Tidak Duplicate Entry
« Reply #10 on: January 29, 2016, 05:14:07 PM »
LOCKING SATU TABLE JELASTERMUDAH DAN JELAS JAUUUUUHHHH LEBIH SEDERHANA &FAIL-SAFE DARIPADA FUNGSI MANAPUN ==KOQ ANEH PAKE2 FUNGSI-FUNGSI dimnasukin ke transactionSEGALA!!! hoaaaaaaaahahahaha  ====itumahomongan orangngga paham
« Last Edit: January 30, 2016, 02:53:16 AM by davidmustakim »

Offline imanmis

  • Hero Member
  • *
  • Posts: 3.724
  • Newbie
Re: Cara Supaya Tidak Duplicate Entry
« Reply #11 on: January 29, 2016, 08:22:48 PM »
Wacana Penomoran itu LAGU LAMA KASET KUSUT......karena udah bulukan jadi suaranya kusut saat Simpan saat Save atau Save saat Simpan atau Save saat save atau Simpan saat Simpan

Offline hell_angel

  • Junior Member
  • *
  • Posts: 305
Re: Cara Supaya Tidak Duplicate Entry
« Reply #12 on: January 30, 2016, 06:38:19 PM »
saya tidak kepingin, memperkeruh atau berpihak mana yang benar yang mana yang salah, jadi sample simple coding saya ini cuma saya tujukan untuk TS, buat pertimbangan dia.
jadi kalau TS tertarik mencoba silakan, gak juga gpp.

http://www.files.com/shared/56ac99572f3cd/test_unique_invoice_number.zip

1. download sample lewat link diatas.
2. restore test.sql lewat navicat atau semacamnya.
3. waktu database sudah direstore, panggil test_unique_invoice_number.prg di visual foxpro.

prg diatas bisa dicoba (disimulasikan) lebih dari 1 user.

sedikit keterangan :

untuk table contoh yang bernama jual, didalamnya terdapat trigger yang mengatur nomor otomatis (utk kesederhanaan, saya sengaja tidak memasukkan pola YYMMxxxxxxxx pada nomor tersebut), kalau tidak mau pake trigger bisa juga pake stored procedure. alasannya karena trigger atau stored procedure sangat cepat di eksekusi oleh komputer, karena sangat dekat dengan table dan di sisi server. selain itu untuk yang 1% saya gunakan juga primary key (namanya juga bikinan manusia, tetap ada kemungkinan yang tidak terduga, misal 1:satu juta atau 1 : 1 milyar bisa saja, komputer/engine database menangkap/mengcatch bahwa ada lebih dari satu user yang akan menulis data yang sama di kolom yang sama). jadi disini transaction bekerjasama dengan primary key.
bila bicara transaction pasti kita pernah dengar semboyannya yaitu ACID (Atomicity, consistency, isolation and durability). IMHO yang isolation itu sebenarnya mekanisme lock row juga, jadi kita tidak perlu repot mikirin lock secara manual.

selain hal diatas saya juga mengingatkan bahwa visual foxpro juga punya transaction, tapi karena dbc atau access mdb adalah database pasif yang tidak punya engine database, maka transactionnya jadi percuma, menurut pengalaman saya. dan itu sempat jadi nightmare buat saya di tahun 2006 waktu saya 'maksa' menggunakan dbc nya visual foxpro, semua rekan" di kantor seperti ketekuk mukanya kalau berpapasan dengan saya. alasan saya waktu itu memilih dbc dan dbf visual foxpro karena mySQL masih versi 4.xx dan kalau tidak salah belum punya innodb diversi itu yang bisa transaction dan stored procedure. sedangkan yang bisa transaction adalah mssql 2000 (untunglah akhirnya perusahaan tempat saya kerja di pertengahan 2006 mau beli msSQL 2000 versi license), setelah saya gunakan msSQL 2000, semua permasalahan nomor duplicate atau stock tidak mengurang dengan benar akhirnya sirna. semua wajah" tadi akhirnya jadi bersahabat lagi waktu berpapasan dengan saya.  :icon_biggrin:

terima kasih
A man who can moves a mountain, begins by carrying a small stone....

Offline poison

  • Hero Member
  • *
  • Posts: 1.584
  • Poison 4 Women
Re: Cara Supaya Tidak Duplicate Entry
« Reply #13 on: January 31, 2016, 06:18:29 AM »
LOCKING SATU TABLE JELASTERMUDAH DAN JELAS JAUUUUUHHHH LEBIH SEDERHANA &FAIL-SAFE DARIPADA FUNGSI MANAPUN ==KOQ ANEH PAKE2 FUNGSI-FUNGSI dimnasukin ke transactionSEGALA!!! hoaaaaaaaahahahaha  ====itumahomongan orangngga paham
locking bikin cuaaaaapek.........
think BIG to get BIG thing

Offline Perkedel

  • Junior Member
  • *
  • Posts: 102
Re: Cara Supaya Tidak Duplicate Entry
« Reply #14 on: February 01, 2016, 01:10:01 PM »
terima kasih teman2 atas masukan dan diskusinya