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

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

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

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

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

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

0.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.0.255) && warna dasar DisabledForeColor = RGB(0.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .255) && warna huruf SplitBar = .255) && warna huruf BackColor = RGB(255.255.224.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.T.0.255) && warna huruf BackColor = RGB(255.255.255) && warna huruf BackColor = RGB(255.255) && warna non-aktif DisabledBackColor = RGB(224. && tampil di layar monitor ENDDEFINE *--.F.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .T.224. && tampil di layar monitor ENDDEFINE *--. && splitbar di-non-aktifkan * tambahkan prosedur AfterRowColChange 89 .ENDDEFINE *--.255.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.224) && warna non-aktif MaxLength = 5 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .0.0.255) && warna non-aktif DisabledBackColor = RGB(224.T.0.255) && warna dasar DisabledForeColor = RGB(0.definisi grid myGrdGrid ---* DEFINE CLASS myGrdGrid AS Grid Top = 185 && posisi atas Left = 10 && posisi kiri Width = 520 && lebar grid Height = 265 && tinggi grid ColumnCount = 6 && jumlah kolom FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.255) && warna non-aktif DisabledBackColor = RGB(224. && tampil di layar monitor ENDDEFINE *--.255) && warna dasar DisabledForeColor = RGB(0.0.224.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&& huruf tebal Caption = "Nama" && isi label Visible = .T.T. && tampak di layar monitor ENDDEFINE *------------------------------DEFINE CLASS myRecBapak As Label Top = 60 && posisi atas Left = 168 && posisi kiri Width = 50 && lebar label Height = 22 && tinggi label FontBold = . && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = . && huruf tebal Caption = "Kode" && isi label Visible = . && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = . && huruf tebal Caption = "Rec.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 = .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." && isi label Visible = .T.T.T. && label tampil ENDDEFINE *--. && 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 = . No. && 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 = .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 = . && tampak di layar monitor 116 .T.T.

255) && warna huruf DisabledBackColor = RGB(128. && tidak bisa di-tab Visible = .0. && tidak bisa di-tab 117 .0) && warna depan Visible = .F.255.F.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.0.0) && warna non-aktif TabStop = . && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0.T.0.255) && warna dasar DisabledBackColor = RGB(128.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.255) && warna huruf BackColor = RGB(255.T.0.F. && non-aktif Format = "999" && bentuk tampilan InputMask = "999" && bentuk masukan ForeColor = RGB(0. && 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 = .255. && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = .255.F.255) && warna dasar DisabledBackColor = RGB(128.F.255) && warna huruf BackColor = RGB(255.255) && warna dasar DisabledForeColor = RGB(255. && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0.T.0.0) && warna non-aktif TabStop = .T.255) && warna non-aktif DisabledForeColor = RGB(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 = .

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

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

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

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

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

RecordSourceType = 1 .Caption=.grdGridAnak.) 123 .txtKodeBapak.T.Kode * mengatur grid .F.Value = AnakTmp.txtNamaAnak.Value = Bapak. "KODE" .Value = RECCOUNT() .Width = 70 . INTO TABLE AnakTmp .grdGridBapak. "KODE" .Refresh && direfresh .txtNamaBapak.grdGridBapak.grdGridAnak. "KD.Enabled = .KdAnak .Width = 300 .Header1.ColumnCount = 3 .grdGridAnak.Width = 300 .grdGridAnak.Caption=.Column1.ColumnCount = 2 .Column2.Column2.Header1.Column1.grdGridBapak.Kode .) * aktifkan prosedur ButtonBapak() ButtonAnak(.grdGridAnak.Column3.Column2.T.Header1.grdGridBapak.grdGridBapak.grdGridAnak.T.txtNoRecBapak.Enabled = .Value = Bapak. * filter data tabel Anak ke dalam * tabel AnakTmp * perintah SQL SELECT * FROM Anak .txtTotRecBapak.grdGridAnak.Column2.Value = AnakTmp. .txtNamaBapak.grdGridAnak.grdGridBapak.Nama * mengatur textbox .Column3.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 .grdGridAnak.Caption=.txtNomorAnak.Caption=. "NAMA ANAK" * mengatur grid .txtKodeAnak.grdGridBapak.RecordSourceType = 1 .Enabled = .NmAnak ENDIF ENDIF OTHERWISE * aktifkan prosedur ButtonBapak() ButtonBapak(.Kode .Column1.Width = 50 .Value = AnakTmp.Column1.RecordSource = "AnakTmp" .Header1. WHERE Kode = Bapak.grdGridAnak. "NAMA" * mengatur textbox .ANAK" .Header1.F.Refresh && direfresh * mengatur textbox .grdGridBapak.Value = RECNO() . * mengatur grid .Caption=.RecordSource="Bapak" .grdGridBapak.txtKodeBapak.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful