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

DELETE.dbf * * menggunakan perintah reguler tabel * * (USE.REPLACE. ****************************************************** * Nama Program : TabelKu.APPEND.2 Flowchart program aplikasi TabelKu 6.PACK) * * .prg * * Keterangan : menggunakan program aplikasi (CODE) * * menangani 1(satu) tabel TabelKu.* ****************************************************** *--.Set Environtment ---* SET TALK OFF SET STATUS OFF 81 .single user version (exclusive) .3 Kode Program Berikut ini listing kode program TabelKu.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.

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

&& label tampil ENDDEFINE *--.) && aktifkan prosedur SetField() SetButton(.AddObject("cmdLast"."myGrdGrid") && grid myGrid * tambahkan objek Command Button . "myTxtKode") && Kode .) && aktifkan prosedur TampilkanData() READ EVENTS && proses semua event RETURN && selesai ***************************************** * definisi objek timer.AddObject("cmdNext".BackColor && warna dasar Visible = .AddObject("optJenKel".AddObject("cmdEdit".AddObject("cmdSort".Jam. label. "myNext") && button Next .AddObject("myGrid".AddObject("txtNama". "myTxtKota") && Kota . "myFirst") && button First .AddObject("cmdFirst".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.T.Caption = TIME() ENDPROC ENDDEFINE *--.) && aktifkan prosedur SetButton() GridRefresh() && aktifkan prosedur GridRefresh() TampilkanData(.F.AddObject("cmdPrev".definisi label myJam ---* DEFINE CLASS myJam AS Label Top = 10 && posisi atas 83 . "myLast") && button Last .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.AddObject("txtTotRec".AddObject("cmdAbout".AddObject("txtAlamat". "myEdit") && button Edit . "myTxtNama") && Nama .Show ENDWITH Start() && aktifkan prosedur Start() SetField(. textbox.T.AddObject("cmdAdd". "myTxtAlamat") && Alamat .AddObject("txtKode".AddObject("txtKodePos".AddObject("cmdDelete"."myTxtKodePos") && Kode Pos * tambahkan objek Grid .AddObject("txtKota".. "mySort") && button Sort .T. "myClose") && button Close * tampilkan form _SCREEN . "myAdd") && button Add ."myDelete") && button Delete . * * optiongroup dan command button * ***************************************** *--. "myPrev") && button Previous ."myTotRec") && Total Record * tambahkan objek TextBox .AddObject("cmdClose". "myOptJenKel") && Jenis Kelamin . "myAbout") && button About .

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

0) && warna huruf BackColor = _Screen.224) && warna non-aktif ButtonCount = 2 && 2 pilihan Laki-laki atau Perempuan Enabled = .0. && tampil di layar monitor 88 .255.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 huruf BackColor = RGB(255.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.255) && warna dasar DisabledForeColor = RGB(0.T.T.224.255) && warna huruf BackColor = RGB(255. && optiongroup di-aktifkan Visible = .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.BackColor && warna dasar Visible = .255) && warna non-aktif DisabledBackColor = RGB(224.224) && warna non-aktif MaxLength = 5 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .255. && tampil di layar monitor ENDDEFINE *--.255) && warna huruf BackColor = RGB(255.255.255) && warna non-aktif DisabledBackColor = RGB(224.0.T.ENDDEFINE *--.0. && tampil di layar monitor ENDDEFINE *--. && tampil dilayar monitor ENDDEFINE *--.255) && warna dasar DisabledForeColor = RGB(0.T.255) && warna dasar DisabledForeColor = RGB(0.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) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .0.224.255) && warna non-aktif DisabledBackColor = RGB(224.224.T.0.0.0.

T.255) && warna dasar DisabledForeColor = RGB(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.255) && warna huruf SplitBar = .0.255) && warna non-aktif DisabledBackColor = RGB(224.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 dasar DisabledForeColor = RGB(0.224) && warna non-aktif MaxLength = 5 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = . && tampil di layar monitor ENDDEFINE *--.255.0.255) && warna huruf BackColor = RGB(255.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.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .224.255) && warna huruf BackColor = RGB(255.F.255) && warna huruf BackColor = RGB(255.T.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.0.0.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .0.0.255) && warna non-aktif DisabledBackColor = RGB(224. && tampil di layar monitor ENDDEFINE *--.ENDDEFINE *--.0.255) && warna non-aktif DisabledBackColor = RGB(224. && splitbar di-non-aktifkan * tambahkan prosedur AfterRowColChange 89 .T. && tampil di layar monitor ENDDEFINE *--.255.224.224.

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

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

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

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

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

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

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

&& aktifkan button cmdEDIT .Enabled = .Enabled = NOT xPar && grid ON/OFF ENDWITH ENDPROC *--.prosedur TampilkanData ---* PROCEDURE TampilkanData PARAMETERS xPar && menerima variabel kiriman IF xPar && jika bernilai TRUE.Value = "" && isi textbox Alamat .T.Value = RECCOUNT() && TotRec . maka: * tampilkan data berikut WITH _Screen .txtNama.txtKota.Value = TabelKu.Value = 1 && isi textbox JenKel .txtAlamat.Value = RECCOUNT() && TotRec .T.txtKode.txtKode.Value = "" && isi textbox KodePos ENDWITH ENDIF ENDPROC *--.txtNoRec.ToolTipText = "Simpan Data" && tip kecil .txtKodePos.224) ENDIF .Value = TabelKu.txtAlamat.Enabled = .myGrid.cmdEdit.Value = TabelKu.Caption = "CANCEL" && isi button cmdEDIT .JenKel = "Laki-laki" .txtNoRec.Value = TabelKu.Value = RECNO() && NoRec .Option2.txtKota.txtTotRec.Value = TabelKu.Value = 2 && JenKel ENDIF .optJenKel.Value = "" && isi textbox Nama .optJenKel.cmdAdd.txtKodePos.Refresh ENDWITH ELSE && jika bernilai FALSE.myGrid.Nama && Nama IF TabelKu. && aktifkan button cmdADD .Value = "" && isi textbox Kota ..T.KodePos && KodePos .cmdEdit.224.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(.txtTotRec.F.optJenKel.Value = RECCOUNT()+1 && NoRec .BackColor = RGB(224.Value = "" && isi textbox Kode .ToolTipText = "Batal" && tip kecil 97 .cmdAdd.) && aktifkan prosedur SetField() WITH _Screen .) && aktifkan prosedur SetButton() SetField(.optJenKel.Alamat && Alamat .cmdEdit.txtNama.Value = 1 && JenKel ELSE .cmdAdd. maka * tampilkan data berikut WITH _Screen .Kota && Kota .Caption = "SAVE" && isi button cmdADD .Kode && Kode .

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

224) && warna dasar * mengatur optiongroup.224.dbf CREATE TABLE TabelKu.255) && warna huruf .dbf ( . Nama C(50).Left = 10 && posisi kiri .dbf") * buat file baru TabelKu. JenKel C(9).prosedur Start ---* PROCEDURE Start * isi label Tanggal _Screen.Option2.Height = 22 && tinggi option1 .224.BackColor = RGB(224.Caption = "KOTA" && judul kolom5 .dbf tidak ada.Width = 80 && lebar option1 .0) && warna non-aktif . .optJenKel .Header1.Option2 .Column5.Option2..prosedur Stop ---* PROCEDURE Stop SELECT TabelKu && aktifkan tabel TabelKu.file kosong!") ENDIF ENDPROC *--.224) && non-aktif . maka: * tampilkan pesan TampilkanSorry("SORRY.Option1. .0.Height = 22 && tinggi option1 .BackColor = RGB(224. .Header1.224.0) && warna non-aktif .Option1.BackColor = RGB(224.ForeColor = RGB(0.Caption = "KODE POS" && judul kolom6 ENDWITH * me-refresh optiongroup optJenKel WITH _Screen. apakah file TabelKu. 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.Left = 100 && posisi kiri .Caption = "Perempuan" && isi option1 ENDWITH ENDPROC *--.Caption = "Laki-laki" && isi option1 * mengatur optiongroup. Kota C(50).Option1. .dbf * jika jumlah record melebihi maksimum.ForeColor = RGB(0. Kode C(5)..Option2.Option1 .Width = 80 && lebar option1 .Column6.Caption = TampilkanTanggal() CLOSE TABLES ALL && tutup semua tabel * periksa..0.Option1.Top = 2 && posisi atas .. Alamat C(50).224) && non-aktif .dbf sudah ada * jika file TabelKu.Option2.Option1.Option2. 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 .Option2.ForeColor = RGB(0.Option1.Top = 2 && posisi atas .0. maka: IF NOT FILE("TabelKu.Tanggal.Option2.

kembali ke Windows ENDPROC *--. . .. Height = 22. Enabled = . . && button minimum di-non-aktifkan MaxButton = . Visible = .BackColor. FontSize = 9.tambahkan optiongroup optMySort ---* ADD OBJECT optMySort AS OptionGroup WITH . . Left = 10. .T. . .BackColor && warna dasar AutoCenter = . BackColor = _Screen. . *--. . Height = 110.. 100 . . Width = 120. Name = "optOption". . Left = 10.T. FontName = "Arial". && control box di-non-aktifkan Movable = . Width = 130. && bisa dipindahkan MinButton = .T. && tip tool text di-aktifkan WindowType = 1 && window modal. && button close di-non-aktifkan ShowTips = . *--.T.prosedur SortData ---* PROCEDURE SortData * membuat form myFormSort oFormSort = CREATEOBJECT("myFormSort") oFormSort. FontBold = . .F.F.T. .F. lainnya non-aktif **************************************************** * berikut ini cara mengisi form myFormSort.ENDIF QUIT && selesai.tambahkan optiongroup optMyOption ---* ADD OBJECT optMyOption AS OptionGroup WITH . Name = "lblJudul". . . yaitu: * * langsung menambahkan objek bersama atributnya * * ke dalam form * **************************************************** *--. Visible = .BackColor. Caption = "Urut berdasarkan:".T. . Top = 35. .F. . Top = 10.T. BackColor = _Screen.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. && posisi di tengah layar monitor ControlBox = . ButtonCount = 4. && button maksimum di-non-aktifkan Closable = .

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

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

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

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

NamaPasar(5). tanggal. ".4) * mengembalikan nama hari dan pasar. kemudian jalankan di dalam lingkungan Visual FoxPro.prg atau copy file TabelKu. NamaBulan(MONTH(DATE()))+" "+STR(YEAR(DATE()).5)+1))+. simpan dengan nama TabelKu.prosedur TampilkanTanggal ---* FUNCTION TampilkanTanggal LOCAL cRet."+ . * bulan dan tahun RETURN (cRet) ENDFUNC * End of procedure Ketik program di atas. "+ALLTRIM(STR(DAY(DATE())))+" "+.REPLACE TabelKu.KodePos WITH xKPOS && simpan Kode Pos ENDPROC ENDDEFINE *--. bulan dan tahun cRet = NamaHari(DOW(DATE()))+" . NamaPasar((MOD((DATE()-CTOD("01/01/1900")).NamaHari(7). tanggal.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. Hasilnya pasti memuaskan! 105 .prg dari CD pendamping buku ini.

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

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

Berikut ini contoh hubungan antara tabel Bapak. dan Cucu. Inggris). mengubah 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. Indonesia Bhs. Anak.Anak. Indonesia Sejarah Tabel Cucu: KDCUCU 100 200 300 400 NMCUCU Bhs. sedangkan tabel Anak berhubungan dengan 2 Cucu (100Bhs. Contoh pemakaian: Tabel Bapak (001-Kusmijanto) berhubungan dengan 2 Anak (100 dan 200). Disamping itu. Tabel Bapak: KODE 001 NAMA Kusmijanto Tabel Anak: KODE 001 001 002 002 KDANAK 100 200 100 400 NMANAK Bhs. maupun menghapus data. manipulasi data dapat dilakukan dengan mudah. Inggris Bhs. Indonesia dan 200-Bhs. Inggris Matematika Sejarah 108 . baik menambah data. Indonesia Bhs.

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

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

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

2 Flowchart program aplikasi tabel BapakAnak 112 . program aplikasi tabel BapakAnak dapat digambarkan sebagai berikut.Secara sederhana. 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.dbf Navigasi Record ADD EDIT DELETE ABOUT CLOSE Gambar 7.

BorderStyle = 2 && fix dialog ****************** * Kelompok Bapak * ****************** * tambahkan objek label .AddObject("Titik01". && button controbox dihilangkan . "myWaktu") ."myTitik01") . && button max dihilangkan .prg * * Keterangan : program aplikasi (CODE) untuk menangani * * 3 tabel Bapak.ShowTips = .AddObject("Jam". && form ditengah layar monitor ."myTanggal") ."myNamaBapak") * tambahkan objek label ."myRecBapak") ."myVersion") .AddObject("Versi".000 * Mengatur form _SCREEN (milik Visual FoxPro) WITH _Screen . tabel Anak dan tabel Cucu * * yang saling berhubungan (relationship) * * .Width = 390 && lebar form .AddObject("Tanggal".F.Height = 600 && tinggi form ."myKodeBapak") .F. && button close dihilangkan ."myJudulBapak") .7.Child Relationship" && judul form .T.AddObject("Titik02".AddObject("Judul".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.Left = 0 && posisi kiri .T.Caption = "Parent .ControlBox = .AddObject("Waktu".3 Kode Program Berikut ini listing kode program tabel BapakAnak. && button min dihilangkan ."myTitik02") 113 .AddObject("NamaBapak".AddObject("KodeBapak".F."myJudul") .F.MinButton = .AddObject("JudulBapak". && tampilkan tooltiptext .AddObject("RecBapak".MaxButton = ."myJam") .Top = 0 && posisi atas . *********************************************************** * Nama Program : BapakAnak.Closable = .AutoCenter = .

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

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 = . && huruf tebal Caption = "PARENT .T.T. && huruf tebal ForeColor = RGB(0.Caption = TIME() ENDPROC ENDDEFINE ****************** * KELOMPOK BAPAK * ****************** *---------------------------* Kelompok Label *---------------------------*--.255) && warna huruf Caption = "PARENT TABLE" && isi Label Visible = .T. && label tampil ENDDEFINE *--.* optiongroup dan command button * ***************************************** *--.0.T.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 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 = . && tampak di layar monitor ENDDEFINE *--. && label tampil ENDDEFINE *--.T. && tampak di layar monitor ENDDEFINE *--.CHILD TABLE RELATIONSHIP" Visible = .T.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 = .definisi label myJam ---* DEFINE CLASS myJam AS Label 115 .Jam.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 = .

&& 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 = .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 = .T.T. No. && tampak di layar monitor 116 .T. && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = . && huruf tebal Caption = "Kode" && isi label Visible = . && label tampil ENDDEFINE *--. && 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 = . && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = . && huruf tebal Caption = "Nama" && isi label Visible = ." && isi label Visible = .T.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 = .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.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.

T.255.0. && 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 = .255) && warna dasar DisabledBackColor = RGB(128.255) && warna huruf BackColor = RGB(255.255) && warna dasar DisabledForeColor = RGB(255.255) && warna huruf DisabledBackColor = RGB(128.255.0.0) && warna non-aktif TabStop = . && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = . && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0.F. && non-aktif Format = "999" && bentuk tampilan InputMask = "999" && bentuk masukan ForeColor = RGB(0.255) && warna non-aktif DisabledForeColor = RGB(255. && tidak bisa di-tab 117 .0.255) && warna dasar DisabledBackColor = RGB(128.255) && warna huruf BackColor = RGB(255.T.ENDDEFINE *-----------------------------DEFINE CLASS myTitik03 As Label Top = 85 && posisi atas Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .255) && warna non-aktif DisabledForeColor = RGB(255.T.F.255.255. && 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 = .0.0.255. && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0.0) && warna depan Visible = . && tidak bisa di-tab Visible = .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 = .F.0.T.F.0) && warna non-aktif TabStop = .

