BD2 009 Visual Foxpro

42
1 BAB IX Visual Foxpro 7.1. Pendahuluan FoxPro merupakan sebuah DBMS yang membantu dalam mengumpulkan, mengambil, dan menampilkan data. Sedangkan Visual FoxPro merupakan bahasa pemrograman visual yang berorientasi pada obyk dan sekalgus juga sebagai RDMS. Tampilan pertama kali untuk Visual Foxpro 6.0 adalah sebagai berikut: Gambar 7.1: Tampilan awal Visual Foxpro Pada Gambar 7.1. akan diminta untuk memilih beberapa alternatif pilihan sebelum memasuki jendela pemrograman, yaitu: o Open the new component gallery to organize your Visual FoxProi, untuk mengorganisasi komponen visual FozPro dengan membuka galeri komponen baru. o Discover programming solutions by exploring sample applications, untuk menemukan solusi pemrograman dengan menjelajahi aplikasi-aplikasi contoh yang sudah disediakan. o Create a new application, untuk membuat aplikasi baru o Open an existing project, untuk membuka proyek yang telah dibuat sebelumnya (yang sudah ada). o Close this screen, untuk menutup jendela / tampilan selamat datang. Di bawah pilihan-pilihan tersebut terdapat kotak cek (check box) yang berbunyi Don’t display this welcome screen again. Jika di-klik (memberi tanda centang) pada kotak cek tersebut maka berarti memerintahkan Visual FoxPro 6.0 agar tidak membuka Visual Foxpro untuk yang selanjutnya. Setelah ditutup jendela tersebut, selanjutnya akan muncul tampilan utama dari Visual Foxpro.

Transcript of BD2 009 Visual Foxpro

Page 1: BD2 009 Visual Foxpro

1

BAB IX Visual Foxpro

7.1. Pendahuluan

FoxPro merupakan sebuah DBMS yang membantu dalam mengumpulkan, mengambil, dan menampilkan data. Sedangkan Visual FoxPro merupakan bahasa pemrograman visual yang berorientasi pada obyk dan sekalgus juga sebagai RDMS. Tampilan pertama kali untuk Visual Foxpro 6.0 adalah sebagai berikut:

Gambar 7.1: Tampilan awal Visual Foxpro

Pada Gambar 7.1. akan diminta untuk memilih beberapa alternatif pilihan sebelum memasuki jendela pemrograman, yaitu: o Open the new component gallery to organize your Visual FoxProi, untuk

mengorganisasi komponen visual FozPro dengan membuka galeri komponen baru.

o Discover programming solutions by exploring sample applications, untuk menemukan solusi pemrograman dengan menjelajahi aplikasi-aplikasi contoh yang sudah disediakan.

o Create a new application, untuk membuat aplikasi baru o Open an existing project, untuk membuka proyek yang telah dibuat

sebelumnya (yang sudah ada). o Close this screen, untuk menutup jendela / tampilan selamat datang.

Di bawah pilihan-pilihan tersebut terdapat kotak cek (check box) yang berbunyi Don’t display this welcome screen again. Jika di-klik (memberi tanda centang) pada kotak cek tersebut maka berarti memerintahkan Visual FoxPro 6.0 agar tidak membuka Visual Foxpro untuk yang selanjutnya. Setelah ditutup jendela tersebut, selanjutnya akan muncul tampilan utama dari Visual Foxpro.

Page 2: BD2 009 Visual Foxpro

2

7.2. Membuat Project / Aplikasi Pada tampilan utama Visual FoxPro pilih menu File-New, maka akan muncul tampilan seperti Gambar 7.2.

Gambar 7.2.: Tampilan utama Visual Foxpro

Dari menu dalam tampilan utama tersebut, pilih Option Project dan klik tombol New File. Dari kotak dialog yang akan muncul, tentukan letak dimana file project akan disimpan, kemudian tekan Save. Selanjutnya akan muncul tampilan seperti Gambar 7.3.

Gambar 7.3: Tampilan untuk menentukan lokasi penyimpanan sebuah Project

7.3. Membuat Form Pengisian Data Bagian ini akan mengetengahkan 3 macam cara pembuatan form pengisian data. Materi ini sengaja disajikan secara bersama supaya dapat dipertimbangkan persamaan dan perbedaan dari masing-masing cara, serta kelebihan dan

Page 3: BD2 009 Visual Foxpro

3

kekurangnnya. Bagian ini akan mengambil contoh pengisian data Mahasiswa, yaitu:

Nomor mahasiwa Nama mahasiswa Tanggal lahir mahasiswa

Cara yang bias dipilih adalah: 1. Form dengan metode lama (seperti sering dilakukan pada masa DBASE III

plus, tidak direkomendasikan) 2. Form dengan menggunakan fasilitas buffering pada Visual Foxpro 3. Form dengan fasilitas transaksi (direkomendasikan) PERSIAPAN : Buatlah tabel MAHASISWA yang akan diisi data lewat form Buatlah tabel dengan struktur seperti pada Gambar 7.4, kemudian simpanlah dengan nama MAHASISWA.DBF

Gambar 7.4: Membuat struktur tabel

MEMBUAT FORM Ada beberapa metode yang dapat ditempuh untuk form isian data :

1. Dengan menggunakan variabel memori. Data-data isian dilayar ditampung dalam variabel kemudian disimpan ke tabel dengan printah REPLACE. Cara ini sudah tergolong lama dan tidak ditunjukkan di modul ini (sudah tidak direkomendasikan untuk dipakai).

2. dengan menggunakan tabel buffering. Buffering sistem kerjanya dapat dianggap CACHE pada sistem komputer. Data-data isian dilayar ditampung dalam BUFFER (yang ditangani secara internal oleh foxpro) kemudian dengan peringah tertentu (TABLEUPDATE) akan menulis data di BUFFER ke disk, atau dengan perintah tertentu (TABLEEVERT) akan

Page 4: BD2 009 Visual Foxpro

4

membatalkan perubahan di BUFFER tersebut (tidak ditulis ke disk). Teknik ini lumayan baru tidak merepotkan.

3. dengan menggunakan TRANSAKSI. Sistem kerja TRANSAKSI mirip dengan sistem kerja Buffering, tetapi lebih besar dan lebih menyeluruh (bisa banyak tabel, banyak record0. semua perubahan data TAMBAH, HAPUS, UBAH yang dilingkupi dalam satu transaksi akan ditulis secara permanen ke disk seteleh ada perintah (END TRANSACTION), dan akan dibatalkan jika ada perintah ROLLBACK. Transaksi sendiri harus diawali dengan suatu perintah BEGIN TRANSACTION. Teknik ini yang direkomendasikan untuk dipakai karena handal.

LANGKAH WAJIB UNTUK FORM ISIAN DATA Ada beberapa langkah /aturan yang harus dilewatkan saat membuat form isian data :

1. Data environment harus diisi dengna tabel yang akan dipakai sebagai tabel kerja. Kesalahan dalam langkah ini berakibat fatal (data tidak tidak masuk tabel).

2. Binding harus dilakukan terhadap semua kolom tabel (field) yang ingin diisi. Jika hal ini terlewat, juga berakibat fatal (data tidak masuk tabel).

3. penyimpanan harus memuat perintah untuk menyimpan data (tergantung metode yang dipakai) dan pembatalan juga harus memuat perintah untuk membatalkan.

CONTOH I : FORM DENGAN BUFFERING

1. Buat form baru, simpan dengan nama MAHASISWA.SCX (ditempatkan di FOLDER yang sama dengan tabel MAHASISWA.DBF).

2. Buka data environment, lalu tambahkan tabel MAHASISWA tersebut ke dalam data environment.

3. Tentukan properti BufferModeOverWrite. Isi dengan salah satu mode bufffering yang ada (boleh optimistic/pessimistic, asal bukan NONE). Setelah itu tutup data enviroment.

Page 5: BD2 009 Visual Foxpro

5

4. Tempatkan kontrol-kontrol dilayar form seperti LABEL untuk keterangan,

TEXTBOX untuk isian, tombol-tombol kendali. Layout form bisa seperti gambar di bawah ini :

5. Ubah properti dari masing-masing obyek kontrol data form tersebut sesuai

dengan tabel berikut :

Obyek Properti yang diubah Nilai Properti Tombol Tambah Caption Tambah Name BtnTambah Tombol Simpan Caption Simpan Name BtnSimpan

Page 6: BD2 009 Visual Foxpro

6

Tombol Batal Caption Batal Name BtnBatal Tombol Edit Caption Edit Name BtnEdit Tombol |< Caption |< Name BtnTeratas Tombol < Caption < Name BtnSebelumnya Tombol > Caption > Name BtnBerikutnya Tombol >| Caption >| Name BtnTerakhir Tombol Hapus Caption Hapus Name BtnHapus Tombol Keluar Caption Keluar Name BtnKeluar 6. Lakukan BINDING terhadap kotak-kotak isian di layar dengan kolom-

kolom tabel. Binding dilakukan dengan menggunakan properti CONTROL SOURCE dari kotak-kotak isian (TEXTBOX), jangan sampai ada yang terlewat.

Kotak Isian Control Source Text1 MAHASIWA.NO_MHS Text2 MAHASISWA.NAMA_MAHASIWAText3 MAHASIWA.TGL_LAHIR

7. Langkah berikutnya adalah mulai menuliskan kode-kode. Klik ganda pada

kontrol yang ingin diberi kode, yang akan memunculkan jendala kode. Hal terpenting yang harus dicermati adalah kode tersebut menempel pada objek yang tepat dan pada event yang tepat.

Obyek Event Kode Form Init SET DELETE ON

SET DATE BRITISH THISFORM.SETALL(“ENABLED”, .F.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”, .T.,”TEXTBOX”) THISFORM.BtnSIMPAN.ENABLED = .F. THISFORM.BtnBATAL.ENABLED = .F.

Page 7: BD2 009 Visual Foxpro

7

KETERANGAN Event INIT terjadi sesaat setelah suatu obyek tercipta, hanya terjadi sekali saat obyek dimuat ke memori. Kode di atas hanyalah sekedar melakukan inisialisasi berikut :

- Atur agar record bertanda hapus tidak ditampilkan - Atur tanggal ke gaya Inggris, yaitu hari-bulan-tahun (bukan gaya

Amerika) - Atur semua kotak isian (TEXTBOX) ke posisi tak aktif. Skenarionya

kotak isian hanya aktif pada modus penambahan data/pengeditan data. - Tombol-tombol yang aktif pertama kali saat form muncul adalah semua

tombol kecuali simpan dan batal. Skenarionya adalah tombol simpan dan batal hanya aktif setelah ada penambahan record baru atau pengeditan record.

BtnTambah Click SELECT MAHASISWA APPEND BLANK THISFORM.SETALL(“ENABLED”,.T.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.F.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .T. THISFORM.BtnBATAL.ENABLED = .T. THISFORM.REFRESH()

KETERANGAN - APPEND BLANK akan menambah 1 record baru ke tabel MAHASIWA - Aktifkan kotak-kotak isian - Non-aktifkan tombol-tombol, kecuali SIMPAN dan BATAL (skenarionya

pada penambahan data, hal yang bisa dilakukan adalah menyimpan atau membatalkan)

BtnSimpan Click SELECT MAHASISWA = TABELUPDATE(.T.) THISFORM.SETALL(“ENABLED”,.F.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.T.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .F. THISFORM.BtnBATAL.ENABLED = .F. THISFORM.REFRESH()

KETERANGAN - TABLE UPDATE akan menulis data di BUFFER ke disk/file - Non-aktifkan kotak-kotak isian (setelah disimpan skenarionya kembali ke

modus biasa) - Aktifkan tombol-tombol, kecuali tombol SIMPAN dan BATAL

BtnBATAL Click SELECT MAHASISWA = TABELEVERT(.T.) THISFORM.SETALL(“ENABLED”,.F.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.T.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .F. THISFORM.BtnBATAL.ENABLED = .F. THISFORM.REFRESH()

KETERANGAN - TABLE EVERT akan membatalkan perubahan data di BUFFER (tidak

ditulis ke disk/file). - Non-aktifkan kotak-kotak isian (setelah disimpan skenarionya kembali ke

modus biasa). - Aktifkan tombol-tombol, kecuali tombol SIMPAN dan BATAL

BtnEDIT Click THISFORM.SETALL(“ENABLED”,.T.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.F.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .T.

Page 8: BD2 009 Visual Foxpro

8

THISFORM.BtnBATAL.ENABLED = .T. THISFORM.REFRESH()

KETERANGAN - Aktifkan kotak-kotak isian, agar bisa di EDIT data - Non-aktifkan tombol-tombol, kecuali SIMPAN dan BATAL (skenarionya

pada pengeditan data, hal yang bisa dilakukan adalah menyimpan atau membatalkan

BtnTERATAS Click SELECT MAHASISWA GO TOP THISFORM.REFRESH

BtnSEBELUMNYA Click SELECT MAHASISWA IF NOT BOF () SKIP –1 ELSE MESSAGEBOX (“Sudah diposisi teratas”,48,”INFO”) END IF THISFORM.REFRESH

BtnBerikutnya Click SELECT MAHASISWA IF NOT BOF () SKIP 1 ELSE MESSAGEBOX (“Sudah diposisi terbawah”,48,”INFO”) END IF THISFORM.REFRESH

BtnTERAKHIR Click SELECT MAHASISWA GO BOTTOM THISFORM.REFRESH

BtnHAPUS Click SELECT MAHASIWA IF NOT EOF () DELETE SKIP-1 ELSE MESSAGEBOX (”Posisikan dulu recordnya”,32+0,”INFO”) END IF THISFORM.REFRESH

BtnKELUAR Click THISFORM.RELEASE

CONTOH 2: FORM DENGAN TRANSACTION Fasilitas transaction hanya bisa didapat pada tabel yang merupakan bagian dari database. Free-tabel tidak bisa memanfaatkan transaction. Untuk keperluan ini, harus terlebih dahulu dibuat database, lalu tambahkan tabel mahasiswa yang telah dibuat di atas ke dalamnya

1. Buat form baru, simpan dengan nama MAHASISWA.SCX (ditempatkan di FOLDER yang sama dengan tabel MAHASISWA.DBF).

2. Buka data environment, lalu tambahkan tabel MAHASISWA tersebut ke dalam data environment.

3. Non-aktifkan/matikan buffering pada tabel(properti BefferModeOverWrite diisi NONE).

Page 9: BD2 009 Visual Foxpro

9

4. Tempatkan kontrol-kontrol dilayar form seperti LABEL untuk keterangan, TEXTBOX untuk isian, tombol-tombol kendali. Layout form bisa seperti gambar di bawah ini:

5. Ubah properti dari masing-masing obyek kontrol data form tersebut sesuai

dengan tabel berikut :

Obyek Properti yang diubah Nilai Properti Tombol Tambah Caption Tambah Name BtnTambah Tombol Simpan Caption Simpan Name BtnSimpan Tombol Batal Caption Batal Name BtnBatal Tombol Edit Caption Edit Name BtnEdit Tombol |< Caption |< Name BtnTeratas Tombol < Caption < Name BtnSebelumnya Tombol > Caption > Name BtnBerikutnya Tombol >| Caption >| Name BtnTerakhir Tombol Hapus Caption Hapus Name BtnHapus Tombol Keluar Caption Keluar Name BtnKeluar

6. Lakukan BINDING terhadap kotak-kotak isian di layar dengan kolom-

kolom tabel. Binding dilakukan dengan menggunakan properti CONTROL SOURCE dari kotak-kotak isian (TEXTBOX), jangan sampai ada yang terlewat.

Kotak Isian Control Source

Page 10: BD2 009 Visual Foxpro

10

Text1 MAHASIWA.NO_MHS Text2 MAHASISWA.NAMA_MAHASIWA Text3 MAHASIWA.TGL_LAHIR 7. Langkah berikutnya adalah mulai menuliskan kode-kode. Klik ganda pada

kontrol yang ingin diberi kode, yang akan memunculkan jendala kode. Hal terpenting yang harus dicermati adalah kode tersebut menempel pada objek yang tepat dan pada event yang tepat.

Obyek Event Kode Form Init SET DELETE ON

SET DATE BRITISH THISFORM.SETALL(“ENABLED”, .F.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”, .T.,”TEXTBOX”) THISFORM.BtnSIMPAN.ENABLED = .F. THISFORM.BtnBATAL.ENABLED = .F.

KETERANGAN Event INIT terjadi sesaat setelah suatu obyek tercipta, hanya terjadi sekali saat obyek dimuat ke memori. Kode di atas hanyalah sekedar melakukan inisialisasi berikut :

- Atur agar record bertanda hapus tidak ditampilkan - Atur tanggal ke gaya Inggris, yaitu hari-bulan-tahun (bukan gaya

Amerika) - Atur semua kotak isian (TEXTBOX) ke posisi tak aktif. Skenarionya

kotak isian hanya aktif pada modus penambahan data/pengeditan data. - Tombol-tombol yang aktif pertama kali saat form muncul adalah semua

tombol kecuali simpan dan batal. Skenarionya adalah tombol simpan dan batal hanya aktif setelah ada penambahan record baru atau pengeditan record.

BtnTambah Click BEGIN TRANSACTION SELECT MAHASISWA APPEND BLANK THISFORM.SETALL(“ENABLED”,.T.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.F.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .T. THISFORM.BtnBATAL.ENABLED = .T. THISFORM.REFRESH()

KETERANGAN - BEGIN TRANSACTION akan mengalami transaksi - APPEND BLANK akan menambah 1 record baru ke tabel MAHASIWA - Aktifkan kotak-kotak isian - Non-aktifkan tombol-tombol, kecuali SIMPAN dan BATAL

(skenarionya pada penambahan data, hal yang bisa dilakukan adalah menyimpan atau membatalkan)

BtnSimpan Click END TRANSACTION THISFORM.SETALL(“ENABLED”,.F.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.T.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .F. THISFORM.BtnBATAL.ENABLED = .F. THISFORM.REFRESH()

Page 11: BD2 009 Visual Foxpro

11

KETERANGAN - END TRANSACTION akan menulis semua perubahan data ke disk/file.

Ini dilakukan terhadap semua tabel yang ada di database (bisa banyak tabel) yang dilingkupi transaksi.

- Non-aktifkan kotak-kotak isian (setelah disimpan skenarionya kembali ke modus biasa)

- Aktifkan tombol-tombol, kecuali tombol SIMPAN dan BATAL BtnBATAL Click ROLLBACK

THISFORM.SETALL(“ENABLED”,.F.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.T.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .F. THISFORM.BtnBATAL.ENABLED = .F. THISFORM.REFRESH()

KETERANGAN - ROLLBACK akan membatalkan smua perubahan data dilingkup

transaksi - Non-aktifkan kotak-kotak isian (setelah disimpan skenarionya kembali

ke modus biasa). - Aktifkan tombol-tombol, kecuali tombol SIMPAN dan BATAL

BtnEDIT Click THISFORM.SETALL(“ENABLED”,.T.,”TEXTBOX”) THISFORM.SETALL(“ENABLED”,.F.,”COMMANDBUTTON”) THISFORM.BtnSIMPAN.ENABLED = .T. THISFORM.BtnBATAL.ENABLED = .T. THISFORM.REFRESH()

KETERANGAN - Aktifkan kotak-kotak isian, agar bisa di EDIT data - Non-aktifkan tombol-tombol, kecuali SIMPAN dan BATAL

(skenarionya pada pengeditan data, hal yang bisa dilakukan adalah menyimpan atau membatalkan

BtnTERATAS Click SELECT MAHASISWA GO TOP THISFORM.REFRESH

BtnSEBELUMNYA

Click SELECT MAHASISWA IF NOT BOF () SKIP –1 ELSE MESSAGEBOX (“Sudah diposisi teratas”,48,”INFO”) END IF THISFORM.REFRESH

BtnBerikutnya Click SELECT MAHASISWA IF NOT BOF () SKIP 1 ELSE MESSAGEBOX (“Sudah diposisi terbawah”,48,”INFO”) END IF THISFORM.REFRESH

BtnTERAKHIR Click SELECT MAHASISWA GO BOTTOM THISFORM.REFRESH

BtnHAPUS Click SELECT MAHASIWA IF NOT EOF () DELETE

Page 12: BD2 009 Visual Foxpro

12

SKIP-1 ELSE MESSAGEBOX (”Posisikan dulu recordnya”,32+0,”INFO”) END IF THISFORM.REFRESH

BtnKELUAR Click THISFORM.RELEASE

CATATAN : - TRANSAKSI bisa melibatkan banyak tabel, banyak record - TRANSAKSI lebih handal dibanding BUFFERING terutama

untuk aplikasi banyak tabel - Jika menggunakan TRANSAKSI, maka BUFFERING tidak perlu

diaktifkan. - TRANSAKSI selalu diawali dengan BEGIN TRANSACTION

BEGIN TRANSACTION END TRANSACTION Atau BEGIN TRANSACTION ROLLBACK

- BUFFERING selalu diakhiri dengan TABLEUPDATE / TABELEVERT

MODUL III

Page 13: BD2 009 Visual Foxpro

13

PENCARIAN DATA TERINDEKS

I. Modul ini akan melanjutkan modul sebelumnya, dimana akan dibahas penggunaan perintah INDEXSEEK untuk melakukan pencarian dan validasi data masukan.

Pada Visual Foxpro versi 3 atau 5, perintah INDEXSEEK belum ada (yang ada adalah SEEX) sehingga form dengna metode buffering kurang disukai karena harus membuka dua tabel yang sama (di area yang berbeda) agar ini dilakukan. Hal ini disebabkan karena pergerakan record pada posisi beffering aktif akan menyebabkan data yang sedang diketik otomatis tersimpan, padahal belum tentu pengguna berkehendak menyimpannya. Pada versi 6 atau yang lebih baru, hal ini tidak diperlukan lagi sehingga form dengan buffering / transaksi tidak menemui kendala tersebut. Perintah INDEXSEEK mempunyai spesifikasi sebagai berikut :

- Tabel yang akan dicari harus punya index - Index tersebut harus aktif (bisa diatur lewat properti). - Jika perintah INDEXSEEK diberi parameter FALSE (.F.), record

tidak bergerak dari posisi semula meski ditemukan kondisi data yang dicari. Ini cocok untuk pengecekan duplikasi data atau referensi data, misal :

Ex1: Untuk Cek Duplikasi Data && diandaikan jika masukan nomor Mahasiswa tidak boleh dobel SELECT MAHASISWA INDEXSEEK (THISFORM.TxtNoMhs.VALUE,.F.) IF FOUND = MESSAGEBOX (“No_Mhs tersebut telah terpakai”) RETURN .F. ELSE RETURN .T. END IF Ex1: Untuk Cek Referensi Data && diandaikan ada isian kode pos pada tabel mahasiswa dan isian kode && pos tersebut diperjanjikan harus valid (ada ditabel KODE_POS) SELECT KODE_POS INDEXSEEK (THISFORM.TxtKdPos.VALUE,.F.) IF Not FOUND ( ) = MESSAGEBOX (“Kode Pos tersebut belum terdefinisi”) Return .F. Else Return .T.

Page 14: BD2 009 Visual Foxpro

14

Endif

- Jika perintah INDEXSEEK diberi parameter TRUE (.T.) record bergerak ke posisi yang ditemukan (jika ketemu) atau ke EOF (jika tidak ketemu). Ini biasa dipakai pada proses pencarian data.

PERSIAPAN : Tabel Mahasiswa harus diberik Index Modifikasi tabel mahasiswa dengan menambahkan index berikut :

- Kunci index : NO_MHS - Tipe : REGULER - Tag : Urut_Nomhs

MODIFIKASI FORM : Pada contoh ini akan ditunjukkan proses cek duplikasi nomor mahasiswa. Kode yang harus ditambahkan adalah pada event VALID dari kotak isian noor mahasiswa. Pada event VALID, perintah RETURN .T. digunakan untuk mengindikasikan bahwa validasi sukses / valid dan RETURN .F. jika validasi gagal / invalid.

Page 15: BD2 009 Visual Foxpro

15

Langkah- langkah : 1. Buka form pada modul sebelumnya. 2. Buka data enviroment dari form tersebut, dan pastikan

bahwa properti ORDER dari tabel mahasiwa di set ke URUT_NOMHS (nama tag yang dibuat saat memberi index).

3. ketik kode berikut pada event VALID dari kotak isian nomor mahasiwa (TxtNoMhs).

&& diandaikan nomor mahasiswa tidak boleh dobel SELECT MAHASISWA INDEXSEEK (THISFORM.TxtNoMhs.Value,.F.) IF FOUND = MESSAGEBOX (“No_MHS tersebut telah terpakai”) RETURN .F. ELSE RETURN .T. ENDIF

Atau jika lebar kotak isian nomor mahasiswa berbeda dengan lebar kolom pada tabel maka dapat dicoba memberikan perintah ALLTRIM (Thisform. TxtNoMhs. Vlue) yang akan menghilangkan spasi di akhir/ awal isian.

MODUL IV

PENGGUNAAN GRID

Page 16: BD2 009 Visual Foxpro

16

Pada modul ini akan ditunjukkan penggunaan GRID. Obyek ini digunakan untuk menampilkan data dalam bentuk baris dan kolom. GRID mempunyai hirarkhi sebagai berikut :

GRID Kolom 1

Header Control

Kolom 2 Header

Control Kolom ke-N

Header Control

Masing- masing obyek dalam hirarki tersebut mempunyai properti dan methode sendiri- sendiri, sehingga kita dapat mengontrol secara penuh setiap elemen pada grid. Bagian 1 : GRID untuk pemasukan data secara langsung. 1. Pada tutorial ini akan digunakan kembali tabel MAHASISWA da tabel JURUSA .

Diasumsikan pula bahwa kedua tabel ini sudah beris beberapa data di dalamnya. 2. Buat FORM di dalam layoat seperti pada gambar di bawah ini :

Page 17: BD2 009 Visual Foxpro

17

3. Atur data environment dari form tersebut, tambahkan tabel Mahasiswa dan JURUSAN ke dalamnya. Jangan lupa aktifkan pada TAG untuk masing- masing tabel tersebut.

4. Atur properti untuk masing- masing obyek sebagai berikut

Obyek Properti Nilai

Grid Allow AddNew .T. Nilai TRUE pada properti ini berarti kita bisa menambahkan record baru dengan cara menekan tombol panah bawah pada saat posisi kursor ada di posisi terakhir. Selanjutnya data dapat diketik langsung pada GRID

DeleteMark .T. Nilai TRUE pada properti ini berarti tanda hapus untuk tiap record tampil di GRID. Penghapusan record data dapat dilakukan dengan mengklik pada DeleteMark ini.

RecordSourceType 1 (Alias) Properti ini menentukan jenis sumber data untuk GRID.

RecordSource MAHASISWA Properti ini menetukan darimana sumber data diambil (pada kasus ini dari tabel mahasiswa).

ColusmnCount 5 Properti ini menentukan cacah kolom dimiliki oleh GRID.

Kolom ke-1 Name Kolom1 ControlSource Mahasiswa. No_mhs

Properti sebenarnya bisa juga tidak di isi dengan konsekuensi urutan tampilan kolom data akan seperti urutan fieldnya pada tabel sumber data.

Kolom ke-2 Name Kolom2 ControlSource Mahasiswa.nama mhs Kolom ke-3 Name Kolom3 ControlSource Mahasiswa.tgl lahir Kolom ke-4 Mame Kolom4 ControlSource Mahasiswa agama Kolom ke-5 Name Kolom5 ControlSource Mahasiswa.kd_jurusan Header kolom ke-1

Caption No Mhs Header digunakan untuk member keterangan pada tiap- tiap kolom.

Header kolom ke-2

Caption Nama Mahasiswa

Header kolom ke-3

Caption Tanggal Lahir

Header Caption Agama

Page 18: BD2 009 Visual Foxpro

18

kolom ke-4 Header kolom ke-5

Caption Kode Jurusan

5. Saatnya melakukan penulisan kode-kode. Pertama kode untuk event INIT dari form :

SET CENTURY ON SET DATE BRITISH SELECT MAHASISWA GO TOP IF EOF () APPEND BLANK ENDIF

GRID tdak akan dapat disinggahi kursor jika tabel yang menjadi sumber data kosong sama sekali. Untuk itu minimal harus ada 1 record data. Kode di atas mengecek apakah datanya kosong sama sekali dan APPEND satu record kosong jika memang demikian.

6. Sampai di sini GRID tersebut sebenarnya sudah dapat dipakai tetapi belum ada kode validasi sama sekali. Untuk memberi kode validasi dilakukan lewat event VALID pada obyek kontrol yang merupakan bagian dari kolom (kolom mempunyai dua anggota yaitu Haeder dan Kontrol secara default biasanya berupa textbox). Sebagai contoh, ketik kode berikut pada event VALID untuk obyek TEXT 1 pada kolom ke-5 :

SELECT JURUSAN

SEEK THIS. VALUE

IF NOT FOUND ()

=MESSAGEBOX (‘KODE JURUSAN TERSEBUT TAK DI TEMUKAN”, 48, “INFO”)

THIS. VALUE=””

SELECT MAHASISWA

RETURN 0

ENDIF

SELECT MAHASISWA

RETURN .T.

7. Validasi dapat juga dilakukan dengan cara membatasi kursor supaya tidak masuk kedalam kotak isian jika suatu kondisi dipenuhi. Ini dilakukan lewat event WHEN pada kontrol yang merupakan bagian dari kolom. Sebagai contoh, ketik kode berikut pada event WHEN untuk obyek TEXT 1 pada kolom ke-1 :

IF EMPTY (MAHASISWA.NO_MHS)

RETURN .T.

Page 19: BD2 009 Visual Foxpro

19

ELSE

RETURN .F.

ENDIF

Kode ini akan menolak masuknya kursor (RETURN .F.) ke isian nomor mahasiswa jika nomor mahasiswanya sudah ada isi (tak boleh tambah baru).

Bagian 2 : Menampilkan data dari tabel referensi pada GRID.

1. Buka kembali form dari bagian 1, lalu save as ke nama lain. 2. Buka data environment dari form tesebut, lalu buat relasi tabel dari mahasiswa kejurusan

dengan data DRAG field KD _JURUSAN pada mahasiswa ke TAG aktif dari tabel jurusan. Hasil relasi harusnya seperti gambar di bawah ini:

3. Lakukan beberapa modifikasi terhadap properti GRID sebagai berikut : Obyek Properti Nilai

Grid ColumnCount 6

Cacah kolom GRID menjadi 6 kolom

Kolom ke-6 Name Kolom6

ControlSource Jurusan.nm_jurusan

Properti ini jika diisi dari tabel lain yang bukan merupakan recorderSource dari GRID (dan sudah relasikan sebelumnya) akan menampilkan tabel referensi.

Header kolom ke-1 Caption Jurusan

Header digunakan untuk memberi keterangan pada tiap- tiap kolom.

4. Saatnya melakukan modifikasi kode- kode. Salah satu modifikasi yang diperlukan adalah mencegah masuknya korsor ke kolom 6 apapun kondisinya (tak ada data asli, hanya tampilkan dari tabel referensi agar komunikatif). Ini dilakukan lewat event WHEN pada obyek TEXT 1 di kolom 6 :

Page 20: BD2 009 Visual Foxpro

20

RETURN .F.

Kolom 6 sekarang tidak bisa disinggahi kursor sama sekali (tak bisa diedit).

Bagian 3 : Menampilkan data ekspresi/ rumusan tertentu

1. Lakukan modifikasi tabel MAHASISWA dengan menambahkan field KELAMIN, sehingga strukturnya menjadi sebagai berikut :

No MHS Character 10

Nama MHS Character 45

TGL LAHIR Date 8

AGAMA Character 15

KD JURUSAN Character 2

KELAMIN Character 1

Setelah itu, isikan data-data jenis kelaminnya (L untuk laki- laki dan P untuk perempuan)

2. Buka kembali form dari bagian 2, lalu save as ke nama lain.

3. Lakukan beberapa modifikasi terhadap properti GRID sebagai berikut :

Obyek Properti Nilai

Grid ColumnCount 8

Cacah kolom GRID menjadi 8 kolom.

Kolom ke-7 Name Kolom7

ControlSource HF (mahasiswa kelamin L, laki- laki. P, perempuan)

Fungsi HF bekerja seperti perintah IF… ENDIF tetapi dalam bentuk pendek. Pada kolom 7 ini, isian akan menjadi LAKI- LAKI jika L dan perempuan jika selain itu.

Header kolom ke-2 Caption Kelamin

Kolomke-8 Name Kolom8

ControlSource (DATE()- MAHASISWA TGL_LAHIR), 365

Fungsi DATE() berarti tanggal komputer saat itu, jika dikurangi dengan tanggal lahir akan mendapat selisih tanggal tersebut dalam satuan hari. Setelah itu selisih tersebut dibagi dengan 365 hari untuk mendapatkan umur mahasiswa tersebut dalam satuan tahun.

Header kolom ke-8 Caption Umur.

Page 21: BD2 009 Visual Foxpro

21

5. Saat melakukan modifikasi kode- kode. Salah satu modifikasi yang diperlukan adalah mencegah masuknya kursor ke kolom 7 dan 8 apapun kondisinya. Ini dilakukan lewat event WHEN pada obyek TEXT1 di kolom 7 maupun di kolom 8.

Kolom 7 dan 8 sekarang tidak bisa disinggahi kursor sama sekali (tak bisa diedit).

Bagian 4 : Mengganti kontrol pada kolom dengan obyek tipe lain

Pada GRID, kolom mengandung HEADER dan KONTROL. Kontrol ini dogunakan untuk mewadahi data yang ditampilkan dan diteliti pada GRID. Secara bawaan (default). Kontrol ini berupa TextBox. Di sini akan ditunjukkan mengganti kontrol yang berupa TextBox dengan ComboBox.

1. Buka kembali form dari bagian 3, lalu save as ke nama lain. 2. Lakukan modifikasi terhadap properti GRID dengan mengganti TEXTBOX pada kolom ke-4

(agama) dengan ComboBox. Penggantian ini memerlukan ketelitian dan ketepatan, jadi ahti- hati jangan sampai malah kolom ke-4 ikut terhapus. - Pertama, pastikan bahwa fokus berada pada obyek TextBox dengan memilihnya lewat

jendela properti. - Cepat beralih ke grid dan tekan tombol DELETE. Jika langkah ini benar, maka obyek

TextBox pada kolom ke-4 hilang (jika salah bisa- bisa GRID hilang atau kolom 4 hilang). - Taruh obyek ComboBox ke kolom ke-4 tersebut. Sekarang kontrol untuk kolom 4 akan

berupa Combo. 3. Atur properti untuk Combo tersebut, sebagai berikut :

- Isi properti RowSourceType dengan 1 (value) - Isi properti RowSource dengan : Islam, Kristen, Hindu, Budha, Kepercayaan

4. Simpan form dan jalankan. Isian agama akan berupa kotak Combo. Jika tinggi baris GRID KURANG UNTUK MENAMPUNG TINGGI Combo, ubah ukuran tinggi baris (lewat properti Row Height pada GRID atau dengan drag langsung ukuran tinggi baris GRID dengan mouse).

Catatan :

Combo bukan satu- satunya kontrol yang dapat dipakai pada kolom GRID. Beberapa kontrol lain seperti EditBox (biasanya untuk tipe data memo). Spinner (khusus isian numeris). Check Box (khusus isian numeris atau logika), dan bahkan Obyek Gambar(Image). Metode penggantian identik dengan Combo di atas.

Bagian 5 : Mengisi data GRID lewat form lain

Teknik pemasukan data ini yang biasanya sering dipakai untuk mengisi GRID.

1. Buka kembali dari form bagian 4, lalu save a ke nama lain. 2. Lakukan modifikasi terhadap form, sehingga lay-outnya menjadi seperti gambar di bawah ini :

Page 22: BD2 009 Visual Foxpro

22

3. Modifikasi properti GRID : - ReadOnly diisi dengan .T. sehingga GRID menjadi read Only (tak bisa diedit langsung). - DeleteMark diisi .F. sehingga tanda hapus tak muncul. - AllowAddNew diisi .F. sengga tak bisa menambah record baru.

4. Modifikasi kode pada event INIT pada form : SET CENTURY ON

SET DATE BRITISH

DELETE ON

Dengan teknik ini, kita tidak takut untuk SET DELETED ON. Pada pengeditan langsung di GRID jika seting ini diaktifkan akan kesulitan dalam refreshnya.

5. Ketik kode berikut untuk event Klik pada tombol + sebagai berikut : (+) DO FORM TAMBAH_DATA

THISFORM.REFRESH

Perintah ini akan memunculkan perintah lain (yang akan kita rancang dalam langkah berikutnya yang akan digunakan untuk memasukkan data. Sebaiknya dihindari penggunaan nama drive dan folder secara langsung seperti :

DO FORM C :\PROGRAM\TAMBAH_DATA

Lebih baik form tersebut di simpan ke folder yang sam dengan form induk, lalu diberi perintah untuk ataur folder default sebelum menjalankan proram.

SET DEFAULT TO C :\PROGRAM

Page 23: BD2 009 Visual Foxpro

23

6. Ketik kode berikut pada event Klik untuk tombol – sebagai berikut : ( - ) SELECT MAHASISWA

IF EOF ()

RETURN

ENDIF

DELETE

THISFORM. REFRESH

7. Rancang form penambahan data dengan lay-out seperti pada gambar di bawah ini :

8. Pada data environment dari form tambah data tersebut, tambahkan tabel mahasiswa dan tabel jurusan.

9. Tambahkan properti kd_jurusan, lalu beri nilai awal 10.Atur properti tersebut sehingga sebagai berikut:

Obyek Properti Nilai

Form WindowType 1 (modal)

Form tipe modal artinya fokus kursor akan tetap di fokus ini dan tidak bisa berpindah ke form yang di belakangnya.

AutoCenter .T.

Otomatis akan selalu di tengah layar.

Isian Tanggal Lahir Volume = : / / :

Biar tipe datanya berupa tanggal.

Format .D.

Format tanggal D berarti akan di sesuaikan dengan perintah se DATE yang berlaku saat itu.

Page 24: BD2 009 Visual Foxpro

24

Isian Agama (Combo)

RowSourceType 1 (value)

RowSource Islam, Kristen, Hindu, Budha, Kepercayaan.

Isian Jurusan (Combo)

RowSourceType 6 (field)

RowSource Jurusan nm_jurusan.

Isian Kelamin InputMask X

Jika”atau” berarti hanya menerima isian dapat angka X pada inputmask berarti isian berupa sembarangan abjad. Karena simbol X nya hanya satu, maka hanya dapat di isi satu huruf abjad saja.

Format !

Tanda seru pada format berarti semua, isian akan otomatis dikonversi ke huruf besar (kapital).

11. Ketik kode berikut pada event Valid pada combo jurusan :

Thisform.kd_jurusan- jurusan.kd_jurusan

Ini menyimpan kode jurusan yang dipilih (kita tidak menghedaki nama tersebut).

12. Ketik kode berikut pada event Klik pada tombol OK :

SELECT MAHASISWA

APPEND BLANK

REPLACE NO_ MHS WITH THISFORM. TEXT1.VALUE

REPLACE NAMA MHS WITH THISFORM.TEXT2.VALUE

REPLACE TGL LAHIR WITH THISFORM.TEXT3.VALUE

REPLACE AGAMA WITH THISFORM.COMBO1.VALUE

REPLACE KD_JURUSAN WITH THISFORM.KD_JURUSAN

REPLACE KELAMIN WITH THISFORM.TEXT4.VALUE

THISFORM.RELEASE

MODUL V

Page 25: BD2 009 Visual Foxpro

25

SQL (Structure Query Language)

SQL merupakan suatu pengelolaan data dengan bahasa yang terstruktur yang hampir mirip dengan bahasa yang dipakai sehari-hari. Biasanya SQL digunakan untuk memfilter atau membangun suatu tabel baru dari tabel yang sudah ada (bisa dari satu atau lebih tabel).

Contoh 1 : Membangun tabel baru dengan suatu filter

Terdapat suatu mhs.dbf sebagai berikut :

• No_Mhs • Nama • Alamat • Jenis_kel

Jika kita menghendaki membangun satu tabel yang baru (tetapi datanya tetap berdasarkan dari tabel yang suda ada yaitu mahasiswa.dbf) dengan nama file1.dbf yang susunan fieldnya sebagai berikut :

• No_Mhs • Nama • Jenis_kel

Maka kita dapat membangun tabel baru tersebut dengan SQL, tanpa harus mengentry ulang data dengan perintah :

Select Mhs.No_mhs, Mhs.Nama, Mhs.jenis_kel from Mhs into tabel file1.dbf

Contoh 2: Membangun tabel baru dengan menggabung 2 tabel atau lebih

Syarat untuk menggabung 2 tabel atau lebih adalah tabel-tabel tersebut harus mempunyai kunci yang saling terkait dengan relasi.

Dalam suatu basis data terdiri dari dua tabel mhs.dbf dan dosen.dbf

Struktur file mhs.dbf sebagai berikut :

• No_Mhs • Nama • Alamat • Jenis_kel • Kd_dosen

Struktur file dosen.dbf sebagai berikut :

Page 26: BD2 009 Visual Foxpro

26

• Kd_dosen • Nama_dosen

Jika kita mengehendaki untuk membangun satu tabel yang baru (tetapi datanya tetap berdasarkan dari tabel yang sudah ada yaitu mhs.dbf dan dosen.dbf) dengan nama file2.dbf yang susunan fieldnya sebagai berikut

• No_Mhs • Nama • Alamat • Jenis_kel • Nama_dosen

Maka kita dapat membangun tabel baru tersebut dengan SQL, tanpa harus mengentry ulang data dengan perintah :

Select mhs.no_mhs, mhs.nama, mhs.alamat, mhs.Jenis_kel, dosen.nama_dosen; From mhs,dosen; Where dosen.kd_dosen = mhs.kd_dosen; Into table2.dbf

Contoh 3 : Membangun tabel baru dengan menggabung 2 tabel atau lebih kemudian memfilternya

Jika kita menghendaki untuk membangun satu tabel yang baru (tetapi datanya tetap berdasarkan dari tabel yang sudah ada yaitu mhs.dbf dan dosen.dbf) dengan nama file2.dbf yang susunan fieldnya sebagai berikut :

• No_Mhs • Nama • Alamat • Jenis_kel • Nama_dosen

Dengan filter : tabel baru hanya berisikan data-data dengna jenis kelamin (jenis_kel) = “L” (laki-laki)

Maka kita dapat membangun tabel baru tersebut dengan SQL, tanpa harus mengentry ulang data dengna perintah :

Select mhs.no_mhs, mhs.nama, mhs.alamat, mhs.Jenis_kel, dosen.nama_dosen;

Page 27: BD2 009 Visual Foxpro

27

From mhs,dosen; Where dosen.kd_dosen = mhs.kd_dosen; and mhs.jenis_kel=”L”; Into table2.dbf

Catatan :

• SQL bisa ditulis langsung pada layar command (secara interaktif). • SQL dapat disimpan sebagai bagian dari alur program.

Pada foxpro perintah bisa juga dilakukan dengan meng-generate SQL dengan perintah query sebagai berikut :

Pilih menu file pilih Newe pilih Query

Maka akan tampil layar sebagai berikut (diasumsikan file mhs.dbf sudah ada)

Page 28: BD2 009 Visual Foxpro

28

MODUL VI

BUG SISTEM & PENANGANANNYA

1. Redudansi Redudansi data didefinisikan sebagai kerangkapan data pada basis data kumpulan

data/file) dan bukan pada tabel.

Contoh :

Tabel 1 (mhs.dbf) tersusun atas field :

• No_Mhs • Nama • Alamat • Jenis_kel • Kd_dosen • Nama_dosen *****

Tabel 2 (dosen.dbf) tersusun atas field :

• Kd_dosen • Nama_dosen *****

Pada tanda ***** (Nama_dosen) terdapat kerangkapan data, dimana seharusnya field nama_dosen pada tabel 1 (mhs.dbf) dihilangkan, karena pada dasarnya nama_dosen pada tabel 1 dapat dicari dengan merelasikan field kd_dosen pada tabel 1 kepada field kd_dosen pada tabel 2 sehingga didapat nilai nama_dosen.

Page 29: BD2 009 Visual Foxpro

29

Efek redudancy data tidak secara langsung akan merusak data, tetapi akan mengurangi nilai efesiensi data yang berakibat pada pembengkakan ukuran file data.

Penanganan Redudancy Data biasanya dilakukan pada saat proses perancangan data itu sendiri dengna melakukan normalisasi data.

2. Penghapusan data Ada dua jenis penghapusan di dalam file data :

• Penghapusan dengan menandai record tetapi tidak dihapus secara fisik Penghapusan seperti ini dilakukan dengan maksud agar data yang telah dihapus masih dapat dipanggil ulang dengan perintah RECALL, karena pada dasarnya tidak setiap record yang telah dihapus akan menjadi sampah, bahkan bisa saja suatu saat record tersebut masih dibutuhkan untuk suatu proses.

Persoalan muncul ketika proses pencarian (baik terindex ataupun tidak) dilakukan tanpa menambahkan logika data sudah terhapus atau belum terhapus. Karena ketika proses pencarian, record yang sudah terhapus tetap saja merupakan bagian dari file data.

Contoh : fikle mhs.dbf

No_Mhs Nama_mhs Alamat_mhs

0001 Slamet Yogya

0002 Sigit Yogya

0003 Tompel Yogya

Dengan perintah : delete for nama_mhs = ‘Sigit’

Maka status file data menjadi:

No_Mhs Nama_mhs Alamat_mhs

0001 Slamet Yogya

0002 Sigit Yogya

0003 Tompel Yogya

*

Dimana tanda (*) merupakan record yang sudah terhapus

Ketika kita melakukan pencarian data dengan sintaks berikut:

Uses mhs index mhs

Seek ‘0002’

Page 30: BD2 009 Visual Foxpro

30

If found ()

Tampikan data

Endif

Maka data ‘Sigit’ yang sudah terhapus tetap akan ditampilkan, karena secara fisik belum terhapus. Untuk menanganinya, perlu ditambahkan logika pada proses pencarian menjadi ‘jika ditemukan dan belum terhapus’, sintaksnya sebagai berikut :

Uses mhs index mhs

Seek ‘0002’

If found () .and. !delete() (tanda !artinya Not/tidak)

Tampikan data

Endif

• Penghapusan dengan menghapus secara fisik

Penghapusan seperti ini dilakukan dengan maksud agar data yang telah dihapus benar-benar hilang secara fisik.

Dengan mengambil contoh tabel diatas (file mhs.dbf), perintah penghapusan secara fisik dilakukan dengan sintaks :

Delete for nama_mhs = ‘Sigit’

Pack (perintah penghapusan secara fisik)

Sehingga tabel mhs.dbf menjadi

No_Mhs Nama_mhs Alamat_mhs

0001 Slamet Yogya

0003 Tompel Yogya

Persoalan muncul ketika kita menjalankan aplikasi untuk multi user (dalam sebuah jaringan), perintah Pack hanya bisa dilakukan secara exlusive (otoritas penuh pada file data atau dengan kata lain file data hanyadapat diakses oleh satuorang dan yang lain harus menunggusampai proses selesai).

Penanganan, penghapusan secara fisik hendaknya dilakukan secara hati-hati, dan dilakukan pada saat pemeliharaan data, sehingga tidak menimbulkan gangguan bagi pemakai file data lainnya.

3. Proses Reindex tanpa memperhatikan sifat exclusive file

Page 31: BD2 009 Visual Foxpro

31

Reindex adalah proses meng-index ulang data agar data dbf dan data index tetap sama, sehingga data dbf dan data index menjadi konsisten, karena perbedaan antara data dbf dengan data index akan menyebabkan program menjadi error.

Dikatakan sifat exclusive adalah bahwa suatu file hanyaboleh diakses oleh satu orang dan yang lain harus menunggu. Sama dengan perintah pack, perintah reindex yang dilakukan secara sembarangan akan mengakibatkan penolakan akses terhadap suatu file bagi pengguna file lainnya, sehingga mengurangi nilai efesiensi.

Penanganan masalah ini adalah dengan memberikan waktu penuh bagi proses reindex yang dilakukan oleh orang yang berwewenang, biasanya proses reindex dilakukan pada saat pemeliharaan data, atau pada saat sistem sangan membutuhkan index file yang aktual.

4. Penguncian file / record Proses penguncian file/record dilakukan pada sistem yang menggunakan jaringan atau bersifat multi user. Kenapa harus melakukan penguncian?

Bayangkan kasus seperti ini ;

Ketika si “A” sendang mengedit record “x” pada file mhs.dbf, si ”B” pada saat yang sama bersamaan menghapus record yang sama “x” pada file mhs.dbf. apa yang terjadi ? , sistem menjadi error

Disinilah kita memerlukan penguncian file/record diperlukan, sehingga kasus diatas berubah cerita menjadi

Sebelum si “A” sedang mengedit reocord “x” pada file mhs.dbf, si “A” harus mengunci record “x” terlebih dahulu, sehingga pada saat si “B” akan menghapus record “x” tersebut, si “B” harus menunggu proses penghapusan sampai si “A” selesai dan membuka penguncian terhadap file / record

Penanganan masalah ini adalah seorang programmer harus selalu memahami proses dimana yang bersifat kritis yang akan mengakibatkan prubahan fisik terhadap data (seperti proses edit, hapus dan tambah). Akan lebih baik jika sistem yang dibangun mampu membagi otoritas atau wewenang terhadap pengguna data sehingga tidak setiap pengguna data dapat secara langsung menambah / mengedit /menghapus data.

5. Pemeliharaan data Ketika kita membangun suatu sistem basis data dengan tingkat perubahan fisik data yang sangat cepat (retail, banking, dan lain-lain), pemeliharaan data menjadi sesuatu yang sangat mutlak dilakukan. Data yang tidak terpelihara akan lebih rentan dan mengakibatkan sistem menjadi crash. Pemeliharaan data hendaknya dilakukan secara rutin dan dilakukan oleh orang yang berwewenang atau orang yang punya otoritas.

• Backup Data Proses backup data dilakukan dengan maksud agar sistem mempunyai data kedua (secondary) yang dapat dijadikan sebagai data cadangan jika data utama (primary) mengalami kerusakan fisik. Backup data pada sstem yang sangat besar biasanya dilakukan secara berlapis (backup dilakukan tidak pada satu tempat / media)

Page 32: BD2 009 Visual Foxpro

32

• Restore Data Merupakan kebalikan dari proses backup data, dimana data secondary dirubah menjadi data primary. Restore data biasanya dilakukan ketika data primary mengalami kerusakan fisik.

• Reindex (Seperti yang telah dijelaskan pada bagian sebelumnya).

MODUL VI

CONTOH KASUS

Page 33: BD2 009 Visual Foxpro

33

Struktur tabel :

******* TRANSAKSI.DBF

NO_NOTA CHARACTER 10

TANGGAL DATE 8

KD_TELLER CHARACTER 5

TOTAL NUMERIC 10

INDEX :

NO.NOTA CANDIDATE

******* TRANSAKSI.DBF

NO_NOTA CHARACTER 10

TANGGAL DATE 8

KD_TELLER CHARACTER 5

TOTAL NUMERIC 10

INDEX :

NO.NOTA CANDIDATE

******* DETAIL_TRANSAKSI.DBF

NO_NOTA CHARACTER 10

BARANG DATE 25

HARGA_SAT CHARACTER 10

VOLUME NUMERIC 5

JUMLAH NUMERIC 10

Page 34: BD2 009 Visual Foxpro

34

INDEX :

NO.NOTA REGULER

Modify Form :

****** * TRANSAKSI.SCX

NAMA = “FORM1”

AUTOCENTER = .T.

CAPTION = “TRANSAKSI PENJUALAN”

MODE = 0

PROCEDURE ACTIVATE

SELECT TRANSAKSI

&& HANYA TOMBOL TAMBAH DAN KELUAR SAJA YANG AKTIF

&& JIKA TABEL TIDAK BERISI RECORD.

IF EOF ()

THISFORM.SETALL (“ENABLED”,.F.,”TEXTBOX”)

THISFORM.SETALL (“ENABLED”,.F.,”COMMANDBUTTON”)

THISFORM.TAMBAH.ENABLED=.T.

THISFORM.KELUAR.ENABLED=.T.

ELSE

THISFORM.SETALL (“ENABLED”,.F.,”TEXTBOX”)

THISFORM.SETALL (“ENABLED”,.T.,”COMMANDBUTTON”)

THISFORM.SIMPAN.ENABLED=.F.

THISFORM.BATAL.ENABLED=.F.

ENDIF

SCATTER MEMVAR

THISFORM.REFRESH ()

PROCEDURE INIT

SET TALK OFF

SET DELETED ON

NAME = “LABEL1”

AUTOSIZE = .T.

CAPTION = “NO NOTA”

NAME = “LABEL2”

Page 35: BD2 009 Visual Foxpro

35

AUTOSIZE = .T.

CAPTION = “TANGGAL”

NAME = “LABEL3”

AUTOSIZE = .T.

CAPTION = “KODE TELLER”

NAME = “LABEL4”

AUTOSIZE = .T.

CAPTION = “TOTAL”

NAME = “TXTNO_NOTA”

CONTROLSOURCE = “M.TANGGAL”

NAME = “TXTTANGGAL”

CONTROLSOURCE = “M.TANGGAL”

FORMAT = :E”

VALUE = {}

NAME = “TXTTELLER”

CONTROLSOURCE = “M.KD_TELLER”

NAME = “TXTTOTAL”

VALUE = 0

CONTROLSOURCE = “M.TOTAL”

ENABLED = .F.

INPUTMASK = “RP 9,999,999,999.-“

NAME = “GRID1”

COLUMNCOUNT = 4

CHILDORDER = “NO_NOTA”

DELETEMARK = .F.

LINKMASTER = “TRANSAKSI”

READONLY = .T.

RECORDSOURCE = “DETAIL_TRANSAKSI”

RELATIONALEXPR = “TRANSAKSI.”

SCROLLBARS = 2

Page 36: BD2 009 Visual Foxpro

36

COLUMN1.CONTROLSOURCE = “DETAIL_TRANSAKSI.BARANG”

NAME = “HEADER1”

CAPTION = “BARANG”

FONTBOLD = .T.

COLUMN2.CONTROLSOURCE = “DETAIL_TRANSAKSI.HARGA_SAT”

COLUMN2.INPUTMASK = “9,999,999,999.-“

NAME = “HEADER1”

CAPTION = “HARGA”

FONTBOLD = .T.

COLUMN3.CONTROLSOURCE = “DETAIL_TRANSAKSI.VOLUME”

NAME = “HEADER1”

CAPTION = “VOLUME”

FONTBOLD = .T.

COLUMN4.CONTROLSOURCE = “DETAIL_TRANSAKSI.JUMLAH”

COLUMN4.INPUTMASK = “9,999,999,999.-“

NAME = “HEADER1”

CAPTION = “JUMLAH”

FONTBOLD = .T.

NAME = “TAMBAH”

CAPTION = “\<TAMBAH”

PROCEDURE CLICK

SELECT TRANSAKSI

SCATTER MEMVAR BLANK

THISFORM.SETALL (“ENABLED”,.T.,”TEXTBOX)

THISFORM.SETALL (“ENABLED”,.F.,”COMMANDBUTTON”)

THISFORM.TXTTOTAL.ENABLED=.F.

THISFORM.SIMPAN.ENABLED=.T.

THISFORM.BATAL.ENABLED=.T.

THISFORM.MODE=1

THISFORM.TXTNO_NOTA.SETFOCUS ()

THISFORM.REFRESH ()

NAME = “SIMPAN”

CAPTION = “\<SIMPAN”

PROCEDURE CLICK

SELECT TRANSAKSI

Page 37: BD2 009 Visual Foxpro

37

IF THISFORM.MODE=1

APPEND BLANK

ENDIF

GATHER MEMVAR

THISFORM.SETALL (“ENABLED”,.T.,”TEXTBOX”)

THISFORM.SETALL (“ENABLED”,.F.,”COMMANDBUTTON”)

THISFORM.TXTTOTAL.ENABLED=.F.

THISFORM.SIMPAN.ENABLED=.T.

THISFORM.BATAL.ENABLED=.T.

THISFORM.MODE=1

THISFORM.TXTNO_NOTA.SETFOCUS ()

THISFORM.REFRESH ()

NAME = “BATAL”

CAPTION = “\<BATAL”

PROCEDURE CLICK

SELECT TRANSAKSI

SCATTER MEMVAR

THISFORM.SETALL(“ENABLED”,.F.,”TEXTBOX”)

THISFORM.SETALL(“ENABLED”,.T.,”COMMANDBUTTON”)

THISFORM.SIMPAN.ENABLED = .F.

THISFORM.BATAL.ENABLED = .F.

THISFORM.REFRESH()

IF EOF()

THISFORM.SETALL(“ENABLED”,.F.,”TEXTBOX”)

THISFORM.SETALL(“ENABLED”),.F.,”COMMANDBUTTON”)

THISFORM.TAMBAH.ENABLED=.T.

THISFORM.KELUAR.ENABLED=.T.

ENDIF

NAME = “EDIT”

CAPTION = “\<EDIT”

PROCEDURE CLICK

THISFORM.SETALL(“ENABLED”,.T.,”TEXTBOX”)

THISFORM.SETALL(“ENABLED”,.F.,”COMMANDBUTTON”)

THISFORM.TXTTOTAL.ENABLED = .F.

THISFORM.SIMPAN.ENABLED = .T.

Page 38: BD2 009 Visual Foxpro

38

THISFORM.BATAL.ENABLED = .T.

THISFORM.MODE=0

THISFORM.TXTNO_NOTA.SETFOCUS()

THISFORM.REFRESH()

NAME = “AWAL”

CAPTION = “\<AWAL”

FONTBOLD = .T.

FONTNAME = “COURIER NEW”

PROCEDURE CLICK

SELECT TRANSAKSI

GO TOP

SCATTER MEMVAR

THISFORM.REFRESH()

NAME = “NAIK”

CAPTION = “\<NAIK”

FONTBOLD = .T.

FONTNAME = “COURIER NEW”

PROCEDURE CLICK

SELECT TRANSAKSI

SKIP -1

IF EOF()

=MESSAGEBOX(“INI RECORD YANG PALING AWAL”, 48,”PERHATIAN”)

GO TOP

ENDIF

SCATTER MEMVAR

THISFORM.REFRESH()

NAME = “TURUN”

CAPTION = “\<TURUN”

FONTBOLD = .T.

FONTNAME = “COURIER NEW”

PROCEDURE CLICK

SELECT TRANSAKSI

SKIP 1

IF EOF()

Page 39: BD2 009 Visual Foxpro

39

=MESSAGEBOX(“INI RECORD YANG PALING AKHIR”, 48,”PERHATIAN”)

GO BOTTOM

ENDIF

SCATTER MEMVAR

THISFORM.REFRESH()

NAME = “AKHIR”

CAPTION = “\<AKHIR”

FONTBOLD = .T.

FONTNAME = “COURIER NEW”

PROCEDURE CLICK

SELECT TRANSAKSI

GO BOTTOM

SCATTER MEMVAR

THISFORM.REFRESH()

NAME = “HAPUS”

CAPTION = “\<HAPUS”

PROCEDURE CLICK

SELECT DETAIL_TRANSAKSI

DELETE ALL FOR DETAIL_TRANSAKSI.NO_NOTA = ALLTRIM(M.NO_NOTA)

SELECT TRANSAKSI

DELETE

THISFORM.TURUN.CLICK()

IF EOF()

THISFORM.SETALL(“ENABLED”,.F.,”TEXTBOX”)

THISFORM.SETALL(“ENABLED”,.F.,”COMMANDBUTTON”)

THISFORM.TAMBAH.ENABLED =.T.

THISFORM.KELUAR.ENABLED = .T.

ENDIF

NAME = “KELUAR”

CAPTION = “\<KELUAR”

PROCEDURE CLICK

THISFORM.RELEASE

NAME = “PLUS

CAPTION = “+”

Page 40: BD2 009 Visual Foxpro

40

FONTNAME= “COURIER NEW”

PROCEDURE CLICK

DO FORM DETAIL_TRANSAKSI.SCX WITH THISFORM.TXTNO_NOTA.VALUE

CALCULATE SUM(DETAIL_TRANSAKSI.JUMLAH);

FOR DETAIL_TRANSAKSI.NO_NOTA = ALLTRIM(M.NO_NOTA) TO A

THISFORM.TXTTOTAL.VALUE=A

SELECT TRANSAKSI

GATHER MEMVAR

SCATTER MEMVAR

THISFORM.REFRESH()

NAME = “PLUS

CAPTION = “-”

FONTNAME= “COURIER NEW”

PROCEDURE CLICK

SELECT DETAIL_TRANSAKSI

DELETE

CALCULATE SUM(DETAIL_TRANSAKSI.JUMLAH);

FOR DETAIL_TRANSAKSI.NO_NOTA = ALLTRIM(M.NO_NOTA) TO A

THISFORM.TXTTOTAL.VALUE=A

SELECT TRANSAKSI

GATHER MEMVAR

SCATTER MEMVAR

THISFORM.REFRESH()

MODIFY FORM :

***************DETAIL_TRANSAKSI.SCX

NAME = “FORM1”

AUTOCENTER = .T.

CAPTION =”PENAMBAHAN”

WINDOWTYPE = 1

PROCEDURE INIT

PARAMETER A

SCATTER MEMVAR BLANK

Page 41: BD2 009 Visual Foxpro

41

THISFORM.TXTNO_NOTA.VALUE = A

NAME = “LABEL1”

AUTOSIZE = .T.

CAPTION =”NO NOTA”

NAME = “LABEL2”

AUTOSIZE = .T.

CAPTION =”BARANG”

NAME = “LABEL3”

AUTOSIZE = .T.

CAPTION =”HARGA SATUAN”

NAME = “LABEL4”

AUTOSIZE = .T.

CAPTION =”VOLUME”

NAME = “LABEL5”

AUTOSIZE = .T.

CAPTION =”JUMLAH”

NAME = “TXTNO_NOTA”

CONTROL SOURCE = “M.NO_NOTA”

NAME = “TXTBARANG”

CONTROL SOURCE = “M.BARANG”

NAME = “TXTHARGA_SAT”

CONTROL SOURCE = “M.HARGA_SAT”

INPUTMASK = “RP 9,999,999,999,-“

VALUE = 0

NAME = “TXTVOLUME”

VALUE = 0

PROCEDURE INTERACTIVECHANGE

THISFORM.TXTJUMLAH.VALUE = THISFORM.TXTHARGA_SAT.VALUE*THIS.VALUE

Page 42: BD2 009 Visual Foxpro

42

NAME = “TXTJUMLAH”

CONTROL SOURCE = “M.JUMLAH”

INPUTMASK = “RP 9,999,999,999,-“

VALUE = 0

NAME = “OK”

CAPTION = “\<OK”

PROCEDURE CLICK

THISFORM INTO DETAIL_TRANSAKSI;

VALUES (M.NO_NOTA,M.BARANG.M.HARGA_SAT,M.VOLUME,M.JUMLAH)

THISFORM.RELEASE

NAME = “BATAL”

CAPTION = “\<BATAL”

PROCEDURE CLICK

THISFORM.RELEASE