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 Dont 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.

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

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

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.

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 Tombol Tambah Tombol Simpan

Properti yang diubah Caption Name Caption Name

Nilai Properti Tambah BtnTambah Simpan BtnSimpan

Tombol Batal Tombol Edit Tombol |< Tombol < Tombol > Tombol >| Tombol Hapus Tombol Keluar

Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name Caption Name

Batal BtnBatal Edit BtnEdit |< BtnTeratas < BtnSebelumnya > BtnBerikutnya >| BtnTerakhir Hapus BtnHapus Keluar BtnKeluar

6. Lakukan BINDING terhadap kotak-kotak isian di layar dengan kolomkolom tabel. Binding dilakukan dengan menggunakan properti CONTROL SOURCE dari kotak-kotak isian (TEXTBOX), jangan sampai ada yang terlewat. Kotak Isian Text1 Text2 Text3 Control Source MAHASIWA.NO_MHS MAHASISWA.NAMA_MAHASIWA 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 SET DELETE ON Form Init
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

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 Click SELECT MAHASISWA BtnBATAL
= 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 Click THISFORM.SETALL(ENABLED,.T.,TEXTBOX) BtnEDIT
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
BtnSEBELUMNYA

Click

BtnBerikutnya

Click

BtnTERAKHIR

Click Click

BtnHAPUS

BtnKELUAR

Click

GO TOP THISFORM.REFRESH SELECT MAHASISWA IF NOT BOF () SKIP 1 ELSE MESSAGEBOX (Sudah diposisi teratas,48,INFO) END IF THISFORM.REFRESH SELECT MAHASISWA IF NOT BOF () SKIP 1 ELSE MESSAGEBOX (Sudah diposisi terbawah,48,INFO) END IF THISFORM.REFRESH SELECT MAHASISWA GO BOTTOM THISFORM.REFRESH SELECT MAHASIWA IF NOT EOF () DELETE SKIP-1 ELSE MESSAGEBOX (Posisikan dulu recordnya,32+0,INFO) END IF THISFORM.REFRESH 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).

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

6. Lakukan BINDING terhadap kotak-kotak isian di layar dengan kolomkolom tabel. Binding dilakukan dengan menggunakan properti CONTROL SOURCE dari kotak-kotak isian (TEXTBOX), jangan sampai ada yang terlewat. Kotak Isian Control Source

10

Text1 Text2 Text3

MAHASIWA.NO_MHS MAHASISWA.NAMA_MAHASIWA 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 Form Event Init Kode
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 Click

BtnSEBELUM NYA

BtnBerikutnya

Click

BtnTERAKHIR

Click Click

BtnHAPUS

SELECT MAHASISWA GO TOP THISFORM.REFRESH SELECT MAHASISWA IF NOT BOF () SKIP 1 ELSE MESSAGEBOX (Sudah diposisi teratas,48,INFO) END IF THISFORM.REFRESH SELECT MAHASISWA IF NOT BOF () SKIP 1 ELSE MESSAGEBOX (Sudah diposisi terbawah,48,INFO) END IF THISFORM.REFRESH SELECT MAHASISWA GO BOTTOM THISFORM.REFRESH SELECT MAHASIWA IF NOT EOF () DELETE

12

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

BtnKELUAR

Click

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 masingmasing tabel tersebut. 4. Atur properti untuk masing- masing obyek sebagai berikut
Obyek Grid Properti Allow AddNew Nilai .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 .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. 1 (Alias) Properti ini menentukan jenis sumber data untuk GRID. MAHASISWA Properti ini menetukan darimana sumber data diambil (pada kasus ini dari tabel mahasiswa). 5 Properti ini menentukan cacah kolom dimiliki oleh GRID. Kolom1 Mahasiswa. No_mhs Properti sebenarnya bisa juga tidak di isi dengan konsekuensi urutan tampilan kolom data akan seperti urutan fieldnya pada tabel sumber data.
Kolom2 Mahasiswa.nama mhs Kolom3 Mahasiswa.tgl lahir Kolom4 Mahasiswa agama Kolom5 Mahasiswa.kd_jurusan No Mhs Header digunakan untuk member keterangan pada tiap- tiap kolom. Nama Mahasiswa Tanggal Lahir Agama

DeleteMark

RecordSourceType

RecordSource

ColusmnCount

Kolom ke-1

Name ControlSource

Kolom ke-2 Kolom ke-3 Kolom ke-4 Kolom ke-5 Header kolom ke-1 Header kolom ke-2 Header kolom ke-3 Header

Name ControlSource Name ControlSource Mame ControlSource Name ControlSource Caption Caption Caption Caption

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.

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. 2. Buka kembali form dari bagian 1, lalu save as ke nama lain. 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 ColumnCount Name ControlSource
6 Cacah kolom GRID menjadi 6 kolom

Grid Kolom ke-6

Kolom6 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 Nama MHS TGL LAHIR AGAMA KD JURUSAN KELAMIN

Character 10 Character 45 Date 8 Character 15 Character 2 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 Grid Kolom ke-7

Properti ColumnCount Name ControlSource


8

Nilai
Cacah kolom GRID menjadi 8 kolom. Kolom7 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 Kolomke-8

Caption Name ControlSource

Kelamin Kolom8 (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 ahtihati 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 Form

Properti WindowType
1 (modal)

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

AutoCenter Isian Tanggal Lahir Volume Format

.T. Otomatis akan selalu di tengah layar. =://: Biar tipe datanya berupa tanggal. .D. Format tanggal D berarti akan di sesuaikan dengan perintah se DATE yang berlaku saat itu.

24

Isian Agama (Combo)

RowSourceType RowSource

1 (value) Islam, Kristen, Hindu, Budha, Kepercayaan. 6 (field) Jurusan nm_jurusan. X Jikaatau 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.

Isian Jurusan (Combo)

RowSourceType RowSource

Isian Kelamin

InputMask

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 0001 0002 0003 Nama_mhs Slamet Sigit Tompel Alamat_mhs Yogya Yogya Yogya

Dengan perintah : delete for nama_mhs = Sigit Maka status file data menjadi:

No_Mhs 0001

Nama_mhs Slamet Sigit Tompel

Alamat_mhs Yogya Yogya Yogya

* 0002
0003

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 0001 0003

Nama_mhs Slamet Tompel

Alamat_mhs Yogya 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 TANGGAL KD_TELLER CHARACTER DATE CHARACTER 10 10 8 5

TOTAL NUMERIC INDEX :

NO.NOTA CANDIDATE

******* TRANSAKSI.DBF NO_NOTA TANGGAL KD_TELLER CHARACTER DATE CHARACTER 10 10 8 5

TOTAL NUMERIC INDEX :

NO.NOTA CANDIDATE

******* DETAIL_TRANSAKSI.DBF NO_NOTA BARANG HARGA_SAT VOLUME JUMLAH CHARACTER DATE CHARACTER NUMERIC NUMERIC 10 25 10 5 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

Anda mungkin juga menyukai