&& tidak bisa displit Column1.255) && warna non-aktif DisabledForeColor = RGB(255. && tidak bisa dihapus ReadOnly = .0.Name = "Column1" && nama kolom 1 Column2. && 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 = .255) && warna huruf BackColor = RGB(255.T.255) && warna dasar DisabledBackColor = RGB(128.0) && warna non-aktif Visible = . 118 .T.Name = "Column2" && nama kolom 2 Visible = . && non-aktif ForeColor = RGB(0. && tidak bisa diedit RecordSource = "Bapak" && sumber tabel Bapak RecordSourceType = 1 && alias SplitBar = . && 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 = .cmdTop.F. && tampak di layar monitor PROCEDURE AfterRowColChange && aktif jika ada perubahan * parameter ini harus ada.Top && posisi atas Left = _Screen.cmdTop.Left + .T.255.Visible = .T.F. && 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 = .255.0.F.T.

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

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

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

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

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

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

&& 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 = . && huruf tebal Caption = "No." && isi label Visible = .T.Height = 22 && tinggi label FontBold = . && 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 = .T. && 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 = .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 = . && 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 = . && tampak di layar monitor ENDDEFINE *-----------------------------* Kelompok Titik Anak *-----------------------------DEFINE CLASS myTitik04 As Label Top = 305 && posisi atas 125 .T.T.T.T." && isi label Visible = .T.0) && warna huruf Caption = "CHILD TABLE" && isi label Visible = . && huruf tebal ForeColor = RGB(255.T. && huruf tebal Caption = "Rec." && isi label Visible = .T. && huruf tebal Caption = "MtKul.T.0.No.

&& 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 = .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 *-----------------------------------* 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.T. && 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 = .128) && warna non-aktif DisabledForeColor = RGB(255.Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .T.F.T.0.255) && warna dasar DisabledBackColor = RGB(128.255) && warna huruf BackColor = RGB(255. && 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 = .255. && di-non-aktifkan Format = "999" && format tampilan InputMask = "999" && input tampilan ForeColor = RGB(0. && huruf tebal Alignment = 2 && isi di tengah label Caption = ":" && isi label Visible = .T.0) && warna non-aktif Visible = .T.255.T. && tampak di layar monitor ENDDEFINE *------------------------------------DEFINE CLASS myTxtNoRecAnak As TextBox 126 .T.

0.F.255.T.0.255. && tidak bisa ditab ForeColor = RGB(0.0) && warna non-aktif Visible = .F.255) && warna huruf BackColor = RGB(255.Value = Cucu.T.255) && warna huruf BackColor = RGB(255. && di-non-aktifkan 127 .0.TxtNamaAnak.0) && warna non-aktif Visible = .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 = .255) && warna huruf BackColor = RGB(255. && di-non-aktifkan Format = "" && format tampilan InputMask = "" && input tampilan ForeColor = RGB(0.0. && di-non-aktifkan Format = "999999" && format tampilan InputMask = "999999" && input tampilan TabStop = .255.0.255) && warna dasar DisabledBackColor = RGB(128.255.128) && warna non-aktif DisabledForeColor = RGB(255.255) && warna dasar DisabledBackColor = RGB(128. && tampak di layar monitor * aktif jika terjadi perubahan PROCEDURE InteractiveChange * isi field Nama tabel Cucu.128) && warna non-aktif DisabledForeColor = RGB(255.F.128) && warna non-aktif DisabledForeColor = RGB(255.F. && tidak bisa ditab ForeColor = RGB(0.0) && warna non-aktif Visible = .T.Top = 305 && posisi atas Left = 230 && posisi kiri Width = 60 && lebar textbox Height = 22 && tinggi textbox Alignment = 2 && isi di kanan textbox Enabled = .255. && di-non-aktifkan Format = "999999" && format tampilan InputMask = "999999" && input tampilan TabStop = .255) && warna dasar DisabledBackColor = RGB(128.dbf _Screen. && 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 = . && 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 = .F.255.F.0.

F.255) && warna huruf BackColor = RGB(255.128) && warna non-aktif DisabledForeColor = RGB(255. 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 = ".255. && tampak di layar monitor PROCEDURE AfterRowColChange && jika terjadi perubahan * parameter ini harus ada. && tampak di layar monitor 128 .0.." && isi button ToolTipText = "Pengelolaan Tabel Cucu" && tip kecil Visible = .0) && warna non-aktif Visible = .0.T.255) && warna dasar DisabledBackColor = RGB(128.. && tidk bisa dihapus ReadOnly = .T.Format = "" && format tampilan InputMask = "" && input tampilan MaxLength = 35 && panjang maksimum ForeColor = RGB(0. && tidak ada splitbar TabStop = .F. && cuma bisa dibaca RecordSource = "AnakTmp" && tabel AnakTmp.T.T. && tidak ada tabstop Column1.F. && 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 = .Name = "Column1" && nama kolom 1 Column2.dbf RecordSourceType = 1 && alias SplitBar = .Name = "Column3" && nama kolom 3 Visible = .Name = "Column2" && nama kolom 2 Column3. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik oKusForm = CREATEOBJECT("myFrmKusForm") && buat form oKusForm.T.255.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 = .

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

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

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

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

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

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

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.txtNomorAnak.grdGridBapak.dbf .Refresh && grid direfresh ENDWITH TampilkanAnak() && aktifkan prosedur TampilkanAnak() TampilkanBapak() && aktifkan prosedur TampilkanBapak() ENDPROC *--.grdGridAnak.grdGridBapak.grdGridAnak.Header1.Width = 50 && lebar kolom 2 .txtNomorAnak.Column2.ANAK" .RecordSource = "" && kosongkan .prosedur NavigasiBapak() --PROCEDURE NavigasiBapak PARAMETERS xPar SELECT Bapak && aktifkan tabel Bapak.ColumnWidths = "50.ColumnCount = 2 && jumlah kolom .Column1.200" && lebar kolom .Width = 210 && lebar kolom 3 .. 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 .DBF && hapus file AnakTmp.txtNomorAnak.Caption = "KODE" .txtNomorAnak.Header1. 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.dbf IF RECCOUNT() = 0 && jika file kosong.Caption = "NAMA ANAK" .dbf CLEAR EVENTS && hapus semua event QUIT && selesai.prosedur Stop() --PROCEDURE Stop RefreshAnakTmp() && aktifkan prosedur RefreshAnakTmp() SELECT Bapak && aktifkan tabel Bapak * jika jumlah record maksimum.RecordSource = "" && kosongkan .grdGridAnak.RowSource = "Cucu" && tabel Cucu.txtNomorAnak.Column2.Caption = "KD.txtNomorAnak.Column3. keluar ke Windows ENDPROC *--.grdGridAnak. maka: TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi.RowSource = "" && kosongkan ENDWITH CLOSE TABLES ALL && tutup semua tabel DELETE FILE AnakTmp.grdGridAnak.DisplayCount = 10 && jumlah ditampilkan .Header1.grdGridAnak.RowSourceType = 2 && alias .Refresh && grid direfresh .grdGridAnak.

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.dbf IF RECCOUNT() = 0 && jika file kosong.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 *--. maka: TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi.

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

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

Enabled = xPar && button ON/OFF .cmdDelAnak. FontSize = 10. 139 . . ..T. && button controbox dihilangkan Closable = .F. FontName = "Arial".Enabled = xPar && button ON/OFF .cmdCloseAnak.Enabled = xPar && button ON/OFF .0).0. Top = 10.cmdTopAnak. .Enabled = xPar && button ON/OFF .T.cmdEditAnak. && tombol maksimum non-aktif ShowTips = .definisi label myTanggal ---* ADD OBJECT myTanggal AS Label WITH . Interval = 1000 *--.prosedur ButtonAnak() --PROCEDURE ButtonAnak PARAMETERS xPar && menerima variabel True/False * mengatur Button True/False WITH _Screen . Caption = "TABEL CUCU".216) && warna dasar AutoCenter = . Left = 10.cmdCucu.Enabled = xPar && button ON/OFF . Left = 0. Top = 0. . .cmdBottomAnak. && form di tengah ControlBox = .definisi timer myWaktu ---* ADD OBJECT myWaktu AS Timer WITH . . . . ForeColor = RGB(0.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.cmdAboutAnak.F.T.T. *--. .Enabled = xPar && button ON/OFF .*--. . .Enabled = xPar . && tampilkan tips pendek WindowType = 1 && window type ***************************************************** * mengisi objek ke dalam form dengan cara yang lain * * mengisi objek beserta atributnya ke dalam form * ***************************************************** *--. Width = 100.tambahkan label myJudul --ADD OBJECT lblMyJudul AS Label WITH .F.F.Enabled = xPar && button ON/OFF . && button close dihilangkan Movable = . .cmdAddAnak. && bisa dipindahkan MinButton = .cmdNextAnak.cmdPrevAnak. Height = 22. Name = "Waktu". && tombol minimum non-aktif MaxButton = .T. FontBold = . Visible = .Enabled = xPar && button ON/OFF .233.

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

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

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

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

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

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

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

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

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

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

..end of file!") ENDPROC *--.."SORRY") && tampilkan pesan ENDPROC *--..prosedur TampilkanKodeKosong --PROCEDURE TampilkanKodeKosong * Tampilkan pesan TampilkanSorry("SORRY..prosedur TampilkanFileKosong --PROCEDURE TampilkanFileKosong * Tampilkan pesan TampilkanSorry("SORRY..0+64.top of file!") ENDPROC *--.prosedur TampilkanSorry --PROCEDURE TampilkanSorry PARAMETERS xPar && menerima kiriman variabel MESSAGEBOX(xPar....file kosong!") ENDPROC *--.prosedur TampilkanKodeSama --PROCEDURE TampilkanKodeSama 150 .prosedur TampilkanEndOfFile --PROCEDURE TampilkanEndOfFile * Tampilkan pesan TampilkanSorry("SORRY.....prosedur TampilkanTopOfFile --PROCEDURE TampilkanTopOfFile * Tampilkan pesan TampilkanSorry("SORRY.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..TampilkanData() ENDIF ENDPROC ENDDEFINE ********************************** * definisi prosedur di luar form * ********************************** *--...Kode kosong!") ENDPROC *--.

.prosedur TampilkanTanggal ---* FUNCTION TampilkanTanggal * variabel lokal LOCAL cRet.5)+1))+ .prosedur TampilkanRecordMax --PROCEDURE TampilkanRecordMax * Tampilkan pesan TampilkanSorry("SORRY. ".. "+ALLTRIM(STR(DAY(DATE())))+" "+ . bulan dan tahun cRet = NamaHari(DOW(DATE()))+" .NamaPasar(5).maksimum record 1.000!") ENDPROC *--.Kode sama!") ENDPROC *--."+ . tanggal. NamaBulan(MONTH(DATE()))+" "+ ..* Tampilkan pesan TampilkanSorry("SORRY.. NamaPasar((MOD((DATE()-CTOD("01/01/1900")).4) 151 ..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 *--..NamaHari(7).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. STR(YEAR(DATE())...

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

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

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

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

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

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

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