Teknik Merancang Program Aplikasi (CODE) Pada Visual FoxPro

TABELKU

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

77

No 1 2 3 4 5

Field Nama JenKel Alamat Kota KodePos

Type C C C C C

Width 30 9 30 30 5

Keterangan Nama Jenis Kelamin Alamat Nama Kota Kode Pos

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

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

78

Gambar 6.1 Desain program aplikasi TabelKu

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

79

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

• • • •

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

80

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

dan CommandButton untuk menangani ketiga tabel tersebut. Tabel Bapak.DBF Kode Anak kunci penghubung tabel MataKuliah.DBF adalah sebagai berikut. Struktur tabel Bapak.DBF Nama Anak 3 NMANAK C 30 Struktur tabel Cucu.DBF Nama Cucu 2 NMCUCU C 30 Program aplikasi BapakAnak disusun berdasarkan konsep hubungan antartabel seperti tersebut di atas. No 1 Field KDCUCU Type C Width 3 Keterangan Kode Cucu kunci penghubung tabel Anak.DBF adalah sebagai berikut. No 1 2 Field KODE NAMA Type C C Width 3 30 Keterangan Kode Bapak kunci penghubung tabel Anak. dan tabel Cucu ditampilkan dalam satu layar sehingga memudahkan pemakai untuk melakukan penelusuran dari satu record ke record lainnya. TextBox.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 adalah sebagai berikut.DBF Nama Bapak Struktur tabel Anak. Perubahan dalam tabel Bapak akan langsung kelihatan dalam tabel 107 . Grid. tabel Anak.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

cmdEdit. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik SELECT Bapak && aktifkan tabel Bapak IF RECCOUNT() = 0 && jika file kosong TampilkanFileKosong() && tampilkan pesan ELSE && jika file isi * mengatur _SCREEN WITH _Screen DO CASE CASE .Refresh && direfresh OTHERWISE && lainnya * aktifkan prosedur ButtonBapak() ButtonBapak(.txtNamaBapak.grdGridBapak.cmdEdit.Refresh && direfresh ENDCASE ENDWITH ENDIF ENDPROC ENDDEFINE *------------------------------------DEFINE CLASS myCmdDel As CommandButton Top = _Screen.txtKodeBapak.Kode .cmdDel.txtNamaBapak.Kode .txtNamaBapak.cmdDel.grdGridBapak.Nama * mengatur textbox .Caption = "Del" * mengatur textbox .) * mengatur button .Caption = "Edit" .Width && lebar button Caption = "Del" && isi button ToolTipText = "Hapus Data" && keterangan pendek Visible = .txtKodeBapak.grdGridBapak.cmdAdd. && aktif .F.cmdEdit. 4+32+256.Nama * mengatur textbot .txtKodeBapak. && aktif .T."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?".Caption = "Del" && button Del * tampilkan pilihan.T.Enabled = .Enabled = .Enabled = .F.grdGridAnak.T.cmdEdit.Caption = "Add" .Enabled = .grdGridAnak.F.) * aktifkan prosedur ButtonAnak() ButtonAnak(.Enabled = .cmdEdit.T. && aktif .Value = Bapak.cmdEdit.Value = Bapak.Top && posisi atas Left = _Screen.Left + . && non-aktif * mengatur grid .Enabled = .T. _Screen.* mengatur textbox .grdGridBapak. && non-aktif * mengatur grid . && aktif .T.txtKodeBapak.Width && posisi kiri Height = _Screen.Height && tinggi button Width = _Screen.Value = Bapak. && non-aktif .Value = Bapak. && non-aktif .txtNamaBapak.Enabled = .Enabled = .F.T..

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

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

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

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

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

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

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

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

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

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

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

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

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

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.prosedur NavigasiAnak() --PROCEDURE NavigasiAnak PARAMETERS xPar && menerima kiriman SELECT AnakTmp && aktifkan tabel AnakTmp.dbf IF RECCOUNT() = 0 && jika file kosong. 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 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful