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)