Anda di halaman 1dari 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.
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
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
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.
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
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_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.
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.
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).
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


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()
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
BtnSEBELUM Click SELECT MAHASISWA
NYA 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
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
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.
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.
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
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 :
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 Caption No Mhs
kolom ke-1 Header digunakan untuk member keterangan pada
tiap- tiap kolom.
Header Caption Nama Mahasiswa
kolom ke-2
Header Caption Tanggal Lahir
kolom ke-3
Header Caption Agama
18

kolom ke-4
Header Caption Kode Jurusan
kolom ke-5

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.
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 :
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.
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 :
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
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.
24

Isian Agama RowSourceType 1 (value)


(Combo)
RowSource Islam, Kristen, Hindu, Budha, Kepercayaan.

Isian Jurusan RowSourceType 6 (field)


(Combo)
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
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 :


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;
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)
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.
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’
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


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)
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
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
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”
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
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
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.
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()
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 = “+”
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
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
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