17 April 2009

Seek pada mysql

Sebenarnya judul diatas tidaklah benar , karena setau saya tidak ada seek di mysql, tapi kita akan mencoba membuat function yang kegunaannya mirip-mirp fungsi seek pada vfp, yaitu dengan kita membuat sebuah function :

FUNCTION adakah
PARAMETERS fl,fd,nil
lakukan('select &fd from &fl where &fd=?nil','inicari')
IF EMPTY(inicari.&fd)
ada=.F.
ELSE
ada=.T.
ENDIF
lepaskan('inicari')
RETURN ada
ENDFUNC

Cara penggunaanya :
jika kita mau mencari / mengecek apakah kode barang tertentu sudah ada atau belum di dalam table master barang, kita gunakan perintah :

xygdicari=alltrim(thisform.text1.value)
if adakah('dbarang','kode',xygdicari)=.t.
messagebox('Kode barang ini sudah ada!')
return
endif

*------
dbarang=nama table
kode=nama field
xygdicari=kode yang diketikkan

semoga bermanfaat.

Nomor urut otomatis

Banyak cara dan teknik dapat kita lakukan untuk membuat penomoran transaksi secara otomatis, dari mulai penggunaan engine database sampai dengan penggunaan kode.
Disini kita akan sama-sama membuat kode tersebut.
Kebetulan function ini digunakan pada penggunaan mysql sebagai database

1. Buat sebuah table pada mysql dengan nama misal 'turutan' dengan format field: fom c(20), depan c(10), belakang n(10)

2. Isi table tersebut (bisa juga dibuatkan form inputan tersendiri) dengan data-data seperti :
fom depan belakang
----- ------- ------------
TTB TTB09 1
PO PO09 1
dst...

3. Buat 2 function berikut ini

FUNCTION NOURUTE
PARAMETERS XFOM
LAKUKAN([SELECT DEPAN,BELAKANG FROM TURUTAN WHERE FOM=?XFOM],'CURUT')
IF EMPTY(CURUT.DEPAN)
KATAKAN('URUTAN NOMOR UNTUK '+XFOM+' BELUM DIDEFINISIKAN')
LEPASKAN('CURUT')
RETURN '-'
ELSE
XNNO=ALLTRIM(CURUT.DEPAN)+'-'+ALLTRIM(STR(CURUT.BELAKANG))
LEPASKAN('CURUT')
RETURN XNNO
ENDIF
ENDFUNC

*---
FUNCTION NOURUTplus
PARAMETERS XFOM
IF LAKUKAN([UPDATE TURUTAN SET BELAKANG=BELAKANG+1 WHERE FOM=?XFOM])<1
KATAKAN('PENAMBAHAN NOMOR URUT '+XFOM+' GAGAL.')
RETURN 0
ELSE
RETURN 1
ENDIF
ENDFUNC

4. cara menggunakannya :
- pada main .prg koneksikan dulu dengan file .prg tempat menyimpan function-function kita

set proc to myproc

- form PO atau transaksi lainnya, pada init text1 (textbox untuk nomor transaksi)

this.value=nourute('PO') && ini untuk mengambil nomor terakhir transaksi PO

- pada tombol penyimpanan, jika proses penyimpanan sukses, tambahkan

nourutplus('PO')

maaf kalo ada yang salah

23 Maret 2009

me-release cursor

ketika kita harus membuat beberapa cursor dalam sebuat command utk ..misal penghitungan stok ato posting...
yang jadi males dan sering lupa adalah meng-close nya, ato menendangnya dari memory..
untuk mengatasinya kita bisa membuat sebuah fungsi yang nantinya tinggal panggil fungsi ini utk mengenyahkan si cursor tadi..

Function lepaskan
Parameters C1,C2,C3,C4,C5,C6,C7,C8,C9,C10
For U=1 To 10
CU=Alltrim(Str(U))
If ! Empty(C&CU)
If Used(C&CU)
cur=C&CU
Use In &cur
Endif
Endif
Next
Endfunc

cara menggunakannya:

...
...
lepaskan('kursormu','kursorku','kursorkita')

Penyederhanaan penggunaan transaction (mySQL)

******** FUNCTION ini adalah pengganti perintah SQLEXEC dan tidak menggunakan metode transaction
FUNCTION lakukan
PARAMETERS perintah,KUR
IF EMPTY(KUR)
KUR='TAMPUNGAN'
ENDIF
IF SQLEXEC(_KON,perintah,KUR)<0
WAIT WINDOW "Maaf perintah GAGAL'
RETURN 0
ELSE
RETURN 1
ENDIF
ENDFUNC


******* FUNCTION untuk men-deklarasikan variable public sebagai handle
FUNCTION lakukan0
lakukan('SET autocommit=0')
lakukan('start transaction')
RETURN 1
ENDFUNC


****** FUNCTION perintah sesungguhnya
Function lakukan1
Parameters nbalik,perintah,KUR
Local Array aError_(10)
If nbalik=0
Return
Endif
KUR = Iif(PCOUNT()<3,'TAMPUNGAN', KUR)
aError_(1)=0
SQLEXEC(_KON,perintah,KUR)
Aerror(aError_) && Get Error
If aError_(1) < 0
cMsgErr = Substr(aError_(3),Rat(']',aError_(3))+1,Len(aError_(3)))
Messagebox(cMsgErr)
nbalik=0
Else
nbalik=1
Endif
Return nbalik
Endfunc


***** FUNCTION untuk menentukan apakah mau commit ato rollback
FUNCTION lakukan2
PARAMETERS nbalik
IF nbalik=1
lakukan('commit')
lakukan('set autocommit=1')
RETURN .T.
ELSE
lakukan('rollback')
lakukan('set autocommit=1')
RETURN .F.
ENDIF
ENDFUNC

cara penggunaannya :

- untuk perintah yang tidak menggunakan metode transaction
lakukan([select * from tabel where year(tanggal)=2009],'kursor')
lakukan([insert into tabel1 (a,b) values (?xa,?xb)])

- untuk perintah yang menggunakan metode transaction
sukses=lakukan0()
lakukan1(sukses,[insert into tabel1 (a,b) values (?xa,?xb)])
lakukan1(sukses,[insert into tabel2 (a,b) values (?xa,?xb)])
lakukan1(sukses,[insert into tabel3 (a,b) values (?xa,?xb)])
lakukan2(sukses)