Friday, June 04, 2010

GUID di Foxpro 2.6 for DOS (atau bahkan Clipper)

Halo semua....

Udah tau GUID? Kalau belum, silahkan jalan-jalan ke situs wiki mengenai GUID . Selanjutnya, pernah kepikir gak untuk menggunakan GUID di aplikasi foxpro for DOS? He-he-he... sekarang, triknya; gimana caranya aplikasi DOS bisa bikin GUID? Jawabnya; susah! Harus ambil mac address, bikin random number sesuai dengan algoritma GUID.... wah.. repot deh... Waktu kemarin ini saya memulai project saya, sempet bingung juga tuh.... Tapi untung selalu ada solusi kalau mau sedikit ngulik. Awalnya, saya bikin program kecil ini dengan VFP:
Set talk off

Declare Integer CoCreateGuid In Ole32.Dll ;
    string @lcGUIDStruc

Declare Integer StringFromGUID2 In Ole32.Dll ;
    STRING cGUIDStruc, ;
    STRING @cGUID, ;
    LONG nSize

lcFilename = putfile("File &name:", "", "DBF")

if !empty(lcFilename)
    Create cursor [xGuid] (guid c(36))

    For i = 1 to 100000
        Insert into [xGuid] ;
        Values (NewGuid())
        if i%100 = 0
            wait transform(i) window nowait
        endif

    Endfor

    Select [xGuid]
    Copy to (lcFilename) type FOX2X

    Messagebox("Done", 64, "Generate GUID")
endif

*----------------------------------------------------------------------------
* Function    : NewGuid
* Entry with  : none
* Return with : A valid 36-chars GUID value
*----------------------------------------------------------------------------
Function NewGuid
    local lcStruc_GUID
    local lcGUID
    local lnSize
   
    lcStruc_GUID = Space(16)
    lcGUID = Space(80)
    lnSize = 40
   
    If CoCreateGuid(@lcStruc_GUID) = 0 And ;
            StringFromGUID2(lcStruc_GUID,@lcGUID,lnSize) <> 0
        lcGUID = Substr( Strconv(Left(lcGUID,76),6), 2, 36 )
    Else
        lcGUID = .F.
    Endif
   
    Return lcGUID
Endfunc
Lalu, file tersebut (yang berisi 100,000 GUID) dalam format Fox2x - dengan size sekitar 3.5meg - saya copy-kan ke folder data aplikasi FPD26 saya. Nah.. sekarang saya punya 100,000 GUID yang siap pakai. Untuk aplikasi saya, ini adalah jumlah yang jauh dari cukup untuk transaksi satu hari di satu komputer. Karena GUID selalu unik, kalaupun saya men-generate 10 file GUID untuk 10 komputer, dijamin tidak akan ada GUID yang sama (asal jangan satu file GUID yang sama di-copy ke dua komputer!). Nah, pada saat aplikasi DOS memerlukan Primary key, tinggal ambil data dari guid. Paling gampang, ambil aja field pertama. Setelah ambil, langsung hapus. Jadi field itu tidak akan bisa dipakai lagi.

Mungkin Anda bertanya sekarang, "Untuk apa menggunakan GUID di aplikasi DOS?" Nah... tujuannya, supaya kalau data hasil transaksi di aplikasi DOS itu ditarik ke SQL Server, maka kita tidak perlu lagi mengatur primary key-foreign key. Primary key dan foreign key tinggal pakai dari data asli saja. Toh tidak akan konflik. "Gimana kalau semua GUID di file dictionary-nya terpakai semua?" Yah, jangan sampai terpakai semua dong... Setiap hari isi aja dictionary dengan data GUID baru. Jadi GUID yang ada gak pernah kurang.

"Memangnya ini aplikasi apa sih? Kegunaannya untuk apa? Cara koneksi ke SQL Server-nya gimana?" He-he-he.... saya belum bisa sharing sekarang, karena selain ceritanya panjang, informasi itu juga sekarang masih 'classified' alias rahasia perusahaan... Jadi ide ini saya lemparkan karena untuk saya, ini adalah raw idea alias ide mentah. Aplikasinya? Silahkan berkreasi sendiri.... :)

6 comments:

foxeverfox said...

Nice Post , Thanks

NOS said...

Gan.. ane mau nanya cara mengedit file *.DTA lwat Foxpro for DOS gimana?
File *.DTA ini database, isinya dah ribuan jd aksesnya lama... gimana cara menghapus sebagian isi-nya???

trims infonya

NOS said...

tolong kirim petunjuknya ke email ane sh_inos@yahoo.com

NOS said...

Butuh bgnet pencerahannya gan.. tolong ya

edp bdr said...

master ad ngerti decompile aplikasi clipper gk?

edp bdr said...

master ad ngerti decompile aplikasi clipper gk?