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

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

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

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

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

84

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

85

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

86

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

87

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

T.definisi textbox myTxtKodePos ---* DEFINE CLASS myTxtKodePos AS TextBox Top = 160 && posisi atas Left = 135 && posisi kiri Width = 60 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.255) && warna huruf SplitBar = .0.224. && tampil di layar monitor ENDDEFINE *--. && tampil di layar monitor ENDDEFINE *--.224) && warna non-aktif MaxLength = 50 && panjang maksimum isian textbox Value = "" && nilai textbox dokosongkan Visible = .255) && warna dasar DisabledForeColor = RGB(0.0.F.255.224. && tampil di layar monitor ENDDEFINE *--.T.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.ENDDEFINE *--.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 = .224.255.255) && warna non-aktif DisabledBackColor = RGB(224. && splitbar di-non-aktifkan * tambahkan prosedur AfterRowColChange 89 .0.255) && warna dasar DisabledForeColor = RGB(0.0.255) && warna huruf BackColor = RGB(255.255) && warna huruf BackColor = RGB(255.255) && warna dasar DisabledForeColor = RGB(0.T.definisi textbox myTxtAlamat ---* DEFINE CLASS myTxtAlamat AS TextBox Top = 110 && posisi atas Left = 135 && posisi kiri Width = 380 && lebar textbox Height = 24 && tinggi textbox FontName = "Arial" && jenis huruf FontSize = 9 && ukuran huruf ForeColor = RGB(0.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 non-aktif DisabledBackColor = RGB(224.0.255) && warna huruf BackColor = RGB(255.255.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful