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

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

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

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

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

84

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

85

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

86

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

87

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

255) && warna dasar DisabledForeColor = RGB(255.F. && tampak di layar monitor ENDDEFINE *-------------------------------------DEFINE CLASS myTxtNoRecBapak As TextBox Top = 60 && posisi atas Left = 230 && posisi kiri Width = 60 && lebar label Height = 22 && tinggi label Alignment = 2 && di kiri textbox Enabled = .0) && warna non-aktif TabStop = .255) && warna huruf DisabledBackColor = RGB(128.0.0.0.T.F.0) && warna non-aktif TabStop = .T.T.255.0.255) && warna huruf BackColor = RGB(255.T.255) && warna non-aktif DisabledForeColor = RGB(255.255.255) && warna dasar DisabledBackColor = RGB(128. && huruf tebal Alignment = 2 && di tengah Caption = ":" && isi label Visible = . && tidak bisa di-tab 117 . && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0. && non-aktif Format = "999" && bentuk tampilan InputMask = "999" && bentuk masukan ForeColor = RGB(0. && non-aktif Format = "999999" && bentuk tampilan InputMask = "999999" && bentuk masukan ForeColor = RGB(0.0) && warna depan Visible = . && 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 = .0.ENDDEFINE *-----------------------------DEFINE CLASS myTitik03 As Label Top = 85 && posisi atas Left = 60 && posisi kiri Width = 12 && lebar label Height = 22 && tinggi label FontBold = .255.0.255) && warna non-aktif DisabledForeColor = RGB(255.255.F.255.255) && warna huruf BackColor = RGB(255.F.F. && tidak bisa di-tab Visible = .255) && warna dasar DisabledBackColor = RGB(128. && 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) && warna non-aktif DisabledForeColor = RGB(255. && non-aktif ForeColor = RGB(0.T. && tidak bisa dihapus ReadOnly = .0. && 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 = . 118 .F.Left + .T.Name = "Column2" && nama kolom 2 Visible = .255.cmdTop.Visible = .Name = "Column1" && nama kolom 1 Column2. && tidak bisa displit Column1.F. && tidak bisa diedit RecordSource = "Bapak" && sumber tabel Bapak RecordSourceType = 1 && alias SplitBar = .T.Top && posisi atas Left = _Screen.255) && warna dasar DisabledBackColor = RGB(128.T. && tampak di layar monitor PROCEDURE AfterRowColChange && aktif jika ada perubahan * parameter ini harus ada. && tampak di layar monitor PROCEDURE Click && aktif jika button diklik * aktifkan prosedur NavigasiBapak() NavigasiBapak("FIRST") ENDPROC ENDDEFINE *-------------------------------------DEFINE CLASS myCmdPrev As CommandButton Top = _Screen.255.T.255) && warna huruf BackColor = RGB(255.cmdTop.0) && warna non-aktif Visible = . && 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 = .0.F. tidak digunakan LPARAMETERS nColIndex RefreshAnakTmp() && aktifkan RefreshAnakTmp() TampilkanAnak() && aktifkan TampilkanAnak() TampilkanBapak() && aktifkan TampilkanBapak() ENDPROC ENDDEFINE *------------------------------------* Kelompok CommandButton Bapak *------------------------------------DEFINE CLASS myCmdTop As CommandButton Top = 240 && posisi atas Left = 20 && posisi kiri Width = 25 && lebar button Height = 25 && tinggi button Caption = "|<" && isi button ToolTipText = "Record Awal" && tips kecil Visible = .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NamaPasar(5). bulan dan tahun cRet = NamaHari(DOW(DATE()))+" ...000!") ENDPROC *--.NamaBulan(12) * Nama-nama hari NamaHari(1) = "Minggu" NamaHari(2) = "Senin" NamaHari(3) = "Selasa" NamaHari(4) = "Rabu" NamaHari(5) = "Kamis" NamaHari(6) = "Jum'at" NamaHari(7) = "Sabtu" * Nama-nama pasaran NamaPasar(1) = "Pahing" NamaPasar(2) = "Pon" NamaPasar(3) = "Wage" NamaPasar(4) = "Kliwon" NamaPasar(5) = "Legi" * Nama-nama bulan NamaBulan(1) = "Januari" NamaBulan(2) = "Februari" NamaBulan(3) = "Maret" NamaBulan(4) = "April" NamaBulan(5) = "Mei" NamaBulan(6) = "Juni" NamaBulan(7) = "Juli" NamaBulan(8) = "Agustus" NamaBulan(9) = "September" NamaBulan(10)= "Oktober" NamaBulan(11)= "Nopember" NamaBulan(12)= "Desember" * nama hari dan pasar. NamaBulan(MONTH(DATE()))+" "+ .maksimum record 1. "+ALLTRIM(STR(DAY(DATE())))+" "+ ..5)+1))+ .prosedur TampilkanRecordMax --PROCEDURE TampilkanRecordMax * Tampilkan pesan TampilkanSorry("SORRY....prosedur TampilkanTanggal ---* FUNCTION TampilkanTanggal * variabel lokal LOCAL cRet..Kode sama!") ENDPROC *--.NamaHari(7). ". tanggal.* Tampilkan pesan TampilkanSorry("SORRY."+ .. STR(YEAR(DATE()). NamaPasar((MOD((DATE()-CTOD("01/01/1900")).prosedur GoRecord --PROCEDURE GoRecord PARAMETERS xPar && menerima kiriman variabel DO CASE CASE xPar = "FIRST" && button First GO TOP && menuju record awal CASE xPar = "PREV" && button Prev SKIP -1 && menuju record sebelumnya CASE xPar = "NEXT" && button Next SKIP && menuju record berikutnya CASE xPar = "LAST" && button Last GO BOTTOM && menuju record akhir OTHERWISE && button lainnya GO xRecPosisi && menuju record sekarang ENDCASE ENDPROC *--.4) 151 .

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful