Hello all,
Pertama kali, coba lihat kode di bawah ini. Apakah ada bagian dari program Anda yang menggunakan kode seperti ini?
lcCursor = SUBSTR(SYS(2015), 3, 8)
Select some_field ;
From some_table ;
Into Cursor (lcCursor)
Kalau ada, HATI-HATI!!! Lho, kenapa? Karena VFP mengambil nilai SYS(2015) dari jam dan tanggal sistem komputer. DAN HARI KEMARIN (15 Februari 2014) sekitar jam 08-09 pagi adalah saatnya algoritma SYS(2015) akan mulai menghasilkan angka nol pada karakter ke-3 dari SYS(2015). Efeknya pada program apa? Kalau Anda menggunakan 8 karakter terakhir untuk penamaan cursor, maka VFP akan memberikan pesan Syntax Error karena penamaan cursor VFP tidak boleh diawali dengan numerik. Jadi bisa saja program Anda yang sudah berjalan bertahun-tahun normal-normal saja, eh... tau-tau sejak kemarin pagi mendadak error.
Fenomena ini akan berlanjut sampai sekitar bulan Juli 2014. Setelah bulan Juli 2014, huruf ketiga dari fungsi SYS(2015) akan mulai memberi karakter 'A' ; yang berarti nilai dari SUBSTR(SYS(2015), 3, 8)akan kembali aman untuk digunakan sebagai nama cursor. Sampai kapan? Wah, saya gak ada waktu untuk mencari tau. Tapi pastinya antara 4 sampai 5 tahun lagi kasus seperti ini akan terjadi lagi. Solusinya? Ya, jelas, jangan pakai kode itu untuk penamaan cursor. Lebih aman kalau langsung pakai SYS(2015) tanpa di-truncated (karena hasil dari SYS(2015) termasuk underscore di depannya adalah 10 karakter, dan penamaan cursor masih bisa 10 karakter). Atau, kalau memang harus 8 huruf (karena sesuatu hal semisal mengikuti penamaan sistem operasi DOS yang masih 8.3), maka pastikan Anda menggunakan karakter yang diijinkan untuk huruf pertamanya. Contoh;
lcCursor = '_' + SUBSTR(SYS(2015), 3, 7)
atau kalau pembuatan cursor dilakukan di dalam loop yang mungkin berjalan dalam hitungan milli-second (berarti kalau diambil dengan kode di atas bisa saja penamaan double), maka bisa digunakan:
lcCursor = '_' + SUBSTR(SYS(2015), 4, 7)
Ok guys (and gals). Semoga post ini bisa membantu Anda. :) . See you around...