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

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

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

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

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

84

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

85

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

86

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

87

255.T.255.definisi optiongroup myOptJenKel ---* DEFINE CLASS myOptJenKel AS OptionGroup Top = 85 && posisi atas Left = 135 && posisi kiri Width = 200 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.224.255) && warna huruf BackColor = RGB(255. && optiongroup di-aktifkan Visible = . && tampil di layar monitor 88 .0. && tampil di layar monitor ENDDEFINE *--.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.255) && warna huruf BackColor = RGB(255.0.255) && warna non-aktif DisabledBackColor = RGB(224.T.255) && warna dasar DisabledForeColor = RGB(0.T.BackColor && warna dasar Visible = .0.255) && warna non-aktif DisabledBackColor = RGB(224.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.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.224.224.255) && warna dasar DisabledForeColor = RGB(0.255) && warna huruf BackColor = RGB(255.ENDDEFINE *--.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .255.0.T.T.224) && warna non-aktif MaxLength = 5 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .255) && warna dasar DisabledForeColor = RGB(0. && tampil di layar monitor ENDDEFINE *--. && tampil dilayar monitor ENDDEFINE *--.224) && warna non-aktif ButtonCount = 2 && 2 pilihan Laki-laki atau Perempuan Enabled = .0) && warna huruf BackColor = _Screen.255) && warna non-aktif DisabledBackColor = RGB(224.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0. && 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.F.Top && posisi atas Left = _Screen.255.T.T.255.T. && tidak bisa displit Column1.T.255) && warna non-aktif DisabledForeColor = RGB(255.T. && tidak bisa diedit RecordSource = "Bapak" && sumber tabel Bapak RecordSourceType = 1 && alias SplitBar = . && tampak di layar monitor ENDDEFINE *------------------------------------DEFINE CLASS myTxtNamaBapak As TextBox Top = 85 && posisi atas Left = 70 && posisi kiri Width = 290 && lebar text box Height = 22 && tinggi text box MaxLength = 30 && isian maksimum Enabled = .255) && warna huruf BackColor = RGB(255. 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 = . && tidak bisa dihapus ReadOnly = .F. && tampak di layar monitor PROCEDURE AfterRowColChange && aktif jika ada perubahan * parameter ini harus ada.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 = .Left + .0) && warna non-aktif Visible = . && non-aktif ForeColor = RGB(0. 118 .Name = "Column1" && nama kolom 1 Column2.Visible = .255) && warna dasar DisabledBackColor = RGB(128.cmdTop.F.Name = "Column2" && nama kolom 2 Visible = .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NamaPasar(5).maksimum record 1.. STR(YEAR(DATE())..prosedur TampilkanRecordMax --PROCEDURE TampilkanRecordMax * Tampilkan pesan TampilkanSorry("SORRY.5)+1))+ .. NamaPasar((MOD((DATE()-CTOD("01/01/1900")).. ".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 *--."+ . tanggal.Kode sama!") ENDPROC *--.NamaBulan(12) * Nama-nama hari NamaHari(1) = "Minggu" NamaHari(2) = "Senin" NamaHari(3) = "Selasa" NamaHari(4) = "Rabu" NamaHari(5) = "Kamis" NamaHari(6) = "Jum'at" NamaHari(7) = "Sabtu" * Nama-nama pasaran NamaPasar(1) = "Pahing" NamaPasar(2) = "Pon" NamaPasar(3) = "Wage" NamaPasar(4) = "Kliwon" NamaPasar(5) = "Legi" * Nama-nama bulan NamaBulan(1) = "Januari" NamaBulan(2) = "Februari" NamaBulan(3) = "Maret" NamaBulan(4) = "April" NamaBulan(5) = "Mei" NamaBulan(6) = "Juni" NamaBulan(7) = "Juli" NamaBulan(8) = "Agustus" NamaBulan(9) = "September" NamaBulan(10)= "Oktober" NamaBulan(11)= "Nopember" NamaBulan(12)= "Desember" * nama hari dan pasar.NamaHari(7).4) 151 ..prosedur TampilkanTanggal ---* FUNCTION TampilkanTanggal * variabel lokal LOCAL cRet. NamaBulan(MONTH(DATE()))+" "+ .000!") ENDPROC *--. "+ALLTRIM(STR(DAY(DATE())))+" "+ . bulan dan tahun cRet = NamaHari(DOW(DATE()))+" ..* Tampilkan pesan TampilkanSorry("SORRY...

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

pilih Program <NamaProgram> OK Contoh: Program atau. ketik: DO <NamaProgram> Contoh: DO JamAnalog (file PRG) 2. pilih JamAnalog (file PRG) Dari jendela Command. 153 . berarti Anda harus membuat file Executable (. Di dalam lingkungan Visual FoxPro: Dari menu Visual FoxPro. Do Do pilih OK.EXE). yaitu: 1. 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.

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful