P. 1
Teknik Merancang Program Aplikasi (CODE) Pada Visual FoxPro

Teknik Merancang Program Aplikasi (CODE) Pada Visual FoxPro

|Views: 1,113|Likes:
Dipublikasikan oleh Sahida Dinulloh

More info:

Published by: Sahida Dinulloh on Oct 09, 2010
Hak Cipta:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/25/2013

pdf

text

original

TABELKU

Tiga program aplikasi terdahulu tidak melibatkan file tabel (DBF), sedangkan program aplikasi TabelKu ini melibatkan 1 (satu) tabel (DBF). Di mana Anda dapat mengisi data, mengubah data, menghapus data, serta menelusuri tabel dari satu record ke record lainnya. Pembahasan dalam program aplikasi TabelKu ini difokuskan pada pembuatan file kode (CODE), yaitu file yang berekstensi PRG. Program TabelKu berhubungan dengan 1 tabel, yaitu TabelKu.DBF. Kita masih memanfaatkan form utama Visual FoxPro dan beberapa objek Label, TextBox, Grid, dan CommandButton untuk menangani tabel TabelKu.DBF. Struktur tabel tabelKu.DBF adalah sebagai berikut.

77

No 1 2 3 4 5

Field Nama JenKel Alamat Kota KodePos

Type C C C C C

Width 30 9 30 30 5

Keterangan Nama Jenis Kelamin Alamat Nama Kota Kode Pos

Apabila program aplikasi TabelKu dijalankan dan file TabelKu.dbf belum ada, maka otomatis akan dibuat file baru TabelKu.dbf. Dengan demikian, pemakai tidak direpotkan untuk membuat tabel tersebut di atas.

6.1 Desain Program
Bentuk tampilan dari program TabelKu terlihat seperti pada gambar di bawah ini, yaitu sebagai sarana interaktif antara pemakai dengan database (tabel). Semua tabel ditampilkan dalam Grid sebagai jendela untuk menelusuri tabel, kemudian masing-masing record ditampilkan dalam TextBox. Fasilitas yang tersedia, antara lain penambahan data baru, ubah data, hapus data, dan pengurutan data.

78

Gambar 6.1 Desain program aplikasi TabelKu

6.2 Logika Program
Dasar utama pembuatan program TabelKu ini adalah jendela Grid sebagai sarana interaktif antara pemakai dengan tabel TabelKu.DBF. Untuk itu, pada saat program dijalankan, maka langsung akan terhubung dengan tabel TabelKu.DBF. Kemudian semua data ditampilkan dalam objek Grid, sedangkan masing-masing record ditampilkan dalam objek TextBox. Di baris bawah terdapat 10 objek CommandButton yang berfungsi sebagai navigator, yang digunakan untuk penelusuran record, tambah data (ADD), ubah data (EDIT), hapus data (DEL), dan pengurutan data (SORT).

79

Pengurutan data dilakukan dengan teknik external sorting BUBBLE SORT. Algoritma program aplikasi TabelKu adalah sebagai berikut: • Mengatur variabel _SCREEN untuk diisi dengan 13 objek Label, 6 objek TextBox, 1 objek OptionGroup, 1 objek Grid, dan 10 objek CommandButton. Koneksi dengan tabel TabelKu.DBF pada saat dijalankan pertama kali. Menampilkan semua data di dalam objek Grid. Menampilkan satu data (record) di dalam objek TextBox. Navigasi (pergerakan) dari satu record ke record lainnya dikontrol dalam objek CommandButton. Demikian juga fasilitas tambah data (ADD), ubah data (EDIT), hapus data (DEL), dan pengurutan data (SORT) dikontrol dalam objek CommandButton ditambah dengan ABOUT dan CLOSE.

• • • •

Program aplikasi TabelKu menampilkan isi tabel TabelKu.dbf. Data yang terdapat di dalamnya, antara lain Nama, Jenis Kelamin, Alamat, Kota, dan Kode Pos. Di baris atas ditampilkan nama hari dan pasaran posisi tanggal saat ini dan ditampilkan juga jam digital. Kemudian ditampilkan masing-masing data (record) serta semua data dalam grid. Di baris bawah ditampilkan navigasi (pergerakan) record, button untuk tambah data (ADD), ubah data (EDIT), hapus data (DELETE), dan pengurutan data (SORT), serta button About yang akan menampilkan keterangan kecil tentang program ini, dan button Close yang akan menampilkan pilihan untuk mengakhiri program. Jika dipilih YES, maka program akan berhenti dan kembali ke Windows. Secara sederhana, program aplikasi TabelKu dapat digambarkan sebagai berikut.

80

Set Environtment ---* SET TALK OFF SET STATUS OFF 81 .DELETE. ****************************************************** * Nama Program : TabelKu.APPEND.Start Persiapan Mengatur form _SCREEN Menampilkan Data Menampilkan semua data dalam objek Grid dan menampilkan satu data dalam objek TextBox Navigasi Record ADD EDIT DELETE SORT ABOUT CLOSE Stop Gambar 6.REPLACE.* ****************************************************** *--.2 Flowchart program aplikasi TabelKu 6.single user version (exclusive) .3 Kode Program Berikut ini listing kode program TabelKu.PACK) * * .prg * * Keterangan : menggunakan program aplikasi (CODE) * * menangani 1(satu) tabel TabelKu.dbf * * menggunakan perintah reguler tabel * * (USE.

Record .AutoCenter = .Left = 0 && posisi kiri . "myJam") && label Jam Digital .AddObject("KodePos".AddObject("Titik03".Height = 485 && tinggi form .AddObject("Versi".persiapan variabel public ---* PUBLIC oFormSort As Form PUBLIC nMaxRec * jumlah record maksimum (disesuaikan kebutuhan) nMaxRec = 1000 *--.bersihkan memori ---* CLEAR ALL CLOSE ALL CLOSE TABLES ALL *--."myJudul1") && label Judul 1 .AddObject("Nama".APPEND."myTitik04") && label Titik Dua .Closable = .SET STATUS BAR OFF SET SYSMENU OFF SET ESCAPE ON SET CENTURY ON SET EXCLUSIVE ON SET DATE ITALIAN *--."myKodePos") && label Kode Pos * tambahkan objek Label titik-dua . "myNoRec") && No. * * kemudian * * 2."myTitik05") && label Titik Dua . menambahkan objek (nama objek.ShowTips = .AddObject("Titik05".T. "myKota") && label Kota .AddObject("Titik01".F.persiapan tampilan form _SCREEN ---* WITH _Screen && form _SCREEN (milik Visual FoxPro) .F. "myNoRecord") && label No.menggunakan perintah native "+.ControlBox = . "myKode") && label Kode .AddObject("Titik06". "(USE.F.label dan text box .nama definisi).BorderStyle = 2 && border diset fix dialog ."myTanggal") && label Tanggal .AddObject("Judul1".PACK)" && judul form .Top = 0 && posisi atas .Record .F.255) && warna latar form **************************************************** * cara mengisi form _Screen.MinButton = . "myNama") && label Nama ."myAlamat") && label Alamat .BackColor = RGB(128. && form di tengah layar monitor .AddObject("NoRecord".REPLACE. && button max dinon-aktifkan .AddObject("Tanggal".AddObject("txtNoRec".AddObject("Kode". && button controlbox dinon-aktifkan ."myTitik03") && label Titik Dua .Width = 540 && lebar form ."myTitik01") && label Titik Dua .AddObject("Judul2".AddObject("Jam". "myWaktu") && timer Waktu Digital . "myVersion") && label Version .AddObject("Titik02". yaitu: * * 1.128. mendefinisikan objek bersama atributnya * * (DEFINE CLASS) * **************************************************** * tambahkan objek Label . && tampilkan semua tooltip text ."myTitik06") && label Titik Dua * tambahkan objek No.MaxButton = .AddObject("Alamat". && button min dinon-aktifkan .AddObject("Waktu".Record 82 .AddObject("Titik04".Caption = "TabelKu ."myJudul2") && label Judul 2 ."myJenKel") && label Jenis Kelamin .AddObject("Kota". && button close dinon-aktifkan .T."myTitik02") && label Titik Dua .AddObject("JenKel".

T. "myEdit") && button Edit .AddObject("txtNama".AddObject("cmdClose".AddObject("cmdPrev".. "myTxtKode") && Kode .AddObject("cmdNext".F.definisi timer myWaktu ---* DEFINE CLASS myWaktu AS Timer Top = 0 && posisi atas Left = 0 && posisi kiri Interval = 1000 && interval 1 detik PROCEDURE Timer * label Jam diisi jam 00:00:00 _Screen.) && aktifkan prosedur SetButton() GridRefresh() && aktifkan prosedur GridRefresh() TampilkanData(."myTotRec") && Total Record * tambahkan objek TextBox ."myGrdGrid") && grid myGrid * tambahkan objek Command Button . "myLast") && button Last . "myTxtKota") && Kota .AddObject("txtAlamat". "myOptJenKel") && Jenis Kelamin . "myNext") && button Next . && label tampil ENDDEFINE *--.Jam.T.AddObject("cmdSort". label.AddObject("cmdLast". textbox.Caption = TIME() ENDPROC ENDDEFINE *--.AddObject("cmdDelete".definisi label myTanggal ---* DEFINE CLASS myTanggal AS Label Top = 10 && posisi atas Left = 190 && posisi kiri Width = 268 && lebar label Height = 20 && tinggi label Caption = "" && isi label Alignment = 1 && rata kanan FontName = "Arial" && jenis huruf FontSize = 10 && besar huruf BackColor = _Screen."myDelete") && button Delete . "myAbout") && button About . "myFirst") && button First .AddObject("cmdAdd".Show ENDWITH Start() && aktifkan prosedur Start() SetField(. "myPrev") && button Previous .) && aktifkan prosedur SetField() SetButton(.BackColor && warna dasar Visible = . "myAdd") && button Add .AddObject("txtKode".AddObject("myGrid".T. "myTxtAlamat") && Alamat .definisi label myJam ---* DEFINE CLASS myJam AS Label Top = 10 && posisi atas 83 .AddObject("txtTotRec". "myClose") && button Close * tampilkan form _SCREEN . * * optiongroup dan command button * ***************************************** *--.) && aktifkan prosedur TampilkanData() READ EVENTS && proses semua event RETURN && selesai ***************************************** * definisi objek timer."myTxtKodePos") && Kode Pos * tambahkan objek Grid .AddObject("cmdEdit".AddObject("cmdAbout".AddObject("txtKodePos". "mySort") && button Sort . "myTxtNama") && Nama .AddObject("optJenKel".AddObject("txtKota".AddObject("cmdFirst".

Left = 465 && posisi kiri Width = 50 && lebar textbox Height = 20 && tinggi label Caption = TIME() && label diisi jam 00:00:00 Alignment = 1 && rata kanan FontName = "Arial" && jenis huruf FontSize = 10 && besar huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && label tampil ENDDEFINE *--- definisi label myVersion ---* DEFINE CLASS myVersion AS Label Top = 35 && posisi atas Left = 190 && posisi kiri Width = 155 && lebar label Height = 20 && tinggi label Caption = "SINGLE USER VERSION" && isi label Alignment = 2 && di tengah FontName = "Arial" && jenis huruf FontSize = 10 && besar huruf FontBold = .T. && huruf tebal ForeColor = RGB(0,0,255) && warna huruf biru BackColor = _Screen.BackColor && warna dasar Visible = .T. && label tampil ENDDEFINE *--- definisi label myNoRecord ---* DEFINE CLASS myNoRecord AS Label Top = 35 && posisi atas Left = 350 && posisi kiri Width = 50 && lebar label Height = 20 && tinggi label Caption = "No.Rec.:" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && besar huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && label tampil ENDDEFINE *--- definisi textbox myNoRec ---* DEFINE CLASS myNoRec AS TextBox Top = 35 && posisi atas Left = 410 && posisi kiri Width = 50 && lebar textbox Height = 24 && tinggi textbox Value = 0 && isi textbox FontName = "Arial" && jenis huruf FontSize = 9 && besar huruf BackColor = _Screen.BackColor && warna dasar DisabledForeColor = RGB(255,0,0) && warna non-aktif DisabledBackColor = RGB(224,224,224) && warna non-aktif InputMask = "99999" && bentuk masukan Format = "99999" && bentuk tampilan Enabled = .F. && textbox tidak aktif Visible = .T. && textbox tampil ENDDEFINE *--- definisi textbox myTotRec ---* DEFINE CLASS myTotRec AS TextBox Top = 35 && posisi atas Left = 465 && posisi kiri Width = 50 && lebar textbox Height = 24 && tinggi textbox Value = 0 && isi textbox

84

FontName = "Arial" && jenis huruf FontSize = 9 && besar huruf BackColor = _Screen.BackColor && warna dasar DisabledForeColor = RGB(255,0,0) && warna non-aktif DisabledBackColor = RGB(224,224,224) && warna non-aktif InputMask = "99999" && bentuk masukan Format = "99999" && bentuk tampilan Enabled = .F. && textbox tidak aktif Visible = .T. && textbox tampil ENDDEFINE *--- 2 judul memberi efek bayangan ---* *--- definisi label myJudul1 ---* DEFINE CLASS myJudul1 AS Label && sebagai bayangan judul Top = 12 && posisi atas Left = 11 && posisi kiri Width = 180 && lebar label Height = 22 && tinggi label Caption = "NAMA DAN ALAMAT" && isi label FontName = "Arial" && jenis huruf FontBold = .T. && huruf tebal FontSize = 12 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf hitam BackStyle = 0 && transparan BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label myJudul2 ---* DEFINE CLASS myJudul2 AS Label && sebagai judul (merah) Top = 10 && posisi atas Left = 10 && posisi kiri Width = 180 && lebar label Height = 22 && tinggi label Caption = "NAMA DAN ALAMAT" && isi label FontName = "Arial" && jenis huruf FontBold = .T. && huruf tebal FontSize = 12 && ukuran huruf ForeColor = RGB(255,0,0) && warna huruf merah BackStyle = 0 && transparan BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label myKode ---* DEFINE CLASS myKode AS Label Top = 35 && posisi atas Left = 10 && posisi kiri Width = 100 && lebar label Height = 20 && tinggi label Caption = " 1. Kode" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label myNama ---* DEFINE CLASS myNama AS Label Top = 60 && posisi atas Left = 10 && posisi kiri Width = 100 && lebar label Height = 20 && tinggi label Caption = " 2. Nama" && isi label

85

FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label myJenKel ---* DEFINE CLASS myJenKel AS Label Top = 85 && posisi atas Left = 10 && posisi kiri Width = 100 && lebar label Height = 20 && tinggi label Caption = " 3. Jenis Kelamin" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label myAlamat ---* DEFINE CLASS myAlamat AS Label Top = 110 && posisi atas Left = 10 && posisi kiri Width = 100 && lebar label Height = 20 && tinggi label Caption = " 4. Alamat" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label myKota ---* DEFINE CLASS myKota AS Label Top = 135 && posisi atas Left = 10 && posisi kiri Width = 100 && lebar label Height = 20 && tinggi label Caption = " 5. Kota" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label myKodePos ---* DEFINE CLASS myKodePos AS Label Top = 160 && posisi atas Left = 10 && posisi kiri Width = 100 && lebar label Height = 20 && tinggi label Caption = " 6. Kode Pos" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label Titik01 ---* DEFINE CLASS myTitik01 AS Label Top = 35 && posisi atas

86

Left = 120 && posisi kiri Width = 10 && lebar label Height = 20 && tinggi label Caption = ":" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label Titik02 ---* DEFINE CLASS myTitik02 AS Label Top = 60 && posisi atas Left = 120 && posisi kiri Width = 10 && lebar label Height = 20 && tinggi label Caption = ":" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label Titik03 ---* DEFINE CLASS myTitik03 AS Label Top = 85 && posisi atas Left = 120 && posisi kiri Width = 10 && lebar label Height = 20 && tinggi label Caption = ":" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label Titik04 ---* DEFINE CLASS myTitik04 AS Label Top = 110 && posisi atas Left = 120 && posisi kiri Width = 10 && lebar label Height = 20 && tinggi label Caption = ":" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor ENDDEFINE *--- definisi label Titik05 ---* DEFINE CLASS myTitik05 AS Label Top = 135 && posisi atas Left = 120 && posisi kiri Width = 10 && lebar label Height = 20 && tinggi label Caption = ":" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0,0,0) && warna huruf BackColor = _Screen.BackColor && warna dasar Visible = .T. && tampil dilayar monitor

87

255) && warna dasar DisabledForeColor = RGB(0.255) && warna non-aktif DisabledBackColor = RGB(224.ENDDEFINE *--.T.255) && warna dasar DisabledForeColor = RGB(0.definisi textbox myTxtKode ---* DEFINE CLASS myTxtKode AS TextBox Top = 35 && posisi atas Left = 135 && posisi kiri Width = 50 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.255.T.0) && warna huruf BackColor = _Screen.definisi optiongroup myOptJenKel ---* DEFINE CLASS myOptJenKel AS OptionGroup Top = 85 && posisi atas Left = 135 && posisi kiri Width = 200 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.255) && warna dasar DisabledForeColor = RGB(0.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = . && optiongroup di-aktifkan Visible = .255) && warna huruf BackColor = RGB(255.255.255) && warna non-aktif DisabledBackColor = RGB(224.0.255) && warna huruf BackColor = RGB(255.0.BackColor && warna dasar Visible = .0.definisi label Titik05 ---* DEFINE CLASS myTitik06 AS Label Top = 160 && posisi atas Left = 120 && posisi kiri Width = 10 && lebar label Height = 20 && tinggi label Caption = ":" && isi label FontName = "Arial" && jenis huruf FontSize = 10 && ukuran huruf ForeColor = RGB(0.224.224) && warna non-aktif ButtonCount = 2 && 2 pilihan Laki-laki atau Perempuan Enabled = .255.0.0.0. && tampil di layar monitor 88 .T. && tampil dilayar monitor ENDDEFINE *--.255) && warna huruf BackColor = RGB(255.T.224.224) && warna non-aktif MaxLength = 5 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .definisi textbox myTxtNama ---* DEFINE CLASS myTxtNama AS TextBox Top = 60 && posisi atas Left = 135 && posisi kiri Width = 380 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.224. && tampil di layar monitor ENDDEFINE *--.255) && warna non-aktif DisabledBackColor = RGB(224.0.T. && tampil di layar monitor ENDDEFINE *--.

0.255.224) && warna non-aktif MaxLength = 5 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .0.T.T. && tampil di layar monitor ENDDEFINE *--.definisi textbox myTxtKota ---* DEFINE CLASS myTxtKota AS TextBox Top = 135 && posisi atas Left = 135 && posisi kiri Width = 380 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.255) && warna dasar DisabledForeColor = RGB(0.255) && warna huruf BackColor = RGB(255.0.definisi textbox myTxtAlamat ---* DEFINE CLASS myTxtAlamat AS TextBox Top = 110 && posisi atas Left = 135 && posisi kiri Width = 380 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.F.0.224.224.definisi textbox myTxtKodePos ---* DEFINE CLASS myTxtKodePos AS TextBox Top = 160 && posisi atas Left = 135 && posisi kiri Width = 60 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.255) && warna huruf SplitBar = .224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .0.255) && warna huruf BackColor = RGB(255.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .224. && tampil di layar monitor ENDDEFINE *--.255) && warna non-aktif DisabledBackColor = RGB(224.T.255) && warna non-aktif DisabledBackColor = RGB(224.255) && warna huruf BackColor = RGB(255.definisi grid myGrdGrid ---* DEFINE CLASS myGrdGrid AS Grid Top = 185 && posisi atas Left = 10 && posisi kiri Width = 520 && lebar grid Height = 265 && tinggi grid ColumnCount = 6 && jumlah kolom FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.255) && warna dasar DisabledForeColor = RGB(0.255) && warna dasar DisabledForeColor = RGB(0.ENDDEFINE *--.0.0.255. && splitbar di-non-aktifkan * tambahkan prosedur AfterRowColChange 89 .255) && warna non-aktif DisabledBackColor = RGB(224.255. && tampil di layar monitor ENDDEFINE *--.

0.T..) ENDPROC ENDDEFINE *--...cmdFirst. maka: * tampilkan pesan TampilkanSorry("SORRY.cmdFirst. jika button FIRST diklik SELECT TabelKu && aktifkan tabel TabelKu.0) && warna huruf ToolTipText = "Record Sebelumnya" && tips kecil Visible = ...0.T. maka: * tampilkan pesan TampilkanSorry("SORRY.. && tampil di layar monitor PROCEDURE Click && aktif.dbf IF RECCOUNT() = 0 && jika file kosong.Width && posisi kiri Width = _Screen..T. maka: * aktifkan prosedur TampilkanRecord() TampilkanRecord("FIRST") ENDIF ENDIF ENDPROC ENDDEFINE *--.PROCEDURE AfterRowColChange * parameter harus ada. maka: * tampilkan pesan TampilkanSorry("SORRY...dbf IF RECCOUNT() = 0 && jika file kosong.Width && lebar button Height = _Screen.Top && posisi atas Left = _Screen..top of file!") ELSE * aktifkan prosedur TampilkanRecord() TampilkanRecord("PREV") ENDIF 90 .Height && tinggi button Caption = "<" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0. tapi tidak digunakan LPARAMETERS nColIndex * aktifkan prosedur TampilkanData() TampilkanData(. maka: IF RECNO()=1 && jika posisi di record awal.. maka: IF RECNO()=1 && jika posisi di record awal.cmdFirst. jika button NEXT diklik SELECT TabelKu && aktifkan tabel TabelKu.file kosong!") ELSE && jika file isi.cmdFirst. maka: * tampilkan pesan TampilkanSorry("SORRY..Left + .top of file!") ELSE && jika posisi tidak di record awal.definisi command button myFirst ---* DEFINE CLASS myFIRST AS COMMANDBUTTON Top = 450 && posisi atas Left = 10 && posisi kiri Width = 40 && lebar button Height = 25 && tinggi button Caption = "|<" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0. && tampil di layar monitor PROCEDURE Click && aktif... _Screen...definisi command button myPrev ---* DEFINE CLASS myPREV AS COMMANDBUTTON Top = _Screen.cmdFirst.file kosong!") ELSE && jika file isi.0) && warna huruf ToolTipText = "Record Awal" && tips kecil Visible = .

file kosong!") ELSE && jika file isi....0) && warna huruf ToolTipText = "Record Akhir" && keterangan singkat Visible = . && tampil di layar monitor PROCEDURE Click && aktif..cmdFirst.Width && lebar button Height = _Screen..Left + ..Width && posisi kiri Width = _Screen.. maka: * jika posisi di record akhir..definisi command button myNext ---* DEFINE CLASS myNEXT AS COMMANDBUTTON Top = _Screen.T. maka: IF RECNO() = RECCOUNT() * tampilkan pesan TampilkanSorry("SORRY. maka: IF RECNO() = RECCOUNT() * tampilkan pesan TampilkanSorry("SORRY.0) && warna huruf ToolTipText = "Record Berikutnya" && tips kecil Visible = .. && tampil di layar monitor PROCEDURE Click && aktif.cmdFirst. maka: * tampilkan pesan TampilkanSorry("SORRY.definisi command button myLast ---* DEFINE CLASS myLAST AS COMMANDBUTTON Top = _Screen.end of file!") ELSE && jika posisi tidak di record akhir.Top && posisi atas Left = _Screen.cmdFirst.Top && posisi atas Left = _Screen.. _Screen.end of file!") ELSE && jika posisi tidak di record akhir.ENDIF ENDPROC ENDDEFINE *--.Height && tinggi button Caption = ">|" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0. jika button LAST diklik SELECT TabelKu && aktifkan tabel TabelKu..file kosong!") ELSE && jika file isi.Height && tinggi button Caption = ">" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.cmdPrev. maka: * jika posisi di record akhir.cmdPrev..cmdFirst.dbf IF RECCOUNT() = 0 && jika file kosong..cmdNext.cmdNext.Width && lebar button Height = _Screen. maka: * aktifkan prosedur TampilkanRecord() TampilkanRecord("LAST") ENDIF ENDIF 91 . _Screen..Width && posisi kiri Width = _Screen.cmdFirst.0.T. maka: * aktifkan prosedur TampilkanRecord() TampilkanRecord("NEXT") ENDIF ENDIF ENDPROC ENDDEFINE *--..cmdFirst. jika button NEXT diklik SELECT TabelKu && aktifkan tabel TabelKu.dbf IF RECCOUNT() = 0 && jika file kosong..Left + .0. maka: * tampilkan pesan TampilkanSorry("SORRY.

. maka: APPEND BLANK && tambahkan record kosong * isi dengan data berikut ini: REPLACE TabelKu. maka: IF EMPTY(ThisForm.Value) * tampilkan pesan TampilkanSorry("SORRY.txtKode.cmdFirst. maka: nRecPos = RECNO() && posisi record sekarang * cari Kode yang sama LOCATE FOR TabelKu.. jika button ADD diklik LOCAL nRecPos && variabel lokal SELECT TabelKu && aktifkan tabel TabelKu.Kode WITH .Top && posisi atas Left = _Screen.maksimum record 1.Nama WITH .Kode sudah ada!") * posisi kursor di field Kode ThisForm.dbf * periksa isi button IF ThisForm. maka: IF RECCOUNT() >= nMaxRec * tampilkan pesan TampilkanSorry("SORRY.JenKel WITH "Perempuan" ENDIF REPLACE TabelKu.txtKode.SetFocus ELSE && jika jumlah record belum maksimum..txtKode.SetFocus ELSE && jika Kode isi..Alamat WITH .SetFocus GO nRecPos && menuju record xRecPos ELSE && jika Kode tidak sama..0) && warna huruf ToolTipText = "Tambah Data" && tips kecil Visible = .txtKode.Value 92 . maka: * aktifkan prosedur TampilkanRecord() TampilkanRecord("ADD") ENDIF ELSE && simpan data (SAVE) * jika Kode kosong.Width + 20 && lebar button Height = _Screen..Left + .cmdLast..cmdFirst.txtNama.T.Value IF FOUND() && jika Kode sama.000!") * posisi kursor di field Kode ThisForm. maka: * tampilkan pesan TampilkanSorry("SORRY.Value IF ThisForm..JenKel WITH "Laki-laki" ELSE REPLACE TabelKu.Value = 1 REPLACE TabelKu.Kode=ThisForm.. ThisForm. ThisForm.cmdAdd.0..cmdLast..Height && tinggi button Caption = "ADD" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.. ThisForm.ENDPROC ENDDEFINE *--.txtAlamat.txtKode.Kode kosong!") * posisi kursor di field Kode ThisForm.Value REPLACE TabelKu. _Screen.optJenKel.definisi command button myAdd ---* DEFINE CLASS myADD AS COMMANDBUTTON Top = _Screen.txtKode. && tampil di layar monitor PROCEDURE Click && aktif.Width && posisi kiri Width = _Screen.Caption = "ADD" && tambah data * jika jumlah record maksimum.cmdFirst.

.txtKota.txtKodePos.Value IF ThisForm.dbf IF RECCOUNT() = 0 && jika file kosong. ThisForm. _Screen.txtNama.Height && tinggi button Caption = "EDIT" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.Value = 1 REPLACE TabelKu.Nama WITH .cmdFirst.REPLACE TabelKu. maka: DO CASE && periksa isi (caption) button CASE ThisForm.Value REPLACE TabelKu. ThisForm.definisi command button myEdit ---* DEFINE CLASS myEDIT AS COMMANDBUTTON Top = _Screen. ThisForm.Kota WITH .cmdAdd.0.cmdEdit.Value REPLACE TabelKu.Alamat WITH .optJenKel.T. maka: * tampilkan pesan TampilkanSorry("SORRY.KodePos WITH .JenKel WITH "Laki-laki" ELSE REPLACE TabelKu.Caption="SAVE" && simpan data * simpan data berikut ini: REPLACE TabelKu.txtKota..Left + . ThisForm.cmdFirst.Caption="EDIT" && ubah data * aktifkan prosedur TampilkanRecord() TampilkanRecord("EDIT") CASE ThisForm.KodePos WITH .JenKel WITH "Perempuan" ENDIF REPLACE TabelKu.Value REPLACE TabelKu.cmdFirst.Width + 20 && lebar button Height = _Screen.file kosong!") ELSE && jika file isi.Width && posisi kiri Width = _Screen.Value FLUSH && pastikan data disimpan dalam tabel * aktifkan prosedur TampilkanRecord() TampilkanRecord("SAVE") OTHERWISE && batal (CANCEL) * aktifkan prosedur TampilkanRecord() TampilkanRecord("SAVE") ENDCASE ENDIF ENDPROC ENDDEFINE 93 .Value FLUSH && pastikan data disimpan GO BOTTOM && menuju record akhir * aktifkan prosedur TampilkanRecord() TampilkanRecord("SAVE") ENDIF ENDIF ENDIF ENDPROC ENDDEFINE *--.Top && posisi atas Left = _Screen.0) && warna huruf ToolTipText = "Ubah Data" && tips kecil Visible = .cmdEdit..txtKodePos. && tampil di layar monitor PROCEDURE Click && aktif. ThisForm. ThisForm.txtAlamat.Kota WITH . jika button EDIT diklik SELECT TabelKu && aktifkan tabel TabelKu..cmdAdd.

.. 0.definisi command button myDelete ---* DEFINE CLASS myDELETE AS COMMANDBUTTON Top = _Screen..Caption="DELETE" && hapus data * tampilkan pesan untuk memilih YES atau NO IF MESSAGEBOX("Anda ingin menghapus data ini?". maka: * aktifkan prosedur TampilkanData() TampilkanData(. xRecSek && variabel lokal SELECT TabelKu && aktifkan tabel TabelKu..F."Delete") ENDIF ELSE * aktif prosedur TampilkanRecord() TampilkanRecord("SAVE") ENDIF ELSE * aktifkan prosedur TampilkanRecord() TampilkanRecord("SAVE") 94 .cmdFirst.Width + 20 && lebar button Height = _Screen.cmdDelete.T..) IF RECCOUNT()=0 && jika tabel kosong..."Konfirmasi") = 6 && pilih YES DELETE && hapus data PACK && pastikan data terhapus dalam tabel * aktifkan prosedur GridRefresh() GridRefresh() * aktifkan prosedur SetButton() SetButton(.!"+.) * tampilkan pesan MESSAGEBOX("Data Anda sudah dihapus.cmdEdit..cmdEdit.Left + ..."Delete") ELSE * jika posisi record > jumlah record IF xRecSek > RECCOUNT() GO BOTTOM && menuju record akhir ELSE GO xRecSek && menuju record sekarang ENDIF * aktifkan prosedur TampilkanData() TampilkanData(.cmdFirst.file kosong!"..Top && posisi atas Left = _Screen.T.Width && posisi kiri Width = _Screen.*--... maka: * periksa isi button (Caption) IF ThisForm.) * aktifkan prosedur SetField() SetField(.file kosong!") ELSE && jika file isi.. 0... jika button DELETE diklik LOCAL xYesNo. _Screen.Height && tinggi button Caption = "DELETE" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0. && tampil di layar monitor PROCEDURE Click && aktif.T.cmdFirst.. maka: * tampilkan pesan TampilkanSorry("SORRY.. CHR(13)+CHR(13)+"SORRY. 4+32+256.dbf xRecSek = RECNO() && variabel posisi record sekarang IF RECCOUNT() = 0 && jika file kosong.0..) * tampilkan pesan MESSAGEBOX("Data Anda sudah dihapus.!".F.0) && warna huruf ToolTipText = "Hapus Data" && keterangan singkat Visible = .

definisi command button myAbout ---* DEFINE CLASS myABOUT AS COMMANDBUTTON Top = _Screen.Height && tinggi button Caption = "SORT" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0..Top && posisi atas Top Left = _Screen.0.0.Width && posisi kiri Width = _Screen.Left + . _Screen.Left + .Width && posisi kiri Width = _Screen.Width + 20 && lebar button Height = _Screen.0) && warna huruf ToolTipText = "Urut Data" && tips kecil Visible = . jika button SORT diklik LOCAL nRecPos && variabel lokal SELECT TabelKu && aktifkan tabel TabelKu.T."+.0) && warna huruf ToolTipText = "Tentang Program" && tips kecil Visible = . maka: * tampilkan pesan TampilkanSorry("SORRY. maka: SortData() && aktifkan prosedur SortData() GO nRecPos && menuju posisi record sekarang * aktifkan prosedur TampilkanRecord() TampilkanRecord("SORT") ENDIF ENDPROC ENDDEFINE *--.cmdDelete.cmdFirst.cmdFirst. && tampil di layar monitor PROCEDURE Click && aktif.Width + 20 && lebar button Height = _Screen.cmdSort.Height && tinggi button Caption = "ABOUT" && isi button FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.T.dbf nRecPos = RECNO() && variabel posisi record sekarang IF RECCOUNT() = 0 && jika file kosong.T.file kosong!") ELSE && jika file isi.cmdFirst..Width + 20 && lebar button Height = _Screen.cmdAbout."About") ENDPROC ENDDEFINE *--.Left + .cmdFirst..cmdAbout.cmdFirst.. && tampil di layar monitor PROCEDURE Click && aktif.cmdFirst.cmdFirst. _Screen.cmdSort. CHR(13)+"komunitas programer di Indonesia.ENDIF ENDIF ENDPROC ENDDEFINE *--..".Width && posisi kiri Width = _Screen.Height && tinggi button Caption = "CLOSE" && isi button Cancel = .0.cmdFirst. CHR(13)+"Semoga bermanfaat. jika button ABOUT diklik * tampilkan pesan MESSAGEBOX("Program ini disumbangkan kepada"+.definisi command button mySort ---* DEFINE CLASS mySORT AS COMMANDBUTTON Top = _Screen...definisi command button myClose ---* DEFINE CLASS myCLOSE AS COMMANDBUTTON = _Screen. _Screen.cmdDelete.Top && posisi atas Left = _Screen.cmdFirst..Top && posisi atas Left = _Screen. && aktif jika tombol ESC ditekan 95 .

Enabled = xPar && textbox ON/OFF IF xPar && jika bernilai TRUE.224.ToolTipText = "Ubah Data" && tips . jika button CLOSE diklik * tampilkan pesan.T.cmdAdd.0) && warna huruf ToolTipText="Selesai.Enabled = xPar && textbox ON/OFF .cmdLast.ToolTipText = "Hapus Data" && tips ENDIF ENDWITH ENDPROC *--.Enabled = xPar && textbox ON/OFF .Enabled = xPar && button ON/OFF .Enabled = xPar && textbox ON/OFF .txtAlamat.T.txtKodePos.cmdEdit.cmdEdit.Caption = "ADD" && isi button .255) .prosedur SetField ---* PROCEDURE SetField PARAMETERS xPar && menerima variabel kiriman * mengatur field dalam form _SCREEN WITH _Screen .BackColor = RGB(255.cmdDelete. maka: * warna dasar putih .cmdClose.224.Enabled = xPar && button ON/OFF . pilih YES atau NO IF MESSAGEBOX("Anda ingin selesai?".Option1.cmdSort.prosedur SetButton ---* PROCEDURE SetButton PARAMETERS xPar && menerima variabel kiriman * mengatur button dalam form _SCREEN WITH _Screen . .cmdNext..optJenKel.cmdDelete.255.0.optJenKel.255. kembali ke Windows" && tips kecil Visible =.4+32.cmdAbout.Option2.cmdAdd. maka: * warna dasar abu-abu .optJenKel.txtNama.BackColor = RGB(224.Enabled = xPar && button ON/OFF .BackColor = RGB(255. && tampil di layar monitor PROCEDURE Click && aktif.cmdPrev.cmdDelete.255) ELSE && jika bernilai FALSE.txtKota.txtKode.255) .optJenKel.224) 96 .ToolTipText = "Tambah Data" && tips .Enabled = xPar && button ON/OFF IF xPar = .Enabled = xPar && textbox ON/OFF .Caption = "DELETE" && isi button .Option1.BackColor = RGB(224.Enabled = xPar && button ON/OFF .Enabled = xPar && textbox ON/OFF .Enabled = xPar && button ON/OFF .optJenKel.Enabled = xPar && button ON/OFF .cmdAdd.Enabled = xPar && button ON/OFF .BackColor = RGB(255.Caption = "EDIT" && isi button .Enabled = xPar && button ON/OFF .224) .FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor =RGB(0.optJenKel.Enabled = xPar && button ON/OFF . "Konfirmasi") = 6 && pilihan YES Stop() && aktifkan prosedur Stop() ENDIF ENDPROC ENDDEFINE ****************************** * definisi prosedur-prosedur * ****************************** *--.cmdFirst.cmdEdit.255.

txtKode.cmdAdd.Enabled = .txtKode.ToolTipText = "Simpan Data" && tip kecil .optJenKel.) && aktifkan prosedur SetButton() SetField(. && aktifkan button cmdADD .Caption = "SAVE" && isi button cmdADD .Enabled = NOT xPar && grid ON/OFF ENDWITH ENDPROC *--.Value = RECCOUNT() && TotRec .BackColor = RGB(224.optJenKel..T.Value = RECCOUNT() && TotRec .224) ENDIF .Caption = "CANCEL" && isi button cmdEDIT .txtAlamat.Value = TabelKu.cmdEdit.txtTotRec.txtTotRec.prosedur TampilkanData ---* PROCEDURE TampilkanData PARAMETERS xPar && menerima variabel kiriman IF xPar && jika bernilai TRUE.KodePos && KodePos .Value = 2 && JenKel ENDIF .txtKodePos.Option2.txtNoRec.Kota && Kota .224.Alamat && Alamat .T.txtNama.Value = "" && isi textbox Kode .txtNoRec. maka * tampilkan data berikut WITH _Screen .Value = 1 && JenKel ELSE .Value = RECCOUNT()+1 && NoRec .Value = TabelKu.Refresh ENDWITH ELSE && jika bernilai FALSE.ToolTipText = "Batal" && tip kecil 97 .myGrid.Value = TabelKu.Value = TabelKu. && aktifkan button cmdEDIT .txtKodePos.) && aktifkan prosedur SetField() WITH _Screen .Value = "" && isi textbox Kota .txtNama.Nama && Nama IF TabelKu.optJenKel.Value = "" && isi textbox KodePos ENDWITH ENDIF ENDPROC *--.txtAlamat.F.cmdEdit.prosedur TampilkanRecord ---* PROCEDURE TampilkanRecord PARAMETERS cPar && menerima variabel kiriman DO CASE CASE cPar = "FIRST" GO TOP && menuju record awal CASE cPar = "PREV" SKIP -1 && menuju record sebelumnya CASE cPar = "NEXT" SKIP && menuju record berikutnya CASE cPar = "LAST" GO BOTTOM && menuju record akhir CASE cPar = "ADD" SetButton(.myGrid.T.Value = TabelKu.Value = "" && isi textbox Alamat .Value = "" && isi textbox Nama .txtKota.cmdAdd.Value = RECNO() && NoRec .Enabled = .Kode && Kode .txtKota.Value = 1 && isi textbox JenKel .optJenKel.JenKel = "Laki-laki" . maka: * tampilkan data berikut WITH _Screen .cmdAdd.cmdEdit.

cmdDelete.128) && dasar .SelectedItemBackColor = RGB(128.txtKode.Width = 200 && lebar kolom2 .cmdEdit.Column2.Visible = .F.) && aktifkan prosedur SetField() OTHERWISE SetButton(.0.ToolTipText ="Simpan Data" && tip kecil .Width = 60 && lebar kolom6 * judul masing-masing kolom .SelectedItemForeColor = RGB(0.T.SetFocus && kursor di field txtKode ENDWITH CASE cPar = "EDIT" SetButton(.Header1.T.Enabled = ." && judul kolom3 . && tidak bisa dihapus .Enabled = .. && tampilkan di layar monitor * lebar masing-masing kolom .) && aktifkan prosedur SetField() WITH _Screen .txtNama.SetFocus && kursor di field txtNama ENDWITH CASE cPar = "SAVE" SetButton(.AllowAutoColumnFit = 2 && kolom tetap .DeleteMark = . && tidak bisa diubah .Width = 100 && lebar kolom3 .Enabled = .) && aktifkan prosedur SetButton() SetField(.0.T.Column5.) && aktifkan prosedur SetButton() SetField(.Caption = "CANCEL" && button cmdDELETE .255) && huruf .KEL.0) && huruf .Caption = "JEN.Width = 200 && lebar kolom4 .Column3.Width = 200 && lebar kolom5 . && textbox Kode nonaktif .Column4.Column3.) && aktifkan prosedur SetButton() SetField(.cmdDelete.T.cmdEdit."SORRY") && tampilkan pesan SORRY ENDPROC *--. && header tidak bisa diubah .Column2.T.) && aktif prosedur TampilkanData() ENDIF ENDPROC *--.F.Column4.AllowHeaderSizing = .224) && dasar .ReadOnly = .Caption = "SAVE" && button cmdEDIT .F.HighlightForeColor = RGB(0.txtKode.Width = 50 && lebar kolom1 .cmdDelete.myGrid .Caption = "ALAMAT" && judul kolom4 98 .F.) && aktifkan prosedur SetField() ENDCASE IF cPar = "ADD" TampilkanData(.F. && button cmdDELETEaktif .HighlightBackColor = RGB(224.HighlightStyle = 2 && warna dasar dipilih .Header1.T.224.RecordSource = "TabelKu" && tabel TabelKu . && button cmdEDIT aktif .0.Column6.prosedur GridRefresh ---* PROCEDURE GridRefresh * me-refresh grid myGrid WITH _Screen.Caption = "KODE" && judul kolom1 .F.Column1.RecordSourceType = 1 && tipe alias .Header1.T.ToolTipText="Batal" && tip kecil .cmdEdit.prosedur TampilkanSorry ---* PROCEDURE TampilkanSorry PARAMETERS cPar && menerima variabel kiriman MESSAGEBOX(cPar.F.Column1.Header1.Caption = "N A M A" && judul kolom2 .T.255.) && aktif prosedur TampilkanData() ELSE TampilkanData(.

ForeColor = RGB(0. JenKel C(9).Option2.ForeColor = RGB(0.dbf sudah ada * jika file TabelKu.Caption = "Perempuan" && isi option1 ENDWITH ENDPROC *--.file kosong!") ENDIF ENDPROC *--.224) && warna dasar * mengatur optiongroup.Option2..Width = 80 && lebar option1 . Kode C(5).0) && warna non-aktif .Top = 2 && posisi atas .0.dbf * jika jumlah record melebihi maksimum.Caption = "Laki-laki" && isi option1 * mengatur optiongroup. . .0.Option1.dbf tidak ada.Height = 22 && tinggi option1 .prosedur Stop ---* PROCEDURE Stop SELECT TabelKu && aktifkan tabel TabelKu.Caption = TampilkanTanggal() CLOSE TABLES ALL && tutup semua tabel * periksa. Alamat C(50). .ForeColor = RGB(0.Left = 10 && posisi kiri .Option2.Option2 .224) && non-aktif . Kota C(50).dbf") * buat file baru TabelKu.Option1.Option1. KodePos C(5)) ENDIF CLOSE TABLES ALL && tutup semua tabel * aktifkan tabel TabelKu USE TabelKu ALIAS TabelKu EXCLUSIVE IN 0 GridRefresh() && aktifkan prosedur GridRefresh() IF RECCOUNT() = 0 && jika file kosong.Option1.Column6. apakah file TabelKu.Option2.prosedur Start ---* PROCEDURE Start * isi label Tanggal _Screen.Option1. maka: * tampilkan pesan TampilkanSorry("SORRY.224.Left = 100 && posisi kiri .224.Header1.BackColor = RGB(224.Header1.Caption = "KODE POS" && judul kolom6 ENDWITH * me-refresh optiongroup optJenKel WITH _Screen. maka: IF NOT FILE("TabelKu. .optJenKel ..0) && warna non-aktif .Width = 80 && lebar option1 .0.Caption = "KOTA" && judul kolom5 .Tanggal.BackColor = RGB(224.dbf ( .dbf CREATE TABLE TabelKu. .255) && warna huruf .Height = 22 && tinggi option1 .224) && non-aktif .224.Option2.BackColor = RGB(224. maka: IF RECCOUNT() > nMaxRec GO (nMaxRec+1) && menuju mrecord maksimum + 1 * hapus beberapa record berikutnya DELETE NEXT RECCOUNT() * pastikan record benar-benar dihapus dari tabel PACK 99 .Option1.Option2...Column5..Option2.Top = 2 && posisi atas .Option1 .Option1. Nama C(50).

&& bisa dipindahkan MinButton = .. && tip tool text di-aktifkan WindowType = 1 && window modal. .tambahkan optiongroup optMyOption ---* ADD OBJECT optMyOption AS OptionGroup WITH .ENDIF QUIT && selesai. . && control box di-non-aktifkan Movable = .. lainnya non-aktif **************************************************** * berikut ini cara mengisi form myFormSort. . && button close di-non-aktifkan ShowTips = .tambahkan label lblMyJudul ---* ADD OBJECT lblMyJudul As Label WITH . *--.Show && tampilkan READ EVENTS && aktifkan semua event RETURN && selesai ENDPROC **************************** * definisi form myFormSort * **************************** DEFINE CLASS myFormSort As Form Top = 10 && posisi atas Left = 10 && posisi kiri Width = 300 && lebar form Height = 160 && tinggi form Caption = "Urut Data" && judul form BorderStyle = 2 && fix dialog BackColor = _Screen.BackColor. . . . BackColor = _Screen. . Visible = . Top = 35. . . . Top = 10. Name = "lblJudul". && button maksimum di-non-aktifkan Closable = . . Width = 120.T. Name = "optOption". FontName = "Arial". FontBold = .prosedur SortData ---* PROCEDURE SortData * membuat form myFormSort oFormSort = CREATEOBJECT("myFormSort") oFormSort. && button minimum di-non-aktifkan MaxButton = .F. yaitu: * * langsung menambahkan objek bersama atributnya * * ke dalam form * **************************************************** *--. Height = 22. Visible = .T.BackColor && warna dasar AutoCenter = . Left = 10. . . *--. . Enabled = . . Caption = "Urut berdasarkan:". Height = 110.T. kembali ke Windows ENDPROC *--.T.BackColor. 100 . . Width = 130. ButtonCount = 4.tambahkan optiongroup optMySort ---* ADD OBJECT optMySort AS OptionGroup WITH . Left = 10.F.T. && posisi di tengah layar monitor ControlBox = .F.F. .T. FontSize = 9.T. . BackColor = _Screen.

Width = 120. ToolTipText = "Proses dilanjutkan".optNAMA. . .0. . .Visible = . Height = 25.Left = 5 && posisi kiri . .Option4. . && huruf tebal .T.Visible = . Caption = "Close".optKODE. *--.FontBold = . Visible = .optNAMA. ..Height = 20 && tinggi optKODE .optNAMA. Name = "cmdSortClose". Visible = . .T.Option3. .optKODE. Top = 120.prosedur Init ---* PROCEDURE Init * mengatur optiongroup optOption WITH Thisform. . Enabled = .optNAMA. . .T.0.T. . . ToolTipText = "Proses dibatalkan".tambahkan button mySort ---* ADD OBJECT mySort As Commandbutton WITH .T.T. Height = 60.optNAMA. && tampilkan di monitor * mengatur optJKEL 101 . . Name = "cmdSortOK". .optKODE.Height = 20 && tinggi optNAMA . Left = 150. Width = 60.Caption = "NAMA" && isi optNAMA . . BackColor = _Screen.optNAMA. && tampilkan di monitor * mengatur optNAMA . Top = 120. .optNAMA.Top = 30 && posisi atas .optKODE.255) && warna biru . Left = 210.optKODE.Name = "optNAMA" && nama option1 .optKODE. . Width = 60.ForeColor = RGB(0.Top = 5 && posisi atas .Option2.Name = "optSort".. Cancel = . Height = 25.Width = 100 && lebar optNAMA .BackColor && dasar .Left = 5 && posisi kiri . Left = 150. Visible = . .Name = "optKODE" && nama option1 .Option1.tambahkan button myClose ---* ADD OBJECT myClose As Commandbutton WITH .FontBold = .BackColor. && huruf tebal . . .Name = "optJKEL" && nama option2 . .Name = "optKOTA" && nama option3 * mengatur optKODE . Top = 35.T. FontSize = 9. .optOption .ForeColor = RGB(0.Width = 100 && lebar optKODE .Caption = "KODE" && isi optKODE .optNAMA.optKODE. *--.T. Caption = "OK". *--.255) && warna biru . .T.optKODE.BackColor = _Screen.optKODE.optNAMA. FontName = "Arial".BackColor && dasar . ButtonCount = 2.BackColor = _Screen.

BackColor && dasar .BackColor && dasar .BackColor = _Screen.optASC.Height = 20 && tinggi optKOTA .255) && warna bitu .Top = 30 && posisi atas .ForeColor = RGB(0.optDESC.optJKEL.optJKEL. && huruf tebal .Width = 100 && lebar optKOTA . N.optDESC. && tampilkan di monitor ENDWITH * mengatur optiongroup optSort WITH Thisform.Click LOCAL I.BackColor = _Screen.255) && warna biru .optJKEL.optDESC.T. && tanda True (sudah urut) * pembacaan data sequential (awal s/d akhir) FOR I = 1 TO (N-1) GO I && menuju record ke I.optSort .optKOTA.Left = 5 && posisi kiri .0.FontBold = .Width = 110 && lebar optJKEL .Top = 55 && posisi atas .Top = 5 && posisi atas .T.Caption = "Ascending" && isi optASC .optKOTA.Top = 80 && posisi atas .Left = 5 && posisi kiri .ForeColor = RGB(0.Name = "optDESC" && nama option2 * mengatur optASC .optKOTA.FontBold = .255) && warna biru .optASC. && variabel tanda (flag/switch) DO WHILE xUrut = .F.optASC.optJKEL.optDESC.Click ---* PROCEDURE cmdSortOK.optJKEL.F. && tampilkan di monitor ENDWITH ENDPROC *--. && tampilkan di monitor * mengatur optDESC .FontBold = .T.Left = 5 && posisi kiri .Visible = .T.Caption = "Descending" && isi optDESC . && selama False (belum urut) xUrut = .Width = 100 && lebar optASC .Option1. && huruf tebal .optDESC.Height = 20 && tinggi optDESC .T.T.Option2.Caption = "KOTA" && isi optKOTA . xUrut && variabel lokal ********************************************* * pengurutan BUBBLE SORT (external sorting) * * untuk jumlah data 1.optASC.optDESC.Width = 100 && lebar optDESC .FontBold = ..optASC.ForeColor = RGB(0.ForeColor = RGB(0.T.optASC.optJKEL.optKOTA.optKOTA.optDESC. ambil data 102 .BackColor = _Screen.Visible = .waktu 00:01:30 * ********************************************* SELECT TabelKu && aktifkan tabel TabelKu N = RECCOUNT() && variabel jumlah record xUrut = .optKOTA.prosedur cmdSortOK.optJKEL.T.BackColor && dasar .Height = 20 && tinggi optASC .Visible = . && huruf tebal .optDESC.optASC.Visible = .Height = 20 && tinggi optJKEL .optASC.T.000 .optASC.0. && tampilkan di monitor * mengatur optKOTA .optDESC.0.0.BackColor && dasar .Caption = "JENIS KELAMIN" && optJKEL .Left = 5 && posisi kiri .optKOTA.optKOTA. && huruf tebal .Name = "optASC" && nama option1 .BackColor = _Screen.optJKEL.optJKEL.255) && warna biru .optKOTA.

.xKODE. yALMT.yNAMA.KodePos && ambil KODEPOS GO (I+1) && menuju record ke (I+1).Value=1 * jika memenuhi syarat..JenKel && ambil JENKEL yALMT = TabelKu.yNAMA.SimpanData(I.yKOTA.Value=1 AND .xKODE = TabelKu.Kota && ambil KOTA xKPOS = TabelKu.xKODE.Kota && ambil KOTA yKPOS = TabelKu. pemindahan data IF xKODE > yKODE xUrut = .yKODE.Value=1 * jika memenuhi syarat. && False (belum urut) ThisForm. yALMT.Nama && ambil NAMA yJKEL = TabelKu.xJKEL.yNAMA.xKPOS.Value=2 AND ..xKPOS.xNAMA.xKODE. xALMT.xKOTA.yJKEL.SimpanData(I.ASCENDING CASE .yKPOS) && simpan data ENDIF * urut JENKEL .xNAMA. pemindahan data IF xNAMA > yNAMA xUrut = .SimpanData(I.xKPOS.DESCENDING CASE . yALMT.xJKEL.yKODE.Alamat && ambil ALAMAT xKOTA = TabelKu.Kode && ambil KODE yNAMA = TabelKu. xALMT... yALMT. pemindahan data IF xKODE < yKODE xUrut = .xKPOS.xKOTA.xJKEL.yKODE.optSort. && False (belum urut) ThisForm.optOption. && False (belum urut) ThisForm.F.xNAMA. xALMT.yKOTA.xNAMA.yKOTA.yKODE..F.F. xALMT.yKOTA. pemindahan data IF xJKEL > yJKEL xUrut = . xALMT.yKPOS) && simpan data ENDIF * urut KODE .yNAMA.xKODE.optOption.xKPOS.optOption.optSort.Value=1 AND .yKPOS) && simpan data ENDIF * urut NAMA .yNAMA.F.Nama && ambil NAMA xJKEL = TabelKu.xKODE.yKPOS) && simpan data 103 .Value=2 * jika memenuhi syarat.DESCENDING CASE .optSort.yKPOS) && simpan data ENDIF * urut NAMA ...yJKEL. yALMT.Alamat && ambil ALAMAT yKOTA = TabelKu.JenKel && ambil JENKEL xALMT = TabelKu.SimpanData(I.xJKEL.Value=2 AND .Value=3 AND .ASCENDING CASE .optOption. && False (belum urut) ThisForm. && False (belum urut) ThisForm.ASCENDING CASE .xKOTA.yKODE..yJKEL.xKOTA.xJKEL. ambil data yKODE = TabelKu.yKOTA.Kode && ambil KODE xNAMA = TabelKu.yJKEL.Value=1 * jika memenuhi syarat.KodePos && ambil KODEPOS * periksa kondisi pengurutan dalam form ini WITH ThisForm * lakukan pembandingan DO CASE * urut KODE .optOption.yJKEL.SimpanData(I.optSort.xNAMA..optSort. pemindahan data IF xNAMA < yNAMA xUrut = .xKOTA.Value=2 * jika memenuhi syarat.F.

xKODE.yKODE. xALMT.xJKEL.ASCENDING CASE .xNAMA.yKOTA.xJKEL.Nama REPLACE TabelKu.yJKEL.Value=1 * jika memenuhi syarat.F.xKOTA. pemindahan data IF xJKEL < yJKEL xUrut = ..Value=2 * jika memenuhi syarat.yKODE.optSort.xKOTA.xKODE..yKPOS) && simpan data ENDIF * urut KOTA .Kode WITH yKODE && simpan Kode WITH yNAMA && simpan Nama REPLACE TabelKu.Alamat WITH yALMT && simpan Alamat REPLACE TabelKu.xALMT.ENDIF * urut JENKEL .xNAMA. && False (belum urut) ThisForm. yALMT.Release && form dihapus ENDPROC *--.xJKEL.xKOTA.Click ---* PROCEDURE cmdSortClose. pemindahan data IF xKOTA > yKOTA xUrut = .yKOTA.Release && form dihapus ENDPROC *--.optOption.Value=4 AND .DESCENDING CASE .xNAMA.Value=4 AND ..JenKel WITH yJKEL && simpan JenKel REPLACE TabelKu. && False (belum urut) ThisForm.KodePos WITH yKPOS && simpan Kode Pos * menuju record ( xRecPos + 1 ) GO (nRecPos+1) * menyimpan data di record xRecPos+1 REPLACE TabelKu.yNAMA.optOption. .xKPOS.JenKel WITH xJKEL && simpan JenKel REPLACE TabelKu.yKOTA.yKOTA.yJKEL.yKPOS * menuju record xRecPos GO nRecPos * menyimpan data di record xRecPos REPLACE TabelKu.Kode WITH xKODE && simpan Kode REPLACE TabelKu. yALMT.Kota WITH xKOTA && simpan Kota 104 . xALMT. pemindahan data IF xKOTA < yKOTA xUrut = .yKPOS) && simpan data ENDIF ENDCASE ENDWITH NEXT ENDDO ThisForm.SimpanData(I.yKPOS) && simpan data ENDIF * urut KOTA . && False (belum urut) ThisForm. yKODE. xALMT. xKODE.Alamat WITH xALMT && simpan Alamat REPLACE TabelKu.Value=3 AND .DESCENDING CASE .xKOTA.yKODE.prosedur SimpanData ---* PROCEDURE SimpanData * menerima 13 variabel kiriman PARAMETERS nRecPos.yNAMA.F... .F. yALMT.SimpanData(I.prosedur cmdSortClose.yJKEL.Value=2 * jika memenuhi syarat.xKPOS.yALMT.Nama WITH xNAMA && simpan Nama REPLACE TabelKu.Kota WITH yKOTA && simpan Kota REPLACE TabelKu.yJKEL.xKODE.optOption.Click ThisForm.xKPOS.SimpanData(I.xNAMA.yNAMA.xKPOS.xJKEL.optSort.yNAMA.optSort..

prg dari CD pendamping buku ini.5)+1))+. * bulan dan tahun RETURN (cRet) ENDFUNC * End of procedure Ketik program di atas.NamaHari(7). ".prg atau copy file TabelKu.NamaPasar(5). NamaPasar((MOD((DATE()-CTOD("01/01/1900")). tanggal. tanggal."+ . NamaBulan(MONTH(DATE()))+" "+STR(YEAR(DATE()).NamaBulan(12) * Nama-nama hari NamaHari(1) = "Minggu" NamaHari(2) = "Senin" NamaHari(3) = "Selasa" NamaHari(4) = "Rabu" NamaHari(5) = "Kamis" NamaHari(6) = "Jum'at" NamaHari(7) = "Sabtu" * Nama-nama pasaran NamaPasar(1) = "Pahing" NamaPasar(2) = "Pon" NamaPasar(3) = "Wage" NamaPasar(4) = "Kliwon" NamaPasar(5) = "Legi" * Nama-nama bulan NamaBulan(1) = "Januari" NamaBulan(2) = "Februari" NamaBulan(3) = "Maret" NamaBulan(4) = "April" NamaBulan(5) = "Mei" NamaBulan(6) = "Juni" NamaBulan(7) = "Juli" NamaBulan(8) = "Agustus" NamaBulan(9) = "September" NamaBulan(10)= "Oktober" NamaBulan(11)= "Nopember" NamaBulan(12)= "Desember" * nama hari dan pasar. bulan dan tahun cRet = NamaHari(DOW(DATE()))+" .4) * mengembalikan nama hari dan pasar.REPLACE TabelKu.prosedur TampilkanTanggal ---* FUNCTION TampilkanTanggal LOCAL cRet. "+ALLTRIM(STR(DAY(DATE())))+" "+. Hasilnya pasti memuaskan! 105 . simpan dengan nama TabelKu.KodePos WITH xKPOS && simpan Kode Pos ENDPROC ENDDEFINE *--. kemudian jalankan di dalam lingkungan Visual FoxPro.

dan Cucu. Tabel Bapak. Anda dapat mengisi data.DBF. sedangkan tabel Anak. sedangkan tabel Anak. 106 . serta menelusuri tabel dari satu record ke record lainnya.dbf. maupun tabel Cucu ditampilkan dalam satu layar sebagai sarana interaktif antara pemakai dengan database (tabel). Pembahasan dalam program aplikasi Bapak-Anak ini difokuskan pada pembuatan file kode (CODE). Anak. Ketiga tabel dihubungkan menggunakan field kunci. Tabel Bapak. menghapus data. yaitu Bapak.dbf. yaitu file yang berekstensi PRG.dbf berhubungan dengan tabel Cucu. Program BapakAnak berhubungan dengan 3 tabel.DBF. tabel Anak.DBF.dbf menggunakan kunci KDANAK untuk berhubungan dengan tabel Cucu.dbf menggunakan kunci KODE untuk berhubungan dengan tabel Anak.dbf berhubungan langsung dengan tabel Anak.dbf. Tabel Bapak.dbf. Dengan program BapakAnak ini. mengubah data.TABEL BAPAKANAK Program aplikasi Bapak-Anak ini melibatkan tiga tabel (DBF) yang saling berhubungan.

Struktur tabel Bapak. dan CommandButton untuk menangani ketiga tabel tersebut.DBF Kode Anak kunci penghubung tabel MataKuliah. No 1 2 Field KODE KDANAK Type C C Width 3 3 Keterangan Kode kunci penghubung tabel Bapak.DBF adalah sebagai berikut. dan tabel Cucu ditampilkan dalam satu layar sehingga memudahkan pemakai untuk melakukan penelusuran dari satu record ke record lainnya. Perubahan dalam tabel Bapak akan langsung kelihatan dalam tabel 107 .DBF Nama Cucu 2 NMCUCU C 30 Program aplikasi BapakAnak disusun berdasarkan konsep hubungan antartabel seperti tersebut di atas. No 1 2 Field KODE NAMA Type C C Width 3 30 Keterangan Kode Bapak kunci penghubung tabel Anak. tabel Anak.Kita masih memanfaatkan form utama Visual FoxPro dan beberapa objek Label.DBF adalah sebagai berikut. Tabel Bapak. Grid.DBF Nama Bapak Struktur tabel Anak.DBF Nama Anak 3 NMANAK C 30 Struktur tabel Cucu. TextBox.DBF adalah sebagai berikut. No 1 Field KDCUCU Type C Width 3 Keterangan Kode Cucu kunci penghubung tabel Anak.

baik menambah data. sedangkan tabel Anak berhubungan dengan 2 Cucu (100Bhs. mengubah data. Indonesia Sejarah Tabel Cucu: KDCUCU 100 200 300 400 NMCUCU Bhs. Indonesia Bhs. Inggris Matematika Sejarah 108 . maupun menghapus data. demikian juga perubahan dalam tabel Anak akan langsung kelihatan dalam tabel Cucu. Di mana satu data dalam tabel Bapak berhubungan dengan 2 data dalam tabel Anak serta tabel Cucu. Berikut ini contoh hubungan antara tabel Bapak.Anak. Tabel Bapak: KODE 001 NAMA Kusmijanto Tabel Anak: KODE 001 001 002 002 KDANAK 100 200 100 400 NMANAK Bhs. Disamping itu. dan Cucu. Anak. Indonesia Bhs. Contoh pemakaian: Tabel Bapak (001-Kusmijanto) berhubungan dengan 2 Anak (100 dan 200). Inggris). manipulasi data dapat dilakukan dengan mudah. Inggris Bhs. Indonesia dan 200-Bhs.

yaitu jendela sebagai sarana interaktif antara pemakai dengan database (tabel).1a Tampilan program aplikasi BapakAnak 109 . maka akan ditampilkan form yang menangani tabel Cucu. Di bagian atas terdapat informasi tabel Bapak. Jika Anda mengklik button […]. 7. sedangkan di bagian bawah terdapat informasi tabel Anak.1 Desain Program Bentuk tampilan dari program Bapak-Anak seperti gambar di bawah ini. Gambar 7.Semoga uraian yang ringkas di atas bisa menjelaskan konsep hubungan ketiga tabel yang tampak dalam contoh pemakaian. Penjelasan yang lebih rinci sudah banyak ditulis dalam beberapa buku mengenai konsep database relasional serta perintah SQL-nya.

antara lain navigasi record. hapus data. tambah data. Jika button […] diklik.1b Tampilan Pengelolaan Tabel Cucu Fasilitas yang tersedia. kembali ke tampilan Bapak-Anak. 110 . antara lain navigasi record. tentang program. Gambar 7. tambah data. dan tutup form. hapus data. tentang program dan tutup form. maka akan tampil form pengelolaan cucu sebagai berikut.Fasilitas yang tersedia. Form Pengelolaan tabel Cucu. ubah data. ubah data.

antara lain untuk tabel Bapak. Anak. Di baris bawah ditampilkan navigasi (pergerakan) record.dbf adalah Kode. atau menghapus data. dan objek CommandButton. yaitu variabel _SCREEN. Algoritma program Bapak-Anak adalah sebagai berikut. serta button About yang akan menampilkan keterangan kecil tentang program ini. pendidikan.7. Pemakai dapat menelusuri tabel. Kemudian ditampilkan masing-masing data (record) serta semua data dalam grid. Menghubungkan form dengan ketiga tabel (Bapak. perpustakaan. Program aplikasi BapakAnak menampilkan isi tabel Bapak.2 Logika Program Dasar utama pembuatan program Bapak-Anak ini adalah jendela sebagai sarana interaktif antara pemakai dan database (tabel). Dalam pengelolaan 3 tabel dibutuhkan objek Label.dbf adalah Kode dan Nama. button untuk tambah data (ADD).dbf. dan Nama Anak. Pengembangan selanjutnya dari program ini. bisa digunakan untuk berbagai keperluan bidang bisnis lainnya. dan Cucu. misalnya akuntansi.dbf. 111 .dbf. menambah data. yakni tabel Bapak. • • • • Mengatur variabel _SCREEN untuk diisi dengan beberapa objek Label. dan Cucu.dbf. dan CommandButton yang menampilkan semua record (data) dari ketiga tabel. dan Cucu. dan lain-lain. dan button Close yang akan menampilkan pilihan untuk mengakhiri program. Di baris atas ditampilkan nama hari dan pasaran posisi tanggal saat ini dan ditampilkan juga jam digital. Data yang ditampilkan. tanpa membuat form lainnya selain form utama Visual FoxPro. maka program akan berhenti dan kembali ke Windows. Grid. mengubah data. Jika dipilih YES. point of sales. dan pengurutan data (SORT). Anak. Anak. objek Grid. Kode Anak. Selanjutnya terserah pemakai. hapus data (DELETE). Program Bapak-Anak disusun hanya menggunakan kode program (CODE) saja.dbf. ubah data (EDIT).dbf) Menampilkan record (data) ke dalam form. sedangkan untuk tabel Anak.

program aplikasi tabel BapakAnak dapat digambarkan sebagai berikut.Secara sederhana.dbf Navigasi Record ADD EDIT DELETE ABOUT CLOSE Gambar 7. Start Persiapan Mengatur form _SCREEN Menampilkan Data Menampilkan semua data dalam objek Grid dan menampilkan satu data dalam objek TextBox Navigasi Record … ADD EDIT DELETE SORT ABOUT CLOSE Menampilkan Data Cucu Stop Pengelolaan tabel Cucu.2 Flowchart program aplikasi tabel BapakAnak 112 .

ShowTips = .Left = 0 && posisi kiri .prg * * Keterangan : program aplikasi (CODE) untuk menangani * * 3 tabel Bapak.F.AddObject("Waktu".Caption = "Parent .AddObject("NamaBapak"."myJudulBapak") .AddObject("Tanggal".Top = 0 && posisi atas ."myJam") .MaxButton = .3 Kode Program Berikut ini listing kode program tabel BapakAnak.F.AddObject("Titik02". tabel Anak dan tabel Cucu * * yang saling berhubungan (relationship) * * . && button max dihilangkan .Closable = .MinButton = .AddObject("JudulBapak".AddObject("Jam"."myTanggal") .AddObject("Judul". && button close dihilangkan .7.Child Relationship" && judul form . *********************************************************** * Nama Program : BapakAnak. && tampilkan tooltiptext .AddObject("RecBapak".AddObject("KodeBapak".000 * Mengatur form _SCREEN (milik Visual FoxPro) WITH _Screen ."myVersion") . && button min dihilangkan .AddObject("Titik01"."myJudul") .ControlBox = .BorderStyle = 2 && fix dialog ****************** * Kelompok Bapak * ****************** * tambahkan objek label .Height = 600 && tinggi form ."myRecBapak") .T.Width = 390 && lebar form . && button controbox dihilangkan ."myNamaBapak") * tambahkan objek label ."myTitik02") 113 . "myWaktu") ."myKodeBapak") .F. && form ditengah layar monitor .single user version (exclusive) * *********************************************************** * Set Environment SET TALK OFF SET STATUS OFF SET SAFETY OFF SET STATUS BAR OFF SET SYSMENU OFF SET EXCLUSIVE ON SET ESCAPE ON * bersihkan memori CLEAR ALL CLOSE ALL CLOSE TABLES ALL * variabel public PUBLIC oKusForm As Form PUBLIC nMaxRec nMaxRec = 1000 && Jumlah record maksimum 1.AutoCenter = .F.AddObject("Versi".T."myTitik01") .

"myNomorAnak") * tambahkan objek label .AddObject("cmdBottom"."myCmdBottomAnak") .AddObject("txtKodeAnak". label.AddObject("cmdCucu"."mytxtNamaAnak") ."mytxtTotRecAnak") * tambahkan objek grid ."myCmdAddAnak") ."myCmdCucu") * tambahkan objek button ."mytxtKodeAnak") ."myNoRecAnak") ."myTitik04") ."myCmdAboutAnak") ."mytxtKodeBapak") ."myCmdDel") .."mytxtNoRecBapak") .AddObject("txtTotRecBapak".AddObject("cmdEditAnak"."myTabelCucu") ."mytxtTotRecBapak") * tambahkan objek grid .AddObject("txtNoRecBapak".AddObject("cmdTopAnak".AddObject("cmdDelAnak".AddObject("Titik07"."myGrdGridAnak") * tambahkan objek button ."myTitik06") ."myTitik05") .AddObject("cmdNextAnak"."myTitik03") * tambahkan objek textbox .AddObject("cmdCloseAnak"."myCmdCloseAnak") * tampilkan form ."myCmdTop") ."myKodeAnak") ."myCmdTopAnak") .AddObject("cmdAddAnak".AddObject("txtTotRecAnak"."myTitik07") * tambahkan objek textbox ."myCmdAbout") .AddObject("cmdBottomAnak".AddObject("cmdClose".AddObject("NomorAnak".AddObject("cmdTop". textbox.AddObject("txtNomorAnak".AddObject("Titik03"."mytxtNoRecAnak") ."myCmdEditAnak") .AddObject("cmdNext".AddObject("JudulAnak"."myCmdEdit") ."myCmdClose") ***************** * Kelompok Anak * ***************** * tambahkan objek label .AddObject("GrdGridBapak".AddObject("cmdAboutAnak".AddObject("Titik06".AddObject("KodeAnak"."myCmdAdd") .AddObject("txtKodeBapak".AddObject("NamaAnak"."myCmdBottom") .AddObject("cmdAdd".AddObject("cmdPrevAnak".AddObject("cmdDel".AddObject("cmdPrev".Show ENDWITH Start() && aktifkan prosedur Start() READ EVENTS && aktifkan semua event RETURN && selesai ***************************************** * definisi objek timer."myJudulAnak") ."myCmdDelAnak") ."mytxtNamaBapak") . * 114 ."myCmdPrev") .AddObject("NoRecAnak"."myCmdPrevAnak") .AddObject("Titik04".AddObject("TabelCucu".AddObject("txtNamaBapak".AddObject("Titik05".AddObject("txtNamaAnak".AddObject("cmdEdit"."myCmdNextAnak") .AddObject("GrdGridAnak"."myCmdNext") .AddObject("cmdAbout".AddObject("txtNoRecAnak"."myGrdGridBapak") * tambahkan objek button ."myNamaAnak") ."mytxtNomorAnak") .

&& tampak di layar monitor ENDDEFINE *--.T. && tampak di layar monitor ENDDEFINE *--.Caption = TIME() ENDPROC ENDDEFINE ****************** * KELOMPOK BAPAK * ****************** *---------------------------* Kelompok Label *---------------------------*--.* optiongroup dan command button * ***************************************** *--.255) && warna huruf Caption = "PARENT TABLE" && isi Label Visible = .T.T.T. && label tampil ENDDEFINE *--.definisi timer myWaktu ---* DEFINE CLASS myWaktu AS Timer Top = 0 && posisi atas Left = 0 && posisi kiri Interval = 1000 && interval 1 detik PROCEDURE Timer && aktif setiap 1 detik * label Jam diisi jam 00:00:00 _Screen.definisi label myJam ---* DEFINE CLASS myJam AS Label 115 .definisi label myJudul ---* DEFINE CLASS myJudul As Label Top = 10 && posisi atas Left = 20 && posisi kiri Width = 220 && lebar label Height = 25 && tinggi label FontBold = .T. && huruf tebal Caption = "PARENT . && huruf tebal ForeColor = RGB(0.definisi label myVersion ---* DEFINE CLASS myVersion AS Label Top = 10 && posisi atas Left = 240 && posisi kiri Width = 120 && lebar label Height = 20 && tinggi label Caption = "Single User Version" && isi label Alignment = 1 && rata kanan Visible = .CHILD TABLE RELATIONSHIP" Visible = .0.T.definisi label myJudulBapak ---* DEFINE CLASS myJudulBapak As Label Top = 35 && posisi atas Left = 20 && posisi kiri Width = 108 && lebar label Height = 25 && tinggi label FontBold = . && label tampil ENDDEFINE *--.Jam.definisi label myTanggal ---* DEFINE CLASS myTanggal AS Label Top = 35 && posisi atas Left = 110 && posisi kiri Width = 190 && lebar label Height = 20 && tinggi label Caption = "" && isi label Alignment = 1 && rata kanan Visible = .

No. && tampak di layar monitor 116 ." && isi label Visible = .T. && tampak di layar monitor ENDDEFINE *-----------------------------* Kelompok Titik Bapak *-----------------------------DEFINE CLASS myTitik01 As Label Top = 60 && posisi atas Left = 216 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .T.T. && tampak di layar monitor ENDDEFINE *-----------------------------DEFINE CLASS myTitik02 As Label Top = 60 && posisi atas Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .Top = 35 && posisi atas Left = 310 && posisi kiri Width = 50 && lebar textbox Height = 20 && tinggi label Caption = TIME() && label diisi jam 00:00:00 Alignment = 1 && rata kanan Visible = . && huruf tebal Caption = "Nama" && isi label Visible = .T.T. && huruf tebal Caption = "Kode" && isi label Visible = . && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = .T. && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = .T. && tampak di layar monitor ENDDEFINE *------------------------------DEFINE CLASS myRecBapak As Label Top = 60 && posisi atas Left = 168 && posisi kiri Width = 50 && lebar label Height = 22 && tinggi label FontBold = .T. && label tampil ENDDEFINE *--.T.definisi label myKodeBapak ---* DEFINE CLASS myKodeBapak As Label Top = 60 && posisi atas Left = 20 && posisi kiri Width = 40 && lebar label Height = 22 && tinggi label FontBold = .T. && huruf tebal Caption = "Rec. && tampak di layar monitor ENDDEFINE *-------------------------------DEFINE CLASS myNamaBapak As Label Top = 85 && posisi atas Left = 20 && posisi kiri Width = 40 && lebar label Height = 22 && tinggi label FontBold = .T.

T.255) && warna dasar DisabledBackColor = RGB(128.0) && warna non-aktif TabStop = .F.255) && warna non-aktif DisabledForeColor = RGB(255.F.F. && tampak di layar monitor ENDDEFINE *-------------------------------------DEFINE CLASS myTxtNoRecBapak As TextBox Top = 60 && posisi atas Left = 230 && posisi kiri Width = 60 && lebar label Height = 22 && tinggi label Alignment = 2 && di kiri textbox Enabled = .ENDDEFINE *-----------------------------DEFINE CLASS myTitik03 As Label Top = 85 && posisi atas Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .0. && non-aktif Format = "999" && bentuk tampilan InputMask = "999" && bentuk masukan ForeColor = RGB(0.255.T. && tidak bisa di-tab 117 . && tampak di layar monitor ENDDEFINE *--------------------------------------DEFINE CLASS myTxtTotRecBapak As TextBox Top = 60 && posisi atas Left = 300 && posisi kiri Width = 60 && lebar label Height = 22 && tinggi label Alignment = 2 && di kiri textbox Enabled = .255) && warna huruf DisabledBackColor = RGB(128.0) && warna non-aktif TabStop = .255.0. && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0.0) && warna depan Visible = .0.F.0.255. && tidak bisa di-tab Visible = .255) && warna huruf BackColor = RGB(255.T.255) && warna huruf BackColor = RGB(255.255. && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = .255. && tampak di layar monitor ENDDEFINE *------------------------------------* Kelompok TextBox Bapak *------------------------------------DEFINE CLASS mytxtKodeBapak As TextBox Top = 60 && posisi atas Left = 70 && posisi kiri Width = 60 && lebar label Height = 22 && tinggi label Alignment = 0 && di kiri textbox Enabled = .T.255) && warna non-aktif DisabledForeColor = RGB(255.255) && warna dasar DisabledForeColor = RGB(255.0. && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0.F.0.255) && warna dasar DisabledBackColor = RGB(128.

T.255) && warna huruf BackColor = RGB(255.Visible = .255) && warna non-aktif DisabledForeColor = RGB(255.T. && tidak bisa displit Column1.cmdTop. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiBapak() NavigasiBapak("FIRST") ENDPROC ENDDEFINE *-------------------------------------DEFINE CLASS myCmdPrev As CommandButton Top = _Screen. tidak digunakan LPARAMETERS nColIndex RefreshAnakTmp() && aktifkan RefreshAnakTmp() TampilkanAnak() && aktifkan TampilkanAnak() TampilkanBapak() && aktifkan TampilkanBapak() ENDPROC ENDDEFINE *------------------------------------* Kelompok CommandButton Bapak *------------------------------------DEFINE CLASS myCmdTop As CommandButton Top = 240 && posisi atas Left = 20 && posisi kiri Width = 25 && lebar button Height = 25 && tinggi button Caption = "|<" && isi button ToolTipText = "Record Awal" && tips kecil Visible = .Left + .T.255) && warna dasar DisabledBackColor = RGB(128.0.F.0.Name = "Column1" && nama kolom 1 Column2.T.F.T.Name = "Column2" && nama kolom 2 Visible = . && tampak di layar monitor PROCEDURE AfterRowColChange && aktif jika ada perubahan * parameter ini harus ada.F. && non-aktif ForeColor = RGB(0.0) && warna non-aktif Visible = . && tampak di layar monitor ENDDEFINE *------------------------------------DEFINE CLASS myTxtNamaBapak As TextBox Top = 85 && posisi atas Left = 70 && posisi kiri Width = 290 && lebar text box Height = 22 && tinggi text box MaxLength = 30 && isian maksimum Enabled = .cmdTop.Top && posisi atas Left = _Screen.255.255. && tidak bisa diedit RecordSource = "Bapak" && sumber tabel Bapak RecordSourceType = 1 && alias SplitBar = . 118 . && tidak bisa dihapus ReadOnly = . && tampak di layar monitor ENDDEFINE *---------------------------------* Kelompok Grid Bapak *---------------------------------DEFINE CLASS myGrdGridBapak As Grid Top = 115 && posisi atas Left = 20 && posisi kiri Width = 350 && lebar grid Height = 121 && tinggi grid ColumnCount = 2 && jumlah kolom DeleteMark = .

Caption = "Add" && button ADD 119 .Height && tinggi button Width = _Screen.cmdTop.Height && tinggi button Width = _Screen.cmdTop.cmdNext.cmdPrev. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiBapak() NavigasiBapak("PREV") ENDPROC ENDDEFINE *-------------------------------------DEFINE CLASS myCmdNext As CommandButton Top = _Screen.T.cmdPrev.cmdNext.cmdBottom. _Screen.Width && lebar button Caption = ">" && isi button ToolTipText = "Record Berikutnya" && tips kecil Visible = .Left + .cmdBottom. _Screen. _Screen.T.cmdBottom.Width && posisi kiri Height = _Screen.cmdNext.Height && tinggi button Width = _Screen.Width && posisi kiri Height = _Screen.Width && lebar button Caption = ">|" && isi button ToolTipText = "Record Akhir" && tips kecil Visible = .cmdBottom.Top && posisi atas Left = _Screen.cmdTop. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik LOCAL nRecPos SELECT Bapak && aktifkan tabel Bapak * jika jumlah record sudah maksimum.Top && posisi atas Left = _Screen.Top && posisi atas Left = _Screen.cmdPrev.cmdPrev.Left + .Width && lebar button Caption = "<" && isi button ToolTipText = "Record Sebelumnya" && tips kecil Visible = .cmdNext.cmdNext._Screen.T.cmdBottom. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiBapak() NavigasiBapak("LAST") ENDPROC ENDDEFINE *------------------------------------DEFINE CLASS myCmdAdd As CommandButton Top = _Screen.Height && tinggi button Caption = "Add" && isi button ToolTipText = "Tambah Data" && tips kecil Visible = .cmdPrev.Width + 25 && lebar button Height = _Screen. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiBapak() NavigasiBapak("NEXT") ENDPROC ENDDEFINE *---------------------------------------DEFINE CLASS myCmdBottom As CommandButton Top = _Screen.cmdAdd.Width && posisi kiri Width = _Screen. maka: IF RECCOUNT() >= nMaxRec TampilkanRecordMax() && tampilkan pesan ELSE WITH _Screen && menatur _SCREEN DO CASE CASE .T.Width && posisi kiri Height = _Screen.Left + .

Caption = "Save" && button SAVE * jika txtKodeBapak kosong IF EMPTY(.F. && button non-aktif .cmdEdit. WITH .Enabled = .SetFocus ELSE APPEND BLANK && tambah satu record * simpan data REPLACE Bapak.cmdAdd.Value = "" && dikosongkan * mengatur field .T.Caption = "Save" && button Add .SetFocus ELSE && jika txtKodeBapak isi nRecPos = RECNO() && posisi record LOCATE FOR Kode = .F.txtKodeBapak.txtKodeBapak.Value) TampilkanKodeKosong() && tampil pesan * kursos fokus di field txtKodeBapak .F.Enabled = .Kode . && non-aktif * mengatur button .txtNamaBapak.T.txtKodeBapak.SETFOCUS CASE .Enabled = .cmdEdit.Caption = "Add" .Caption = "Edit" * mengatur textbox .txtNamaBapak.* aktifkan prosedur ButtonBapak() ButtonBapak(.grdGridAnak.F.Enabled = .Value = "" && dikosongkan .txtKodeBapak.txtNamaBapak. * .Value = Bapak.) * aktifkan prosedur ButtonAnak() ButtonAnak(.Enabled = .Value REPLACE Bapak.txtKodeBapak. && non-aktif * kursor fokus di field txtKodeBapak .grdGridBapak.T. .Nama * mengatur textbox .Enabled = .T.Kode .txtKodeBapak.) * aktifkan prosedur ButtonAnak() ButtonAnak(.F.cmdAdd.T.) * mengatur grid . && non-aktif .cmdAdd.cmdEdit. 120 .txtKodeBapak.grdGridAnak.txtKodeBapak.Nama .txtKodeBapak.txtNamaBapak.Enabled = . && non-aktif .Value IF FOUND() TampilkanKodeSama() && pesan GO nRecPos && record nRecPos * kursos fokus di txtKodeBapak .T.cmdAdd.Enabled = .T.F.txtKodeBapak.) * mengatur button . WITH .Value FLUSH && pastikan data disimpan GO BOTTOM && menuju akhir record * aktifkan prosedur BapakRefresh() BapakRefresh() * aktifkan prosedur ButtonBapak() ButtonBapak(.txtNamaBapak.Enabled = .Caption = "Cancel" && button Edit * mengatur field . && button non-aktif * mengatur button .Value = Bapak.

F.F.cmdAdd.Value REPLACE Bapak.txtKodeBapak.Value = Bapak.Kode WITH .Nama WITH .cmdDel.Width && posisi kiri Height = _Screen.Caption = "Edit" && Edit * aktifkan prosedur ButtonBapak() ButtonBapak(. ..grdGridAnak.txtKodeBapak.cmdEdit.Enabled = .T.Width && lebar button Caption = "Edit" && isi button ToolTipText = "Ubah Data" && keterangan pendek Visible = .Enabled = .txtKodeBapak.Refresh && direfresh ENDIF ENDIF ENDCASE ENDWITH ENDIF ENDPROC ENDDEFINE *-------------------------------------DEFINE CLASS myCmdEdit As CommandButton Top = _Screen. && non-aktiif * mengatur button .) * aktifkan prosedur ButtonAnak() ButtonAnak(.Enabled = .Caption = "Save" && button Save * simpan data REPLACE Bapak. maka: TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi * mengatur _SCREEN WITH _Screen DO CASE CASE .F.T.cmdAdd.grdGridBapak. && non-aktif .Enabled = . && non-aktif .Value = Bapak.Enabled = .) * aktifkan prosedur ButtonAnak() ButtonAnak(.txtNamaBapak.Left + .) * mengatur grid . && non-aktif .txtNamaBapak.cmdAdd.Enabled = .cmdEdit.Caption = "Save" .Top && posisi atas Left = _Screen.grdGridBapak.Nama * mengatur textbox .cmdAdd.txtNamaBapak.Value FLUSH && pastikan data disimpan * aktifkan prosedur ButtonBapak() ButtonBapak(. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik SELECT Bapak && aktifkan tabel Bapak IF RECCOUNT() = 0 && jika file kosong.Kode .cmdEdit.T.Caption = "Del" 121 .T.cmdDel.cmdAdd. && non-aktif * mengatur button .Caption = "Edit" .) * mengatur button .Height && tinggi button Width = _Screen. && non-aktif * kursor fokus di field txtKodeBapak .cmdEdit.F. _Screen.T.txtKodeBapak.Enabled = .grdGridBapak.T.cmdEdit.cmdDel.Caption = "Cancel" * mengatur textbox .SETFOCUS CASE .T.T.

Kode .Nama * mengatur textbot .cmdEdit.Value = Bapak.Enabled = .T.Top && posisi atas Left = _Screen.Enabled = .cmdDel. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik SELECT Bapak && aktifkan tabel Bapak IF RECCOUNT() = 0 && jika file kosong TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi * mengatur _SCREEN WITH _Screen DO CASE CASE .Value = Bapak.Kode .Enabled = ..T. 4+32+256.Left + .) * aktifkan prosedur ButtonAnak() ButtonAnak(.Refresh && direfresh OTHERWISE && lainnya * aktifkan prosedur ButtonBapak() ButtonBapak(. && non-aktif .cmdEdit.Width && lebar button Caption = "Del" && isi button ToolTipText = "Hapus Data" && keterangan pendek Visible = .) * mengatur button .Refresh && direfresh ENDCASE ENDWITH ENDIF ENDPROC ENDDEFINE *------------------------------------DEFINE CLASS myCmdDel As CommandButton Top = _Screen. && aktif . && aktif .txtNamaBapak. && non-aktif * mengatur grid .cmdDel.Enabled = .cmdEdit.cmdEdit.grdGridBapak.Nama * mengatur textbox .T.txtNamaBapak.Caption = "Del" * mengatur textbox . && non-aktif * mengatur grid .grdGridAnak. _Screen.* mengatur textbox .Caption = "Del" && button Del * tampilkan pilihan.Value = Bapak.grdGridBapak.Caption = "Edit" .F. && non-aktif .cmdEdit.T.cmdAdd. && aktif ."Konfirmasi")=6 && YES SELECT Bapak && aktifkan tabel Bapak xRecPos = RECNO() && posisi record DELETE && hapus record PACK && pastikan record dihapus * jika file kosong 122 .cmdEdit.Enabled = .Height && tinggi button Width = _Screen.F.Width && posisi kiri Height = _Screen.grdGridBapak.txtKodeBapak.txtNamaBapak.Enabled = .F.Enabled = .F.txtKodeBapak.txtNamaBapak.T.Caption = "Add" .grdGridAnak.grdGridBapak. YES atau NO IF MESSAGEBOX("Anda ingin menghapus record?".T. && aktif .txtKodeBapak.T.Enabled = .Value = Bapak.txtKodeBapak.

* mengatur grid .grdGridAnak.grdGridBapak.Refresh && direfresh * mengatur textbox . "NAMA ANAK" * mengatur grid .grdGridBapak.Width = 70 .Value = AnakTmp.Kode . "NAMA" * mengatur textbox .Value = Bapak.) 123 .txtNamaBapak.RecordSource="Bapak" .Column1.grdGridBapak.Caption=.RecordSourceType = 1 .grdGridBapak.Kode .Column2.grdGridAnak.Header1.Enabled = .txtKodeBapak. "KD.NmAnak ENDIF ENDIF OTHERWISE * aktifkan prosedur ButtonBapak() ButtonBapak(.Value = Bapak.Column1.Column3.grdGridAnak.Header1.Refresh && direfresh .T.Value = RECCOUNT() .Width = 300 .Value = AnakTmp. "KODE" .txtTotRecBapak.grdGridAnak.Column3.KdAnak .Kode * mengatur grid .grdGridAnak.Header1.Caption=.txtNoRecBapak.Caption=.Caption=.F.Enabled = .txtNamaBapak.Header1.F.grdGridBapak.grdGridBapak.Column1.grdGridAnak.Enabled = .Nama * mengatur textbox .Width = 50 .grdGridAnak.) * aktifkan prosedur ButtonBapak() ButtonAnak(.txtKodeAnak.grdGridAnak. WHERE Kode = Bapak.Caption=.Header1.txtNamaAnak.grdGridBapak.T.Column2.Column2.Column1.Value = RECNO() .txtKodeBapak.RecordSourceType = 1 .Width = 300 .grdGridBapak.grdGridAnak.T. INTO TABLE AnakTmp .Width = 50 .ColumnCount = 3 .RecordSource = "AnakTmp" .ANAK" .ColumnCount = 2 .txtNomorAnak.Value = AnakTmp.Column2.grdGridAnak.grdGridBapak. * filter data tabel Anak ke dalam * tabel AnakTmp * perintah SQL SELECT * FROM Anak . .IF RECCOUNT() = 0 TampilkanFileKosong() && pesan ELSE * jika record posisi > jumlah record IF xRecPos > RECCOUNT() GO BOTTOM && record akhir ELSE GO xRecPos && record posisi ENDIF . "KODE" .

CHR(13)+"komunitas programer di Indonesia. kembali ke Windows" && tips Visible = .cmdAbout.grdGridBapak.grdGridBapak. && tampak di layar monitor * prosedur jika button diklik PROCEDURE Click * tampilkan pesan MESSAGEBOX("Program ini disumbangkan kepada"+.F.Caption = "Del" && button Del * mengatur grid .txtNamaBapak.cmdDel.Height && tinggi button Width = _Screen."+.Height && tinggi button Width = _Screen."About") ENDPROC ENDDEFINE *--------------------------------------DEFINE CLASS myCmdClose As CommandButton Top = _Screen.cmdDel. _Screen. && non-aktif * mengatur button .T.Nama * mengatur textbox .Left + . && aktif . CHR(13)+"Semoga bermanfaat.Width && posisi kiri Height = _Screen.T.. _Screen.Top && posisi atas Left = _Screen. && non-aktif .Value = Bapak.Width && lebar button Caption = "Close" && isi button Cancel = .Refresh && direfresh ENDCASE ENDWITH ENDIF ENDPROC ENDDEFINE *--------------------------------------DEFINE CLASS myCmdAbout As CommandButton Top = _Screen.Left + .Caption = "Edit" && button Edit .T.".cmdDel.grdGridAnak. && aktif jika tombol ESC ditekan ToolTipText = "Selesai.Top && posisi atas Left = _Screen.Enabled = .Value = Bapak.0.cmdAbout.cmdAbout.txtNamaBapak.* mengatur textbox . && aktif .cmdAbout.Enabled = . && tampak di layar monitor PROCEDURE Click && aktif jika button diklik Stop() && aktifkan prosedur Stop() ENDPROC ENDDEFINE ***************** * KELOMPOK ANAK * ***************** *-------------------------------* Kelompok Label Anak *-------------------------------DEFINE CLASS myJudulAnak As Label Top = 280 && posisi atas Left = 24 && posisi kiri Width = 108 && lebar label 124 .cmdDel.cmdDel.Width && posisi kiri Height = _Screen.cmdEdit.cmdAbout..txtKodeBapak.T.Enabled = .T.cmdDel.Width && lebar button Caption = "About" && isi button ToolTipText = "Tentang Program" && tips kecil Visible = .Kode .txtKodeBapak.Enabled = .F...

&& tampak di layar monitor ENDDEFINE *-------------------------------DEFINE CLASS myNomorAnak As Label Top = 330 && posisi atas Left = 24 && posisi kiri Width = 36 && lebar label Height = 22 && tinggi label FontBold = ." && isi label Visible = ." && isi label Visible = . && tampak di layar monitor ENDDEFINE *-------------------------------DEFINE CLASS myNoRecAnak As Label Top = 305 && posisi atas Left = 168 && posisi kiri Width = 48 && lebar label Height = 22 && tinggi label FontBold = .0) && warna huruf Caption = "CHILD TABLE" && isi label Visible = .T.T. && huruf tebal Caption = "Rec.Height = 22 && tinggi label FontBold = .T.T.T. && huruf tebal Caption = "No.T. && huruf tebal Caption = "MtKul.No. && huruf tebal Caption = "Kode" && isi label Visible = .T. && tampak di layar monitor ENDDEFINE *------------------------------DEFINE CLASS myKodeAnak As Label Top = 305 && posisi atas Left = 24 && posisi kiri Width = 36 && lebar label Height = 22 && tinggi label FontBold = .0.T. && huruf tebal ForeColor = RGB(255.T. && tampak di layar monitor ENDDEFINE *-------------------------------DEFINE CLASS myTabelCucu As Label Top = 330 && posisi atas Left = 168 && posisi kiri Width = 150 && lebar label Height = 22 && tinggi label FontBold = . && tampak di layar monitor ENDDEFINE *-----------------------------* Kelompok Titik Anak *-----------------------------DEFINE CLASS myTitik04 As Label Top = 305 && posisi atas 125 .T.T.T." && isi label Visible = . && tampak di layar monitor ENDDEFINE *------------------------------DEFINE CLASS myNamaAnak As Label Top = 355 && posisi atas Left = 24 && posisi kiri Width = 36 && lebar label Height = 22 && tinggi label FontBold = . && huruf tebal Caption = "Pengelolaan Tabel Cucu" && isi label Visible = .

&& di-non-aktifkan Format = "999" && format tampilan InputMask = "999" && input tampilan ForeColor = RGB(0. && tampak di layar monitor ENDDEFINE *-----------------------------------* Kelompok TextBox Anak *-----------------------------------DEFINE CLASS myTxtKodeAnak As TextBox Top = 305 && posisi atas Left = 70 && posisi kiri Width = 60 && lebar textbox Height = 22 && tinggi textbox Alignment = 0 && isi di kiri textbox Enabled = .T.0. && tampak di layar monitor ENDDEFINE *-----------------------------DEFINE CLASS myTitik06 As Label Top = 330 && posisi atas Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = . && tampak di layar monitor ENDDEFINE *----------------------------DEFINE CLASS myTitik07 As Label Top = 355 && posisi atas Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .255) && warna dasar DisabledBackColor = RGB(128.Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = . && huruf tebal Alignment = 2 && isi di tengah label Caption = ":" && isi label Visible = . && huruf tebal Alignment = 2 && isi di tengah label Caption = ":" && isi label Visible = .T. && huruf tebal Alignment = 2 && isi di tengah label Caption = ":" && isi label Visible = .F.T.0. && huruf tebal Alignment = 2 && isi di tengah label Caption = ":" && isi label Visible = . && tampak di layar monitor ENDDEFINE *-----------------------------DEFINE CLASS myTitik05 As Label Top = 305 && posisi atas Left = 216 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .T.T.T.255.0) && warna non-aktif Visible = .128) && warna non-aktif DisabledForeColor = RGB(255.255) && warna huruf BackColor = RGB(255. && tampak di layar monitor ENDDEFINE *------------------------------------DEFINE CLASS myTxtNoRecAnak As TextBox 126 .T.T.255.T.

255) && warna huruf BackColor = RGB(255.255) && warna dasar DisabledBackColor = RGB(128.F.F. && tidak bisa ditab ForeColor = RGB(0. && tampak di layar monitor * aktif jika terjadi perubahan PROCEDURE InteractiveChange * isi field Nama tabel Cucu.255) && warna dasar DisabledBackColor = RGB(128.0) && warna non-aktif Visible = .128) && warna non-aktif DisabledForeColor = RGB(255.255) && warna dasar DisabledBackColor = RGB(128.0.T.F.255.0. && tidak bisa ditab ForeColor = RGB(0. && di-non-aktifkan 127 .0) && warna non-aktif Visible = .255.T. && tampak di layar monitor ENDDEFINE *-------------------------------------DEFINE CLASS myTxtNomorAnak As ComboBox Top = 330 && posisi atas Left = 70 && posisi kiri Width = 60 && lebar textbox Height = 22 && tinggi textbox Alignment = 0 && isi di kiri textbox Enabled = . && di-non-aktifkan Format = "999999" && format tampilan InputMask = "999999" && input tampilan TabStop = .dbf _Screen.T.0.0.F.TxtNamaAnak. && di-non-aktifkan Format = "" && format tampilan InputMask = "" && input tampilan ForeColor = RGB(0.255.0.255.255) && warna huruf BackColor = RGB(255.Top = 305 && posisi atas Left = 230 && posisi kiri Width = 60 && lebar textbox Height = 22 && tinggi textbox Alignment = 2 && isi di kanan textbox Enabled = . && tampak di layar monitor ENDDEFINE *-------------------------------------DEFINE CLASS myTxtTotRecAnak As TextBox Top = 305 && posisi atas Left = 300 && posisi kiri Width = 60 && lebar textbox Height = 22 && tinggi textbox Alignment = 2 && isi di kanan textbox Enabled = .255.0) && warna non-aktif Visible = .255) && warna huruf BackColor = RGB(255.NmCucu ENDPROC ENDDEFINE *-----------------------------------DEFINE CLASS myTxtNamaAnak As TextBox Top = 355 && posisi atas Left = 70 && posisi kiri Width = 290 && lebar textbox Height = 22 && tinggi textbox Alignment = 0 && isi di kiri textbox Enabled = .0.128) && warna non-aktif DisabledForeColor = RGB(255.Value = Cucu.F.128) && warna non-aktif DisabledForeColor = RGB(255.F. && di-non-aktifkan Format = "999999" && format tampilan InputMask = "999999" && input tampilan TabStop = .255.

F.Name = "Column2" && nama kolom 2 Column3. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik oKusForm = CREATEOBJECT("myFrmKusForm") && buat form oKusForm." && isi button ToolTipText = "Pengelolaan Tabel Cucu" && tip kecil Visible = . && tampak di layar monitor ENDDEFINE *--------------------------------* Kelompok Grid Anak *--------------------------------DEFINE CLASS myGrdGridAnak As Grid Top = 385 && posisi atas Left = 20 && posisi kiri Width = 350 && lebar textbox Height = 175 && tinggi textbox ColumnCount = 3 && jumlah kolom DeleteMark = . && tampak di layar monitor 128 .255.F.0.T. && tidak ada tabstop Column1.128) && warna non-aktif DisabledForeColor = RGB(255.T.Name = "Column1" && nama kolom 1 Column2. && tidak ada splitbar TabStop = .255) && warna dasar DisabledBackColor = RGB(128.T.255) && warna huruf BackColor = RGB(255.0) && warna non-aktif Visible = .255.T.F.T. && tidk bisa dihapus ReadOnly = .Name = "Column3" && nama kolom 3 Visible = . && tampak di layar monitor PROCEDURE AfterRowColChange && jika terjadi perubahan * parameter ini harus ada.dbf RecordSourceType = 1 && alias SplitBar = ..Show && tampilkan form READ EVENTS && aktifkan semua event ENDPROC ENDDEFINE *----------------------------------------DEFINE CLASS myCmdTopAnak As CommandButton Top = 565 && posisi atas Left = 20 && posisi kiri Width = 25 && lebar button Height = 25 && tinggi button Caption = "|<" && isi button ToolTipText = "Record Awal" && tip kecil Visible = . tidak digunakan LPARAMETERS nColIndex * aktifkan prosedur TampilkanAnak() TampilkanAnak() ENDPROC ENDDEFINE *-------------------------------------* Kelompok CommandButton Anak *-------------------------------------DEFINE CLASS myCmdCucu As CommandButton Top = 330 && posisi atas Left = 130 && posisi kiri Width = 30 && lebar button Height = 22 && tinggi button Caption = ".0.Format = "" && format tampilan InputMask = "" && input tampilan MaxLength = 35 && panjang maksimum ForeColor = RGB(0. && cuma bisa dibaca RecordSource = "AnakTmp" && tabel AnakTmp..

cmdNextAnak.cmdBottomAnak.Width && posisi kiri Width = _Screen.T.T.Width && posisi kiri Width = _Screen.cmdNextAnak.cmdPrevAnak.cmdTopAnak.Top && posisi atas Left = _Screen.Width && posisi kiri Width = _Screen.PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiAnak() NavigasiAnak("FIRST") ENDPROC ENDDEFINE *-----------------------------------------DEFINE CLASS myCmdPrevAnak As CommandButton Top = _Screen.cmdNextAnak.Top && posisi atas Left = _Screen.Height && tinggi button Caption = "Add" && isi button Visible = . && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiAnak() NavigasiAnak("LAST") ENDPROC ENDDEFINE *----------------------------------------DEFINE CLASS myCmdAddAnak As CommandButton Top = _Screen. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiAnak() NavigasiAnak("NEXT") ENDPROC ENDDEFINE *-------------------------------------------DEFINE CLASS myCmdBottomAnak As CommandButton Top = _Screen.Width && lebar button Height = _Screen. xNamaAnak SELECT AnakTmp && aktifkan tabel AnakTmp * jika jumlah record sudah maksimum.cmdPrevAnak.Width && lebar button Height = _Screen.Height && tinggi button Caption = ">|" && isi button Visible = .cmdTopAnak.Height && tinggi button Caption = ">" && isi button Visible = .cmdTopAnak.cmdBottomAnak.Top && posisi atas Left = _Screen. _Screen. xNomorAnak. maka: 129 .cmdTopAnak.Width && lebar button Height = _Screen.Height && tinggi button Caption = "<" && isi button Visible = . && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * variabel lokal LOCAL xKodeAnak.Left + .cmdBottomAnak. _Screen.cmdPrevAnak.cmdTopAnak. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiAnak() NavigasiAnak("PREV") ENDPROC ENDDEFINE *-----------------------------------------DEFINE CLASS myCmdNextAnak As CommandButton Top = _Screen.Top && posisi atas Left = _Screen.cmdPrevAnak.cmdBottomAnak.cmdNextAnak.Left + .Left + .Left + .cmdNextAnak. _Screen.Width + 25 && lebar Height = _Screen.cmdBottomAnak.T.T. _Screen.cmdPrevAnak.Width && posisi kiri Width = _Screen.

&& aktif .Kode .Value .Value = "" && textbox .grdGridAnak.T.) * aktifkan prosedur ButtonAnak() ButtonAnak(.grdGridAnak.dbf INSERT INTO Anak (Kode.cmdEditAnak. && non-aktif .T.Value && simpan data REPLACE AnakTmp.Enabled = .Enabled = . && non-aktif . WITH . && aktif .) .) * aktifkan prosedur ButtonAnak() ButtonAnak(.cmdEditAnak.Value xNamaAnak = . WITH .Enabled = .txtKodeAnak.dbf APPEND BLANK && tambahkan satu record * isi dengan variabel berikut ini REPLACE AnakTmp.F.Enabled = .txtNomorAnak.F.Enabled = .Value = AnakTmp.cmdAddAnak.Value = .Enabled = .Enabled = .grdGridBapak.T.T.txtNamaAnak.cmdAddAnak.Setfocus CASE .F.Caption = "Save" && Save * variabel sementara xKodeAnak = .txtNomorAnak.) * mengatur button dan textbox .Caption = "Add" && Add * aktifkan prosedur ButtonBapak() ButtonBapak(.txtNamaAnak.Kode .T.Value = AnakTmp. && aktif .Caption = "Save" .KdAnak .IF RECCOUNT() >= nMaxRec * Tampilkan pesan TampilkanRecordMax() ELSE * mengatur form _Screen WITH _Screen DO CASE CASE .T.T.T.grdGridAnak.Enabled = .Value && simpan data GO BOTTOM && menuju record akhir * aktifkan prosedur ButtonBapak() ButtonBapak(. && aktif * kursor berada di filed Nomor .txtNamaAnak. NmAnak) .Value xNomorAnak = .F. WITH .KdAnak .Value = "" && textbox .Caption = "Edit" .Caption = "Cancel" .txtKodeAnak.F.cmdAddAnak.NmAnak .txtNomorAnak.txtNamaAnak.grdGridBapak.txtKodeAnak.Enabled = .txtNomorAnak.txtNomorAnak.Value = AnakTmp. && non-aktif .txtKodeAnak.F.NmAnak . KdAnak.cmdEditAnak.txtNomorAnak. VALUES (xKodeAnak.cmdAddAnak.Value &&simpan data REPLACE AnakTmp.Refresh && grid direfresh ENDCASE ENDWITH ENDIF 130 . && aktif .txtNamaAnak.txtNomorAnak. && aktif . xNomorAnak.Enabled = .txtNamaAnak.txtKodeBapak.Caption = "Add" .Value * perintah SQL-tambah data tabel Anak. xNamaAnak) SELECT AnakTmp && tabel AnakTmp.cmdAddAnak. && non-aktif .

Value && simpan data REPLACE AnakTmp.cmdDelAnak. && non-aktif .Enabled = . WITH .Caption = "Cancel" .) * aktifkan prosedur ButtonAnak() ButtonAnak(.T.Value * perintah SQL-update data tabel Anak.Setfocus CASE . maka: * mengatur form _Screen WITH _Screen DO CASE CASE .txtKodeAnak.Value xNamaAnak = .txtNomorAnak.txtNomorAnak. && aktif * kursor berada di filed Nomor .grdGridAnak.NmAnak .cmdAddAnak.Value = AnakTmp.cmdAddAnak.cmdDelAnak.T.txtNomorAnak.cmdEditAnak.KdAnak .Value = AnakTmp.Enabled = . xNamaAnak SELECT AnakTmp && aktifkan tabel AnakTmp.ENDPROC ENDDEFINE *-----------------------------------------DEFINE CLASS myCmdEditAnak As CommandButton Top = _Screen.F.Value && simpan data * aktifkan prosedur ButtonBapak() ButtonBapak(.Width && lebar button Height = _Screen.txtNomorAnak.Caption = "Del" 131 .cmdEditAnak. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * variabel lokal LOCAL xKodeAnak. .) * mengatur button dan textbox .txtNamaAnak.) * mengatur grid .F.Value xNomorAnak = .txtNamaAnak. && aktif . _Screen. xNomorAnak.F.txtNamaAnak.NmAnak .Enabled = .txtKodeAnak.Top && posisi atas Left = _Screen.T.Left + .cmdDelAnak.cmdAddAnak.dbf REPLACE AnakTmp.Enabled = .Width && posisi kiri Width = _Screen. && aktif .F. && aktif .Enabled = .Caption = "Save" && Save * variabel sementara xKodeAnak = .cmdEditAnak.Enabled = .T. maka: TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi.T.KdAnak .Kode .Caption = "Save" . && non-aktif .Enabled = . && non-aktif .txtNomorAnak.dbf IF RECCOUNT() = 0 && jika file kosong. WITH .Caption = "Edit" .cmdAddAnak.Value = AnakTmp.Caption = "Edit" && Edit * aktifkan prosedur ButtonBapak() ButtonBapak(.F.grdGridBapak.cmdEditAnak.F.) * aktifkan prosedur ButtonAnak() ButtonAnak(.dbf UPDATE Anak SET KdAnak = xNomorAnak.cmdAddAnak.Height && tinggi button Caption = "Edit" && isi button Visible = .cmdEditAnak.txtNamaAnak. NmAnak = xNamaAnak WHERE Kode = xKodeAnak SELECT AnakTmp && tabel AnakTmp.txtKodeAnak.T.

T.Enabled = . _Screen. && non-aktif .Left + .cmdEditAnak. && non-aktif .Value = AnakTmp.Top && posisi atas Left = _Screen.grdGridBapak.Enabled = .KdAnak .txtNomorAnak.txtNomorAnak. maka: * mengatur form _Screen WITH _Screen DO CASE CASE .cmdEditAnak.Value = AnakTmp.F. && grid aktif .T.F.Kode .Kode . && non-aktif .Height && tinggi button Caption = "Del" && isi button Visible = .F. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik SELECT AnakTmp && aktifkan tabel AnakTmp. 4+32+256.txtNomorAnak..grdGridAnak.txtNamaAnak. && grid aktif .txtNomorAnak.F. maka: TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi.F.Enabled = .Value = AnakTmp.txtKodeAnak.NmAnak .txtKodeAnak..Value = AnakTmp.Caption = "Del" && button Del * tampilkan pilihan YES atau NO IF MESSAGEBOX("Anda ingin menghapus record?".cmdDelAnak.dbf IF RECCOUNT() = 0 && jika file kosong.Value = AnakTmp.Enabled = .Enabled = .T.cmdAddAnak.txtNamaAnak.Value = AnakTmp.Enabled = .cmdEditAnak. && non-aktif .KdAnak .grdGridAnak.Caption = "Del" .F.Enabled = .Enabled = .NmAnak .txtNamaAnak.T.Caption = "Edit" .T.grdGridBapak.Width && lebar button Height = _Screen.cmdEditAnak.) * mengatur button dan textbox .txtKodeAnak. && grid aktif . && grid aktif . && non-aktif .txtNamaAnak.Refresh && grid direfresh OTHERWISE * aktifkan prosedur ButtonBapak() ButtonBapak(.Caption = "Add" . && non-aktif .) * aktifkan prosedur ButtonAnak() ButtonAnak(.Refresh && grid direfresh ENDCASE ENDWITH ENDIF ENDPROC ENDDEFINE *----------------------------------------DEFINE CLASS myCmdDelAnak As CommandButton Top = _Screen.Enabled = .T."Konfirmasi") = 6 && pilih YES xRecPos = RECNO() && posisi record SELECT AnakTmp && aktifkan tabel AnakTmp DELETE && hapus record PACK && pastikan record dihapus * jika file kosong.txtKodeAnak.Width && posisi kiri Width = _Screen. maka: IF RECCOUNT() = 0 * Tampilkan pesan TampilkanFileKosong() 132 .grdGridAnak.T.grdGridAnak.cmdDelAnak.cmdEditAnak.cmdEditAnak.Enabled = .

txtNomorAnak. && non-aktif .Header1..cmdDelAnak.Value = Bapak.) * mengatur button.Column2.Value = Bapak.Width && lebar button Height = _Screen. && non-aktif .T.Caption=.txtKodeBapak.cmdDelAnak.Caption=.cmdDelAnak.) * aktifkan prosedur ButtonAnak() ButtonAnak(.Height && tinggi button Caption = "About" && isi button Visible = .Kode ..RecordSource = .grdGridAnak.Width = 50 .cmdDelAnak. "KODE" .grdGridBapak.Column1. "AnakTmp" && isi grid .Enabled = .ColumnCount = 3 .Header1.cmdEditAnak.txtNamaAnak.RecordSourceType=1 .Enabled = .Left + . 2 dan 3 .F.Enabled = .cmdDelAnak.grdGridAnak.F. CHR(13)+"komunitas programer di Indonesia. _Screen.ANAK" .Header1.T.grdGridAnak.T. && grid aktif . textbox dan grid .Column3. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * tampilkan pesan MESSAGEBOX("Program ini disumbangkan kepada"+. && grid aktif .Caption=.grdGridAnak.Caption = "Del" .Width = 50 .Refresh && direfresh ENDIF OTHERWISE * aktifkan prosedur ButtonBapak() ButtonBapak(.cmdDelAnak.grdGridAnak.".0.ELSE && jika file isi.grdGridAnak.txtNamaBapak.."About") 133 . "KD.Top && posisi atas Left = _Screen. CHR(13)+"Semoga bermanfaat.grdGridAnak.grdGridAnak.grdGridAnak.grdGridAnak.Column3.Caption = "Edit" .Width = 180 * judul kolom 1.Nama .T.grdGridAnak..Width && posisi kiri Width = _Screen.Column1.grdGridAnak.Refresh && grid direfresh ENDCASE ENDWITH ENDIF ENDPROC ENDDEFINE *------------------------------------------DEFINE CLASS myCmdAboutAnak As CommandButton Top = _Screen.Enabled = . "NAMA ANAK" .T. maka: * jika posisi record > jumlah record IF xRecPos > RECCOUNT() GO BOTTOM && menuju record akhir ELSE GO xRecPos && menuju posisi record ENDIF ENDIF * aktifkan prosedur TampilkanAnak() TampilkanAnak() * mengatur grid .Column2."+.

dbf tidak ada.Column1.Width && lebar button Height = _Screen.ENDPROC ENDDEFINE *--.Width = 50 && lebar kolom 1 134 .Column2.dbf SELECT * FROM Anak INTO TABLE AnakTmp .dbf .dbf .grdGridAnak.Header1.Header1.T.dbf tidak ada.dbf CREATE TABLE Cucu( KdCucu C(3).dbf USE Bapak ALIAS Bapak EXCLUSIVE IN 0 && tabel Bapak.NmAnak C(30)) ENDIF * periksa. Nama C(30) ) ENDIF * periksa.KdAnak C(3).ColumnCount = 2 && jumlah kolom .RecordSource = "Bapak" && Bapak.RecordSourceType = 1 && alias . mengambil data dari tabel Anak.Width = 50 && lebar kolom 1 .Left + .Caption = TampilkanTanggal() && tanggal .grdGridBapak.grdGridAnak.cmdAboutAnak. jika file Cucu.dbf CREATE TABLE Bapak( Kode C(3).grdGridBapak.T.Column1.dbf") * buat file baru Bapak. maka: IF NOT FILE("Cucu.grdGridBapak.Column1.grdGridBapak.prosedur Start() --PROCEDURE Start CLOSE TABLES ALL && tutup semua tabel * periksa. NmCucu C(30)) ENDIF CLOSE TABLES ALL && tutup semua tabel USE Cucu ALIAS Cucu EXCLUSIVE IN 0 && tabel Cucu.RecordSourceType = 1 && alias .grdGridBapak.Column2.duplikasi dari cmdClose --DEFINE CLASS myCmdCloseAnak As myCmdClose Top = _Screen.Tanggal.Top && posisi atas Left = _Screen.ColumnCount = 3 && jumlah kolom .dbf") * buat file baru Anak.grdGridAnak.Width && posisi kiri Width = _Screen.definisi sub-class dari myCmdClose --*--.dbf CREATE TABLE Anak(Kode C(3).Height && tinggi button Caption = "Close" && isi button FontItalic = .grdGridBapak. maka: IF NOT FILE("Anak.cmdAboutAnak.grdGridAnak. maka: IF NOT FILE("Bapak.Width = 260 && lebar kolom 2 .dbf") * buat file baru Cucu.RecordSource = "AnakTmp" && AnakTmp. && bentuk huruf miring Visible = .cmdAboutAnak.grdGridBapak.Kode && perintah SQL * mengatur from _Screen WITH _Screen .dbf * perintah SQL.cmdAboutAnak. jika file Bapak.dbf tidak ada.dbf USE Anak ALIAS Anak EXCLUSIVE IN 0 && tabel Anak. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * :: ->Scope Resolution Operator * aktifkan prosedur Click dari button myCmdClose myCmdClose::Click ENDPROC ENDDEFINE ****************************** * Kelompok Prosedur-prosedur * ****************************** *--. jika file Anak.Caption = "NAMA" .Caption = "KODE" . WHERE Kode = Bapak. _Screen.cmdAboutAnak.

200" && lebar kolom .ColumnCount = 2 && jumlah kolom .ColumnWidths = "50.grdGridBapak.Header1.txtNomorAnak.Width = 210 && lebar kolom 3 .grdGridAnak.txtNomorAnak.Refresh && grid direfresh .Width = 50 && lebar kolom 2 . maka: DO CASE CASE xPar = "FIRST" * jika posisi di awal record IF RECNO() = 1 TampilkanTopOfFile() && tampilkan pesan ELSE && jika tidak diposisi awal record GoRecord(xPar) && menuju awal record ENDIF CASE xPar = "PREV" * jika posisi di awal record 135 .grdGridAnak.prosedur NavigasiBapak() --PROCEDURE NavigasiBapak PARAMETERS xPar SELECT Bapak && aktifkan tabel Bapak.txtNomorAnak.prosedur Stop() --PROCEDURE Stop RefreshAnakTmp() && aktifkan prosedur RefreshAnakTmp() SELECT Bapak && aktifkan tabel Bapak * jika jumlah record maksimum.grdGridAnak.dbf CLEAR EVENTS && hapus semua event QUIT && selesai.RowSource = "Cucu" && tabel Cucu.Refresh && grid direfresh ENDWITH TampilkanAnak() && aktifkan prosedur TampilkanAnak() TampilkanBapak() && aktifkan prosedur TampilkanBapak() ENDPROC *--.grdGridBapak.grdGridAnak. maka: IF RECCOUNT() > nMaxRec GO (nMaxRec+1) && menuju record nMaxRec + 1 DELETE NEXT RECCOUNT() && hapus beberapa record PACK && pastikan record dihapus dari tabel ENDIF * mengatur form _Screen WITH _Screen .Column3..Column3.RecordSource = "" && kosongkan .Column2.grdGridAnak.RowSourceType = 2 && alias .RecordSource = "" && kosongkan .Header1.txtNomorAnak.grdGridAnak.DisplayCount = 10 && jumlah ditampilkan .DBF && hapus file AnakTmp.Header1.ANAK" . keluar ke Windows ENDPROC *--.Caption = "KODE" .txtNomorAnak.Caption = "NAMA ANAK" .Column2.RowSource = "" && kosongkan ENDWITH CLOSE TABLES ALL && tutup semua tabel DELETE FILE AnakTmp. maka: IF RECCOUNT() > nMaxRec GO (nMaxRec+1) && menuju record nMaxRec + 1 DELETE NEXT RECCOUNT() && hapus beberapa record PACK && pastikan record dihapus dari tabel ENDIF SELECT Cucu && aktifkan tabel Cucu * jika jumlah record maksimum.Caption = "KD. maka: TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi.dbf IF RECCOUNT() = 0 && jika file kosong.Column1.txtNomorAnak.dbf .grdGridAnak.

IF RECNO() = 1 TampilkanTopOfFile() && tampilkan pesan ELSE && jika tidak diposisi awal record GoRecord(xPar) && menuju record sebelumnya ENDIF CASE xPar = "NEXT" * jika posisi di akhir record IF RECNO() = RECCOUNT() TampilkanEndOfFile() && tampilkan pesan ELSE && jika tidak diposisi akhir record GoRecord(xPar) && menuju record berikutnya ENDIF CASE xPar = "LAST" * jika posisi di akhir record IF RECNO() = RECCOUNT() TampilkanEndOfFile() && tampilkan pesan ELSE && jika tidak diposisi akhir record GoRecord(xPar) && menuju akhir record ENDIF ENDCASE RefreshAnakTmp() && aktifkan RefreshAnakTmp() TampilkanAnak() && aktifkan TampilkanAnak() TampilkanBapak() && aktifkan TampilkanBapak() ENDIF ENDPROC *--.dbf IF RECCOUNT() = 0 && jika file kosong. maka: TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi. maka: DO CASE CASE xPar = "FIRST" * jika posisi di awal record IF RECNO() = 1 TampilkanTopOfFile() && tampilkan pesan ELSE && jika tidak diposisi awal record GoRecord(xPar) && menuju awal record ENDIF CASE xPar = "PREV" * jika posisi di awal record IF RECNO() = 1 TampilkanTopOfFile() && tampilkan pesan ELSE && jika tidak diposisi awal record GoRecord(xPar) && menuju record sebelumnya ENDIF CASE xPar = "NEXT" * jika posisi di akhir record IF RECNO() = RECCOUNT() TampilkanEndOfFile() && tampilkan pesan ELSE && jika tidak diposisi akhir record GoRecord(xPar) && menuju record berikutnya ENDIF CASE xPar = "LAST" * jika posisi di akhir record IF RECNO() = RECCOUNT() TampilkanEndOfFile() && tampilkan pesan ELSE && jika tidak diposisi akhir record GoRecord(xPar) && menuju akhir record ENDIF 136 .prosedur NavigasiAnak() --PROCEDURE NavigasiAnak PARAMETERS xPar && menerima kiriman SELECT AnakTmp && aktifkan tabel AnakTmp.

T.Value = "" && isi textbox Nama ELSE .Refresh && grid direfresh ENDWITH ENDPROC *--.Kode && Kode .dbf WITH _Screen IF RECCOUNT() = 0 .Nama && ambil nilai Nama GO ( I + 1 ) && menuju record (I+1) yKode = Bapak.txtNamaBapak.txtNamaAnak.Value = AnakTmp.Value = "" && isi textbox Nomor .prosedur TampilkanAnak() --PROCEDURE TampilkanAnak SELECT AnakTmp && aktifkan tabel AnakTmp.1 ) GO I && menuju record I xKode = Bapak.Value = Bapak.grdGridAnak.txtKodeBapak.Value = RECCOUNT() && TotRec .Value = 0 && isi textbox NoRec .dbf * mengatur form _Screen WITH _Screen IF RECCOUNT() = 0 && jika file kosong.Value = Bapak.txtKodeAnak.Value = "" && isi textbox Kode .txtTotRecAnak.txtNoRecBapak.ENDCASE * aktifkan prosedur TampilkanAnak() TampilkanAnak() ENDIF ENDPROC *--.Value = "" && isi textbox Kode .txtNomorAnak.Value = RECCOUNT() && TotRec .Value = 0 && isi textbox TotRec .Kode && ambil nilai Kode yNama = Bapak.Kode && ambil nilai Kode xNama = Bapak.Nama && ambil nilai Nama IF xKode > yKode 137 . && variabel penanda (switching) * proses pengurutan BUBBLE SORT * untuk jumlah record 1.txtKodeBapak.Value = AnakTmp.dbf N = RECCOUNT() && jumlah record xUrut = .F.Value = 0 && isi textbox NoRec .000 = 00:01:00 DO WHILE xUrut = .txtTotRecAnak.KdAnak && Nomor .Value = "" && isi textbox Nama ELSE .prosedur BapakRefresh() --PROCEDURE BapakRefresh SELECT Bapak && aktifkan tabel Bapak.Kode && Kode .Nama && Nama ENDIF .txtTotRecBapak.txtNoRecAnak.txtNomorAnak.prosedur TampilkanBapak() --PROCEDURE TampilkanBapak SELECT Bapak && aktifkan tabel Bapak. xUrut = .txtNamaAnak.grdGridBapak.txtNoRecBapak.Value = 0 && isi textbox TotRec .Refresh && grid direfresh ENDWITH ENDPROC *--. FOR I = 1 TO ( N .Value = RECNO() && NoRec .NmAnak && Nama ENDIF .txtKodeAnak.txtNamabapak.txtNoRecAnak.Value = AnakTmp. maka: .txtTotRecBapak.F.Value = RECNO() && NoRec .

ANAK" .Kode WITH yKode && simpan yKode REPLACE Bapak.Enabled = xPar && button ON/OFF .grdGridAnak.Enabled = xPar && button ON/OFF ENDWITH ENDPROC 138 .Refresh && grid direfresh ENDWITH TampilkanAnak() && aktifkan prosedur TampilkanAnak() ENDPROC *--.grdGridAnak.cmdNext.RecordSource = "AnakTmp" && AnakTmp .cmdBottom.cmdClose. NmAnak .Enabled = xPar && button ON/OFF .cmdDel.Enabled = xPar && button ON/OFF .grdGridAnak. WHERE Kode = Bapak.grdGridAnak.ColumnCount = 3 && jumlah kolom .Nama WITH xNama && simpan xNama xUrut = .Enabled = xPar && button ON/OFF .GO I && menuju record I REPLACE Bapak.Enabled = xPar && button ON/OFF .prosedur ButtonBapak() --PROCEDURE ButtonBapak PARAMETERS xPar && menerima variabel True/False * mengatur Button True/False WITH _Screen .Header1.cmdAbout.Value = AnakTmp.Column2.Kode . KdAnak.Enabled = xPar && button ON/OFF .Value = AnakTmp.Column1.Column3.Kode && textbox Kode .grdGridAnak. NmAnak) .Nama WITH yNama && simpan yNama GO ( I + 1 ) && menuju record (I+1) REPLACE Bapak.Width = 50 && lebar kolom 1 .Caption = "KD.Caption = "KODE" .Value * mengisi data ke tabel Anak dari tabel AnakTmp INSERT INTO Anak (Kode.txtNamaAnak.Caption = "NAMA ANAK" .Header1. ENDIF NEXT ENDDO ENDPROC *--. KdAnak.F.txtKodeAnak.Width = 70 && lebar kolom 2 . SELECT Kode.cmdPrev.prosedur RefreshAnakTmp() --PROCEDURE RefreshAnakTmp * menghapus data dari tabel Anak DELETE FROM Anak WHERE Kode=_Screen.Enabled = xPar && button ON/OFF .Kode WITH xKode && simpan xKode REPLACE Bapak.Column2.KdAnak && textbox Nomor .txtNomorAnak.grdGridAnak.Enabled = xPar && button ON/OFF .grdGridAnak.Width = 300 && lebar kolom 3 .cmdEdit.Column3.grdGridAnak.grdGridAnak.NmAnak && textbox Nama * memperbaiki grid grdGridAnak .RecordSourceType = 1 && alias .Header1.cmdAdd.Value = AnakTmp. FROM AnakTmp && perintah SQL SELECT Anak && aktifkan tabel Anak PACK && pastikan data terhapus dari tabel Anak * memfilter tabel Anak ke dalam tabel AnakTmp SELECT * FROM Anak INTO TABLE AnakTmp .grdGridAnak.Column1. ORDER BY KdAnak && perintah SQL SELECT AnakTmp && aktifkan tabel AnakTmp * mengatur form _Screen WITH _Screen .cmdTop.txtKodeBapak.

139 .cmdAboutAnak.F.prosedur ButtonAnak() --PROCEDURE ButtonAnak PARAMETERS xPar && menerima variabel True/False * mengatur Button True/False WITH _Screen . Left = 0. . Height = 22. .cmdAddAnak.. . .Enabled = xPar && button ON/OFF . . Top = 0. Top = 10.cmdCucu. Interval = 1000 *--. Name = "Waktu".definisi label myTanggal ---* ADD OBJECT myTanggal AS Label WITH .216) && warna dasar AutoCenter = . FontBold = .T.F. .cmdBottomAnak.Enabled = xPar && button ON/OFF .cmdTopAnak.tambahkan label myJudul --ADD OBJECT lblMyJudul AS Label WITH . && tombol maksimum non-aktif ShowTips = . && form di tengah ControlBox = .T.Enabled = xPar && button ON/OFF . Caption = "TABEL CUCU".Enabled = xPar && button ON/OFF ENDWITH ENDPROC ************************************** * mendefinisikan form 'myFrmKusForm' * ************************************** DEFINE CLASS myFrmKusForm AS form Name = "frmKusForm" && nama form Caption = "Tabel Cucu" && judul form Top = 0 && posisi atas Left = 0 && posisi kiri Width = 370 && lebar form Height = 250 && tinggi form BorderStyle = 2 && border style BackColor = RGB(236.Enabled = xPar && button ON/OFF .T. ForeColor = RGB(0.*--. Visible = . && button close dihilangkan Movable = .Enabled = xPar && button ON/OFF . .233.F.T.cmdDelAnak.definisi timer myWaktu ---* ADD OBJECT myWaktu AS Timer WITH .Enabled = xPar && button ON/OFF .0.cmdEditAnak. .cmdPrevAnak.Enabled = xPar . && tombol minimum non-aktif MaxButton = . Width = 100. *--.T. && tampilkan tips pendek WindowType = 1 && window type ***************************************************** * mengisi objek ke dalam form dengan cara yang lain * * mengisi objek beserta atributnya ke dalam form * ***************************************************** *--. FontName = "Arial". . . && bisa dipindahkan MinButton = . FontSize = 10. && button controbox dihilangkan Closable = .cmdNextAnak. .Enabled = xPar && button ON/OFF .Enabled = xPar && button ON/OFF .0). Left = 10.cmdCloseAnak.F. .

T.F. . . .0. . Enabled = . . . . . FontSize = 9. . . Left = 100. Height = 20. Height = 24. Width = 50. MaxLength = 5. Width = 70. Left = 175. . Left = 290. *--. Caption = "". Top = 10. .224.224). . Enabled = . *--. . Width = 50. . Name = "txtNoRec". . Alignment = 1. . *--. Width = 185. .T.:". .T. . DisabledForeColor = RGB(255. ForeColor = RGB(0. .224).T. Visible = . Visible = . .0. Name = "Tanggal". DisabledForeColor = RGB(255.Rec.definisi label myJam ---* ADD OBJECT myJam AS Label WITH . .0). MaxLength = 5. Height = 20..0).224. DisabledBackColor = RGB(224. Value = 0. Top = 35. . FontSize = 9. . . .0). Left = 235. . *--. . Name = "Jam". 140 . . FontName = "Arial". DisabledBackColor = RGB(224. . FontName = "Arial". FontSize = 10. Visible = . . Width = 50. FontName = "Arial".tambahkan textbox myTotRec --ADD OBJECT txtMyTotRec AS TextBox WITH .F. Value = 0. . Visible = .tambahkan textbox myNoRec --ADD OBJECT txtMyNoRec AS TextBox WITH . Caption = TIME(). FontName = "Arial". FontName = "Arial". .tambahkan label myNoRec --ADD OBJECT lblMyNoRec AS Label WITH . .T. . . Height = 24..0. . . . . Left = 290. . . . Visible = . Name = "txtTotRec". Alignment = 1. . Top = 35. . . Height = 20.Top = 10. Caption = "No. Top = 35. .

. . ForeColor = RGB(0. Left = 70. Visible = .*--. Left = 10.0). . Left = 60. .T.255). Height = 20 Visible = . FontName = "Arial". ForeColor = RGB(0. Top = 60. .tambahkan textbox txtMyKodeCucu --ADD OBJECT txtMyKodeCucu AS TextBox WITH . Height = 24. .224. . ForeColor = RGB(0. Width = 10. Format = "999". DisabledBackColor = RGB(224. Width = 10. Visible = . . .T.224). Caption = ":".tambahkan textbox txtMyNamaCucu --- 141 . . FontSize = 9. *--. . . . . FontSize = 10.T. Top = 35. . Height = 20. . . Top = 60. . *--. .0). Kode".255).tambahkan label myNamaCucu --ADD OBJECT lblMyNamaCucu AS Label WITH . . . FontName = "Arial". . . . FontSize = 10. . InputMask = "999". Value = "". . . . Left = 60.0). *--. Caption = "2. FontName = "Arial".0. *--. FontSize = 10. .tambahkan label myTitik01 --ADD OBJECT lblMyTitik01 AS Label WITH . .0). Height = 20. . . ForeColor = RGB(0. Caption = "1.0. . FontName = "Arial". Visible = .T. Top = 35. ForeColor = RGB(0.0. Width = 60. DisabledForeColor = RGB(0.T. Name = "txtKodeCucu". FontName = "Arial". Width = 50.0.0. Left = 10.tambahkan label myTitik02 --ADD OBJECT lblMyTitik02 AS Label WITH .0. . Visible = . Top = 35. . FontSize = 10. *--. . . . Width = 50. . Caption = ":". Nama". . .tambahkan label myKodeCucu --ADD OBJECT lblMyKodeCucu AS Label WITH . . . . Height = 20.

.255). 142 . . DisabledForeColor = RGB(0. Visible = . Visible = .tambahkan grid grdMyGrid --ADD OBJECT grdMyGrid AS grid WITH .224). .F. . . Width = 270. . . Name = "grdGrid". RecordSourceType = 1. . . . *--. SplitBar = .0.T. . . SelectedItemBackColor = RGB(128.. . . . ForeColor = RGB(0. Top = 215.0. FontName = "Arial". RecordSource = "Cucu".tambahkan command button cmdMyFisrt --ADD OBJECT cmdMyFIRST AS COMMANDBUTTON WITH . . ToolTipText = "Record Awal". .224. . . ForeColor = RGB(0. Height = 25. Value = "". . FontName = "Arial". .0). HighlightBackColor = RGB(224. Width = 25. Left = 70.255). *--. DisabledBackColor = RGB(224..255). Name = "cmdFIRST". MaxLength = 30. Height = 130. . . HighlightForeColor = RGB(0. .T. .F.224.T. SelectedItemForeColor = RGB(0. FontSize = 9. . Caption = "<". Top = 85.255. .ADD OBJECT txtMyNamaCucu AS TextBox WITH . .0. DeleteMark = . . Left = 10. . . .128).tambahkan command button cmdMyPrev --ADD OBJECT cmdMyPREV AS COMMANDBUTTON WITH . FontSize = 9.224). Name = "cmdPREV". HighlightStyle = 2. Height = 25. . . ColumnCount = 2. . .F. . ForeColor = RGB(0.T. . Top = 215. . FontName = "Arial".. Left = 35. .0. Name = "txtNamaCucu". . FontSize = 9. . *--. . .F. . Height = 24. . AllowHeaderSizing = . Width = 25. FontName = "Arial". Caption = "|<".0). Left = 10... Visible = . ReadOnly = . Width = 350.255). AllowAutoColumnFit = 2. .0. Top = 60. .0. . TabStop = . . .

. FontSize = 9.0. . FontName = "Arial".T.0). ToolTipText = "Record Sebelumnya".0.tambahkan command button cmdMyDelete --ADD OBJECT cmdMyDELETE AS COMMANDBUTTON WITH . Visible = .T. . Caption = "Edit". Visible = .T. . ForeColor = RGB(0. . . . . . Left = 60. .T.0). Name = "cmdLAST". Left = 110. ToolTipText = "Ubah Data". Left = 170. . *--. . . FontName = "Arial". . . *--. . .0. . Top = 215. *--.0. . FontSize = 9. *--. FontName = "Arial". Height = 25.tambahkan command button cmdMyEdit --ADD OBJECT cmdMyEDIT AS COMMANDBUTTON WITH . Left = 85.0. . ForeColor = RGB(0. Width = 60.T. Name = "cmdDELETE". Name = "cmdEDIT". Top = 215. .FontSize = 9. Height = 25. . ForeColor = RGB(0. . *--. .tambahkan command button cmdMyAdd --ADD OBJECT cmdMyADD AS COMMANDBUTTON WITH . Name = "cmdNEXT". . Caption = ">|". . ToolTipText = "Tambah Data". . Caption = "Del". . Name = "cmdADD". Width = 25.0). . FontName = "Arial". . Height = 25.0). . . . 143 . . Visible = . FontName = "Arial". Top = 215. ToolTipText = "Record Berikutnya". ForeColor = RGB(0. ToolTipText = "Record Akhir".tambahkan command button cmdMyNext --ADD OBJECT cmdMyNEXT AS COMMANDBUTTON WITH . FontSize = 9. . Top = 215. Visible = . . FontSize = 9. . Height = 25. . Visible = . Width = 60. Width = 25. Caption = ">". . . . ForeColor = RGB(0.tambahkan command button cmdMyLast --ADD OBJECT cmdMyLAST AS COMMANDBUTTON WITH . . . .0). . Caption = "Add". .

****************************** * definisi prosedur-prosedur * ****************************** *--. *--.Timer * label Jam diisi jam 00:00:00 ThisForm.Header1. FontName = "Arial".Caption = "NAMA CUCU" ENDWITH ENDPROC *--.Caption = TampilkanTanggal() * mengatur grid WITH Thisform. FontSize = 9.0.) * aktifkan prosedur TampilkanData() .AfterRowColChange --PROCEDURE grdGrid. Left = 230.0).Width = 260 && lebar kolom 2 . Caption = "CLOSE". Visible = . Name = "cmdCLOSE".TampilkanData() ENDPROC *--. .T.SetField(.0. . Top = 215.FontSize = 9. Visible = .T. . . Left = 290.AfterRowColChange * parameter ini harus ada. ToolTipText = "Hapus Data".TampilkanData() ENDWITH ENDPROC *--. .. .Header1.T.tambahkan command button cmdMyClose --ADD OBJECT cmdMyCLOSE AS COMMANDBUTTON WITH .prosedur Activate --PROCEDURE Activate && jika form diaktifkan WITH ThisForm * aktifkan prosedur SetField() . . Top = 215. . CANCEL = .prosedur Timer --PROCEDURE Waktu.Width = 50 && lebar kolom 1 .ReadOnly = . . .0).prosedur Init --PROCEDURE Init && persiapan jika form akan diaktifkan * isi label Tanggal ThisForm. .Tanggal.F.T. Height = 25.MouseMove && jika ada pergerakan mouse 144 .Column1. . .MouseMove --PROCEDURE grdGrid. . ToolTipText = "Tutup Form".Caption = TIME() ENDPROC *--. ForeColor = RGB(0.grdGrid . .Column2. Width = 60. ForeColor = RGB(0.Column2.Column1. .Jam. .prosedur grsGrid. . Width = 60.Caption = "KODE" .prosedur grdGrid. && isi grid tidak bisa diubah . Height = 25. tidak digunakan LPARAMETERS nColIndex * aktifkan prosedur TampilkanData() ThisForm.

Click --PROCEDURE cmdFIRST.txtKodeCucu.prosedur cmdPREV.Caption = "Save" && cmdADD .prosedur cmdNEXT.T.T. maka: * menuju posisi record sekarang GO nRecPos * Tampilkan pesan TampilkanKodeSama() * kursor berada di field Kode .ToolTipText = "Simpan Data" .Click --PROCEDURE cmdNEXT.cmdADD.cmdEDIT.SetFocus ELSE && jika tidak ditemukan.Refresh && grid direfresh .) && aktifkan SetField() .NavigasiCucu("PREV") ENDPROC *--.* Paramater ini harus ada LPARAMETERS nDirection.Value IF FOUND() && jika ditemukan.cmdADD.txtKodeCucu.SetField(.Enabled = .) && TampilkanField() .grdGrid.TampilkanField(.txtKodeCucu.T.SetFocus ELSE nRecPos = RECNO() && record sekarang * cari Kode Cucu LOCATE FOR KdCucu = .prosedur cmdLAST.prosedur cmdADD.Caption = "Cancel" && cmdEDIT .Caption = "Add" && button "ADD" .F.DoScroll && aktifkan fungsi scroll ENDPROC *--.Enabled = .F.Click && jika button Next diklik ThisForm.Click && jika button Add diklik SELECT Cucu && aktifkan tabel Cucu.NavigasiCucu("FIRST") ENDPROC *--. nYCoord ThisForm.SetFocus ELSE && jika judul button "SAVE" IF EMPTY(.grdGrid.Click && jika button Prev diklik ThisForm.) && aktifkan SetButton() .) && aktifkan SetGrid() .dbf * jika jumlah record sudah maksimal.ToolTipText = "Batal" * kursor berada di field Kode .SetGrid(.cmdEDIT.Click --PROCEDURE cmdPREV. nXCoord.SetButton(.cmdEDIT.txtKodeCucu.Click && jika button First diklik ThisForm.NavigasiCucu("NEXT") ENDPROC *--. && cmdADD aktif .Click --PROCEDURE cmdADD.Click --PROCEDURE cmdLAST.cmdADD.F.Value) * Tampilkan pesan TampilkanKodeKosong() * kursor berada di field Kode .cmdADD.Click && jika button Last diklik ThisForm. && cmdEDIT aktif .txtKodeCucu. maka: 145 .NavigasiCucu("LAST") ENDPROC *--. nShift.prosedur cmdFIRST. maka: IF RECCOUNT() >= 1000 TampilkanRecordMax() && tampilkan pesan ELSE * mengatur form WITH ThisForm IF .

SetField(.prosedur cmdEDIT.grdGrid.TampilkanData() OTHERWISE && isi button "Cancel" . && button aktif .Caption = "Edit" .SetGrid(.cmdEDIT.txtKodeCucu.) && aktifkan SetButton() .) && aktifkan SetButton() .ToolTipText = "Ubah Data" .Caption = "Edit" .) && aktifkan SetField() .cmdDELETE.SetFocus CASE .cmdEDIT.SetButton(.F.ToolTipText = "Ubah Data" .) .ToolTipText = "Hapus Data" .Refresh && grid direfresh .T.) && aktifkan SetGrid() .grdGrid.Enabled = .TampilkanData() ELSE && jika file isi.SetField(.ToolTipText="Ubah Data" GO BOTTOM && menuju record akhir * aktifkan prosedur TampilkanData() .cmdEDIT.Click && jika button cmdEDIT diklik SELECT Cucu && aktifkan tabel Cucu.F.Enabled = ..dbf IF RECCOUNT() = 0 && jika file kosong.APPEND BLANK && tambahkan record .T.ToolTipText="Tambah Data" .) && SetButton() .T.T.SetButton(.F.TampilkanField(.T.SimpanData() .cmdEDIT.cmdEDIT.SetGrid(..Caption = "Add" .F.file kosong!") * aktifkan prosedur TampilkanData() ThisForm.) && aktifkan SetField() * aktifkan prosedur TampilkanField() ..cmdEDIT.) && aktifkan SetField() 146 .) && aktifkan SetGrid() .cmdADD.cmdEDIT. && button aktif .cmdDELETE.T.Caption = "Save" && "Save" .Click --PROCEDURE cmdEDIT.cmdDELETE.) && SetGrid() .TampilkanData() ENDIF ENDIF ENDIF ENDWITH ENDIF ENDPROC *--.cmdEDIT.) && aktifkan SetGrid() .SetField(.T.T..SetGrid(.) && aktifkan SetButton() .Caption = "Save" && cmdEDIT .ToolTipText = "Hapus Data" * aktifkan prosedur TampilkanData() . maka: * Tampilkan pesan TampilkanSorry("SORRY.SetField(.Caption = "Cancel" && cmdDELETE .cmdADD.cmdEDIT.cmdDELETE.Refresh && direfresh .SetButton(.SetGrid(.Refresh && grid direfresh .SetButton(.grdGrid.T.cmdDELETE.T.SimpanData() && SimpanData() .Caption = "Edit" && "Edit" . maka: * mengatur form WITH ThisForm DO CASE CASE .Caption = "Del" .F.) && SetField() .

cmdEDIT.Caption = "Del" && button Delete .xRecPosisi) &&posisi record ENDIF ENDIF IF RECCOUNT() = 0 && jika file kosong * Tampilkan pesan TampilkanSorry("SORRY..T...Click --PROCEDURE cmdCLOSE.grdGrid.Caption = "Add" .cmdADD..SetField(.) && aktifkan SetButton() .cmdEDIT.yKode..cmdEDIT.Click && jika button cmdCLOSE diklik * variabel lokal LOCAL I.Caption = "Edit" && button Edit .xKode..SetGrid(.Refresh && grdGrid direfresh .cmdADD.N.TampilkanData() ELSE * simpan posisi record sekarang xRecPosisi = RECNO() IF ThisForm.cmdDELETE.cmdDELETE. 4+32+256.Caption = "Del" .Click SELECT Cucu && aktifkan tabel Cucu IF RECCOUNT() = 0 && jika file kosong * Tampilkan pesan TampilkanSorry("SORRY.SetButton(.Caption = "Edit" .F..TampilkanData() && aktifkan TampilkanData() ENDWITH ENDIF ENDPROC *--.yNama ******************************** * proses pengurutan BUBLE SORT * * berdasarkan Kode .xUrut."Konfirmasi") = 6 && pilih YES DELETE && hapus record PACK && pastikan record dihapus dari tabel * posisi record sekarang xRecPosisi=IIF(xRecPosisi >= RECCOUNT().cmdDELETE.xNama..cmdDELETE.Click --PROCEDURE cmdDELETE..Refresh && grid direfresh .prosedur cmdCLOSE.GridRefresh() && aktifkan GridRefresh() .file kosong!") * aktifkan prosedur TampilkanData() ThisForm.TampilkanData() ENDCASE ENDWITH ENDIF ENDPROC *--.cmdDELETE.prosedur cmdDELETE.T.ToolTipText = "Hapus Data" * aktifkan prosedur TampilkanData() ..ToolTipText = "Tambah Data" .grdGrid.Ascending * 147 .) && aktifkan SetField() .file kosong!") ELSE && jika file isi GO xRecPosisi && menuju record xrecPosisi ENDIF WITH ThisForm && mengatur _SCREEN .ToolTipText = "Ubah Data" && tips .ToolTipText = "Ubah Data" . RECCOUNT()..cmdEDIT.Caption = "Del" IF MESSAGEBOX("Anda ingin menghapus data ini?".) && aktifkan SetGrid() .ToolTipText = "Hapus Data" && tips .

cmdFIRST.RecordSourceType = 1 && alias tabel * lebar kolom .Enabled = xPar && cmdFirst ON/OFF .cmdCLOSE.Enabled = xPar && cmdAdd ON/OFF .cmdDELETE.Enabled = xPar && cmdLast ON/OFF .Width = 260 && lebar kolom 2 * judul kolom . && lakukan selama belum urut xUrut = .grdGrid.prosedur GridRefresh --PROCEDURE GridRefresh * mengatur Grid WITH ThisForm.KdCucu WITH yKode && yKode REPLACE Cucu.prosedur SetButton --PROCEDURE SetButton PARAMETERS xPar && menerima kiriman variabel * mengatur button (ON/OFF) WITH ThisForm .cmdEDIT.F.F.Column2.NmCucu && ambil nilai Nama GO (I+1) && menuju record (I+1) yKode = Cucu.NmCucu WITH yNama && yNama GO (I+1) && menuju record (I+1) REPLACE Cucu.T. && belum urut ENDIF NEXT ENDDO thisform.cmdLAST.RecordSource = "" && grid kosong thisform.Caption = "KODE" .dbf . && sudah urut FOR I = 1 TO (N-1) GO I && menuju record I xKode = Cucu.T.NmCucu WITH xNama && xNama xUrut = . maka: GO I && menuju record I REPLACE Cucu.KdCucu && ambil nilai Kode xNama = Cucu.Enabled = xPar && cmdClose ON/OFF ENDWITH ENDPROC *--.Header1.cmdPREV.******************************** SELECT Cucu && aktifkan tabel Cucu N = RECCOUNT() && variabel jumlah record xUrut = .release && form dihapus ENDPROC *--.KdCucu WITH xKode && xKode REPLACE Cucu.RecordSource = "Cucu" && tabel Cucu.KdCucu && ambil nilai Kode yNama = Cucu.prosedur SetField --PROCEDURE SetField PARAMETERS xPar && menerima kiriman variabel * mengatur field 148 .Column1.F.cmdADD. && isi grid tidak bisa diubah .Column2.Column1.NmCucu && ambil nilai Nama IF xKode > yKode && jika dipenuhi.Header1.Width = 50 && lebar kolom 1 .Enabled = xPar && cmdDel ON/OFF .Enabled = xPar && cmdPrev ON/OFF .Caption = "NAMA CUCU" ENDWITH ENDPROC *--. && variabel tanda (flag/switch) DO WHILE xUrut = .Enabled = xPar && cmdNext ON/OFF .grdGrid .Enabled = xPar && cmdEdit ON/OFF .cmdNEXT.ReadOnly = .

txtKodeCucu.txtNamaCucu.txtTotRec.prosedur SetGrid --PROCEDURE SetGrid PARAMETERS xPar && menerima kiriman variabel * mengatur grid True/False ThisForm.txtNoRec.) ENDIF ThisForm.TampilkanField(.dbf * mengatur form WITH ThisForm IF xPar = .Value FLUSH && pastikan data tersimpan ENDPROC *--.grdGrid.T.txtKodeCucu.prosedur TampilkanField --PROCEDURE TampilkanField PARAMETERS xPar && menerima kiriman variabel SELECT Cucu && aktifkan tabel Cucu. maka: * Tampilkan pesan TampilkanSorry("SORRY.KdCucu && isi textbox .txtKodeCucu.NmCucu && isi textbox ELSE && jika False.NmCucu WITH ThisForm.file kosong!") ELSE && jika file isi. maka: * tampilkan field kosong ThisForm.Enabled = xPar && NamaCucu ON/OFF ENDWITH ENDPROC *--.F..Value = "" && isi textbox kosong .Value=RECCOUNT() && isi textbox .WITH ThisForm . maka: .dbf IF RECCOUNT() = 0 && jika file kosong.Value = RECCOUNT() && isi textbox .Value REPLACE Cucu.Enabled = xPar && KodeCucu ON/OFF .Value = RECCOUNT() && isi textbox .txtNamaCucu.T.prosedur NavigasiCucu --PROCEDURE NavigasiCucu PARAMETERS xPar && menerima kiriman variabel SELECT Cucu && aktifkan tabel Cucu.Enabled = xPar && grid ON/OFF ENDPROC *--.txtNoRec.txtNamaCucu..) ELSE * tampilkan field isi ThisForm.txtTotRec.Value =RECNO() && isi textbox .txtNamaCucu.. maka: DO CASE CASE xPar = "FIRST" * jika posisi di awal record IF RECNO() = 1 149 .KdCucu WITH ThisForm.dbf REPLACE Cucu.grdGrid.TampilkanField(. && jika True.Value=Cucu. maka: .Value = "" && isi textbox kosong ENDIF ENDWITH ENDPROC *--..prosedur SimpanData --PROCEDURE SimpanData SELECT Cucu && aktifkan tabel Cucu * simpan data ke dalam tabel Cucu.Value=Cucu.txtKodeCucu.Refresh && grid di-refresh ENDPROC *--.prosedur TampilkanData --PROCEDURE TampilkanData IF RECCOUNT() = 0 && jika file kosong.

.0+64..file kosong!") ENDPROC *--.end of file!") ENDPROC *--.TampilkanTopOfFile() && tampilkan pesan ELSE && jika tidak diposisi awal record GoRecord(xPar) && menuju awal record ENDIF CASE xPar = "PREV" * jika posisi di awal record IF RECNO() = 1 TampilkanTopOfFile() && tampilkan pesan ELSE && jika tidak diposisi awal record GoRecord(xPar) && menuju record sebelumnya ENDIF CASE xPar = "NEXT" * jika posisi di akhir record IF RECNO() = RECCOUNT() TampilkanEndOfFile() && tampilkan pesan ELSE && jika tidak diposisi akhir record GoRecord(xPar) && menuju record berikutnya ENDIF CASE xPar = "LAST" * jika posisi di akhir record IF RECNO() = RECCOUNT() TampilkanEndOfFile() && tampilkan pesan ELSE && jika tidak diposisi akhir record GoRecord(xPar) && menuju akhir record ENDIF ENDCASE * aktifkan prosedur TampilkanData() ThisForm.prosedur TampilkanFileKosong --PROCEDURE TampilkanFileKosong * Tampilkan pesan TampilkanSorry("SORRY.prosedur TampilkanSorry --PROCEDURE TampilkanSorry PARAMETERS xPar && menerima kiriman variabel MESSAGEBOX(xPar.prosedur TampilkanTopOfFile --PROCEDURE TampilkanTopOfFile * Tampilkan pesan TampilkanSorry("SORRY.....top of file!") ENDPROC *--...prosedur TampilkanEndOfFile --PROCEDURE TampilkanEndOfFile * Tampilkan pesan TampilkanSorry("SORRY...prosedur TampilkanKodeKosong --PROCEDURE TampilkanKodeKosong * Tampilkan pesan TampilkanSorry("SORRY..TampilkanData() ENDIF ENDPROC ENDDEFINE ********************************** * definisi prosedur di luar form * ********************************** *--..Kode kosong!") ENDPROC *--.prosedur TampilkanKodeSama --PROCEDURE TampilkanKodeSama 150 ....."SORRY") && tampilkan pesan ENDPROC *--.

prosedur TampilkanTanggal ---* FUNCTION TampilkanTanggal * variabel lokal LOCAL cRet. ". bulan dan tahun cRet = NamaHari(DOW(DATE()))+" ..* Tampilkan pesan TampilkanSorry("SORRY.5)+1))+ ....4) 151 .Kode sama!") ENDPROC *--.NamaBulan(12) * Nama-nama hari NamaHari(1) = "Minggu" NamaHari(2) = "Senin" NamaHari(3) = "Selasa" NamaHari(4) = "Rabu" NamaHari(5) = "Kamis" NamaHari(6) = "Jum'at" NamaHari(7) = "Sabtu" * Nama-nama pasaran NamaPasar(1) = "Pahing" NamaPasar(2) = "Pon" NamaPasar(3) = "Wage" NamaPasar(4) = "Kliwon" NamaPasar(5) = "Legi" * Nama-nama bulan NamaBulan(1) = "Januari" NamaBulan(2) = "Februari" NamaBulan(3) = "Maret" NamaBulan(4) = "April" NamaBulan(5) = "Mei" NamaBulan(6) = "Juni" NamaBulan(7) = "Juli" NamaBulan(8) = "Agustus" NamaBulan(9) = "September" NamaBulan(10)= "Oktober" NamaBulan(11)= "Nopember" NamaBulan(12)= "Desember" * nama hari dan pasar. "+ALLTRIM(STR(DAY(DATE())))+" "+ . NamaPasar((MOD((DATE()-CTOD("01/01/1900"))."+ . NamaBulan(MONTH(DATE()))+" "+ .NamaPasar(5)..prosedur GoRecord --PROCEDURE GoRecord PARAMETERS xPar && menerima kiriman variabel DO CASE CASE xPar = "FIRST" && button First GO TOP && menuju record awal CASE xPar = "PREV" && button Prev SKIP -1 && menuju record sebelumnya CASE xPar = "NEXT" && button Next SKIP && menuju record berikutnya CASE xPar = "LAST" && button Last GO BOTTOM && menuju record akhir OTHERWISE && button lainnya GO xRecPosisi && menuju record sekarang ENDCASE ENDPROC *--. STR(YEAR(DATE())..prosedur TampilkanRecordMax --PROCEDURE TampilkanRecordMax * Tampilkan pesan TampilkanSorry("SORRY.. tanggal.NamaHari(7).maksimum record 1.000!") ENDPROC *--..

Hasilnya pasti memuaskan! 152 .RETURN (cRet) && mengembalikan nilai tanggal sekarang ENDFUNC * End of procedure Ketik program di atas.prg dari CD pendamping buku ini. simpan dengan nama BapakAnak.prg atau copy file BapakAnak. kemudian jalankan di dalam lingkungan Visual FoxPro.

Do Do pilih OK.EXE). pilih JamAnalog (file PRG) Dari jendela Command. berarti Anda harus membuat file Executable (.KOMPILASI PROGRAM Untuk menjalankan program-program di atas ada dua cara. pilih Program <NamaProgram> OK Contoh: Program atau. 153 . Di dalam lingkungan Visual FoxPro: Dari menu Visual FoxPro. Di luar lingkungan Visual FoxPro: Jika Anda ingin menjalankannya di luar lingkungan Visual FoxPro. ketik: DO <NamaProgram> Contoh: DO JamAnalog (file PRG) 2. yaitu: 1.

caranya.2 Tampilan jendela Create New File 154 . pilih File seperti berikut ini.Buat file project. New.1 Tampilan jendela New File Pilih Project New file. JamAnalog Gambar 8. akan tampil jendela New New file Gambar 8. akan tampil jendela seperti berikut ini.

prg) OK Pilih Build. kemudian klik OK. pilih: Win32 executable/COM server (exe). Display Errors.4 Tampilan jendela Build Options 155 . pilih file PRG Anda (JamAnalog.Ketik nama project. akan muncul jendela Build Options. akan muncul jendela Project Manager seperti gambar berikut ini. OK Gambar 8. Code Add Build Gambar 8. Recompile All files. misalnya JamAnalog Save.3 Tampilan jendela Project Manager Pilih tab Code • • • Add.

Visual FoxPro sedang membuat file Hasilnya file JamAnalog.Tunggu sebentar JamAnalog.exe siap digunakan dan didistribusikan! Jangan lupa menyertakan file-file Run-Time. Daftar file Run-Time dapat dilihat dalam fasilitas Help Visual FoxPro.. 156 .exe. ….

kita akan semakin terampil dan pasti menjadi programmer yang andal dan profesional. yang membatasi hanya minat dan kemampuan kita untuk berkreasi. Lima program yang dibahas dalam buku ini hanya contoh kecil dari kompleksitas dalam bidang pemrograman. Seperti kata pepatah ‘to hear to forget. khususnya Visual FoxPro. Anda dapat 157 . Semakin sering kita melakukan latihan dan membuat program. Meskipun penulis sudah mencoba menjelaskan materi dalam buku ini dengan jelas.PENUTUP Dunia pemrograman pada umumnya ‘hampir tanpa batas’. namun penulis menyadari bahwa masih banyak kekurangan di sana-sini. terbuka kesempatan bagi kita untuk mengembangkan ide dan kreativitas. Harapan penulis buku ini dapat menjadi inspirasi dan merupakan langkah awal untuk dapat meningkatkan pengetahuan dalam dunia pemrograman. Fasilitas HELP Visual FoxPro selalu siap membantu apabila Anda berada dalam kesulitan. to do to understand’ (Confusius). to see to remember. tentunya masih perlu untuk dikembangkan lebih lanjut.

Anda dapat berkonsultasi langsung dengan mengirimkan email ke alamat penulis berikut ini.menggunakannya setiap saat dalam menyelesaikan pemrograman di lingkungan Visual FoxPro. Email: kusmijanto2003@yahoo. masalah Jika Anda masih mengalami kesulitan dalam mempelajari buku ini.com 158 .

You're Reading a Free Preview

Mengunduh
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->