.jpg)
Desain Program Dengan M vfr9.0
Bentuk tampilan dari program Bapak-Anak seperti gambar di bawah
ini, yaitu jendela sebagai sarana interaktif antara pemakai dengan
database (tabel). Di bagian atas terdapat informasi tabel Bapak,
sedangkan di bagian bawah terdapat informasi tabel Anak. Jika
Anda mengklik button maka akan ditampilkan form yang
menangani tabel Cucu.
Fasilitas yang tersedia, antara lain navigasi record, tambah data,
ubah data, hapus data, tentang program, dan tutup form.
Jika button diklik, maka akan tampil form pengelolaan cucu
sebagai berikut.
Fasilitas yang tersedia, antara lain navigasi record, tambah data,
ubah data, hapus data, tentang program dan tutup form, kembali ke
tampilan Bapak-Anak.
Logika Program
Dasar utama pembuatan program Bapak-Anak ini adalah jendela
sebagai sarana interaktif antara pemakai dan database (tabel).
Dalam pengelolaan 3 tabel dibutuhkan objek Label, Grid, dan
CommandButton yang menampilkan semua record (data) dari ketiga
tabel, yakni tabel Bapak, Anak, dan Cucu.
Program Bapak-Anak disusun hanya menggunakan kode program
(CODE) saja, tanpa membuat form lainnya selain form utama Visual
FoxPro, yaitu variabel _SCREEN. Algoritma program Bapak-Anak
adalah sebagai berikut.
• Mengatur variabel _SCREEN untuk diisi dengan beberapa objek
Label, objek Grid, dan objek CommandButton.
• Menghubungkan form dengan ketiga tabel (Bapak.dbf, Anak.dbf,
dan Cucu.dbf)
• Menampilkan record (data) ke dalam form. Selanjutnya terserah
pemakai.
• Pemakai dapat menelusuri tabel, menambah data, mengubah
data, atau menghapus data.
Pengembangan selanjutnya dari program ini, bisa digunakan untuk
berbagai keperluan bidang bisnis lainnya, misalnya akuntansi, point
of sales, pendidikan, perpustakaan, dan lain-lain.
Program aplikasi BapakAnak menampilkan isi tabel Bapak.dbf,
Anak.dbf, dan Cucu.dbf. Data yang ditampilkan, antara lain untuk
tabel Bapak.dbf adalah Kode dan Nama; sedangkan untuk tabel
Anak.dbf adalah Kode, Kode Anak, dan Nama Anak. 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 tabel BapakAnak dapat digambarkan
sebagai berikut.
Persiapan
Menampilkan
Data
Start
Stop
Mengatur form _SCREEN
Menampilkan semua data
dalam objek Grid dan
menampilkan satu data
dalam objek TextBox
Navigasi
Record ADD EDIT DELETE SORT ABOUT CLOSE
Menampilkan
Data Cucu
Pengelolaan tabel Cucu.dbf
Navigasi
Record ADD EDIT DELETE ABOUT CLOSE
Kode Program
Berikut ini listing kode program tabel BapakAnak.
Nama Program : BapakAnak.prg
Keterangan : program aplikasi (CODE) untuk menangani
3 tabel Bapak, tabel Anak dan tabel Cucu
yang saling berhubungan (relationship)
single user version (exclusive)
Set Environment
SET TALK OFF
SET STATUS OFF
SET SAFETY OFF
SET STATUS BAR OFF
SET SYSMENU OFF
SET EXCLUSIVE ON
SET ESCAPE ON
bersihkan memori
CLEAR ALL
CLOSE ALL
CLOSE TABLES ALL
variabel public
PUBLIC oKusForm As Form
PUBLIC nMaxRec
nMaxRec = 1000 && Jumlah record maksimum 1.000
Mengatur form _SCREEN (milik Visual FoxPro)
WITH _Screen
.Top = 0 && posisi atas
.Left = 0 && posisi kiri
.Width = 390 && lebar form
.Height = 600 && tinggi form
.Caption = "Parent - Child Relationship" && judul form
.AutoCenter = .T. && form ditengah layar monitor
.ControlBox = .F. && button controbox dihilangkan
.Closable = .F. && button close dihilangkan
.MaxButton = .F. && button max dihilangkan
.MinButton = .F. && button min dihilangkan
.ShowTips = .T. && tampilkan tooltiptext
.BorderStyle = 2 && fix dialog
Kelompok Bapak
tambahkan objek label
.AddObject("Judul","myJudul")
.AddObject("JudulBapak","myJudulBapak")
.AddObject("Waktu", "myWaktu")
.AddObject("Tanggal","myTanggal")
.AddObject("Jam","myJam")
.AddObject("Versi","myVersion")
.AddObject("RecBapak","myRecBapak")
.AddObject("KodeBapak","myKodeBapak")
.AddObject("NamaBapak","myNamaBapak")
tambahkan objek label
.AddObject("Titik01","myTitik01")
.AddObject("Titik02","myTitik02")
.AddObject("Titik03","myTitik03")
tambahkan objek textbox
.AddObject("txtKodeBapak","mytxtKodeBapak")
.AddObject("txtNamaBapak","mytxtNamaBapak")
.AddObject("txtNoRecBapak","mytxtNoRecBapak")
.AddObject("txtTotRecBapak","mytxtTotRecBapak")
tambahkan objek grid
.AddObject("GrdGridBapak","myGrdGridBapak")
tambahkan objek button
.AddObject("cmdTop","myCmdTop")
.AddObject("cmdPrev","myCmdPrev")
.AddObject("cmdNext","myCmdNext")
.AddObject("cmdBottom","myCmdBottom")
.AddObject("cmdAdd","myCmdAdd")
.AddObject("cmdEdit","myCmdEdit")
.AddObject("cmdDel","myCmdDel")
.AddObject("cmdAbout","myCmdAbout")
.AddObject("cmdClose","myCmdClose")
Kelompok Anak
tambahkan objek label
.AddObject("JudulAnak","myJudulAnak")
.AddObject("KodeAnak","myKodeAnak")
.AddObject("NamaAnak","myNamaAnak")
.AddObject("TabelCucu","myTabelCucu")
.AddObject("NoRecAnak","myNoRecAnak")
.AddObject("NomorAnak","myNomorAnak")
tambahkan objek label
.AddObject("Titik04","myTitik04")
.AddObject("Titik05","myTitik05")
.AddObject("Titik06","myTitik06")
.AddObject("Titik07","myTitik07")
tambahkan objek textbox
.AddObject("txtKodeAnak","mytxtKodeAnak")
.AddObject("txtNomorAnak","mytxtNomorAnak")
.AddObject("txtNamaAnak","mytxtNamaAnak")
.AddObject("txtNoRecAnak","mytxtNoRecAnak")
.AddObject("txtTotRecAnak","mytxtTotRecAnak")
tambahkan objek grid
.AddObject("GrdGridAnak","myGrdGridAnak")
tambahkan objek button
.AddObject("cmdCucu","myCmdCucu")
tambahkan objek button
.AddObject("cmdTopAnak","myCmdTopAnak")
.AddObject("cmdPrevAnak","myCmdPrevAnak")
.AddObject("cmdNextAnak","myCmdNextAnak")
.AddObject("cmdBottomAnak","myCmdBottomAnak")
.AddObject("cmdAddAnak","myCmdAddAnak")
.AddObject("cmdEditAnak","myCmdEditAnak")
.AddObject("cmdDelAnak","myCmdDelAnak")
.AddObject("cmdAboutAnak","myCmdAboutAnak")
.AddObject("cmdCloseAnak","myCmdCloseAnak")
tampilkan form
.Show
ENDWITH
Start() && aktifkan prosedur Start()
READ EVENTS && aktifkan semua event
RETURN && selesai
definisi objek timer, label, textbox,
optiongroup dan command butto
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.Jam.Caption = TIME()
ENDPROC
ENDDEFINE
KELOMPOK BAPAK
Kelompok Labe
definisi label myJudul
DEFINE CLASS myJudul As Label
Top = 10 && posisi atas
Left = 20 && posisi kiri
Width = 220 && lebar label
Height = 25 && tinggi label
FontBold = .T. && huruf tebal
Caption = "PARENT - CHILD TABLE RELATIONSHIP"
Visible = .T. && tampak di layar monitor
ENDDEFINE
definisi label myVersion
DEFINE CLASS myVersion AS Label
Top = 10 && posisi atas
Left = 240 && posisi kiri
Width = 120 && lebar label
Height = 20 && tinggi label
Caption = "Single User Version" && isi label
Alignment = 1 && rata kanan
Visible = .T. && label tampil
ENDDEFINE
.jpg)
definisi label myJudulBapak
DEFINE CLASS myJudulBapak As Label
Top = 35 && posisi atas
Left = 20 && posisi kiri
Width = 108 && lebar label
Height = 25 && tinggi label
FontBold = .T. && huruf tebal
ForeColor = RGB(0,0,255) && warna huruf
Caption = "PARENT TABLE" && isi Label
Visible = .T. && tampak di layar monitor
ENDDEFINE
definisi label myTanggal
DEFINE CLASS myTanggal AS Label
Top = 35 && posisi atas
Left = 110 && posisi kiri
Width = 190 && lebar label
Height = 20 && tinggi label
Caption = "" && isi label
Alignment = 1 && rata kanan
Visible = .T. && label tampil
ENDDEFINE
definisi label myJam
DEFINE CLASS myJam AS Label
Top = 35 && posisi atas
Left = 310 && posisi kiri
Width = 50 && lebar textbox
Height = 20 && tinggi label
Caption = TIME() && label diisi jam 00:00:00
Alignment = 1 && rata kanan
Visible = .T. && label tampil
ENDDEFINE
definisi label myKodeBapak
DEFINE CLASS myKodeBapak As Label
Top = 60 && posisi atas
Left = 20 && posisi kiri
Width = 40 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Caption = "Kode" && 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 = .T. && huruf tebal
Caption = "Rec. No." && 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 = .T. && huruf tebal
Caption = "Nama" && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
Kelompok Titik Bapak
DEFINE CLASS myTitik01 As Label
Top = 60 && posisi atas
Left = 216 && posisi kiri
Width = 12 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Alignment = 2 && di tengah
Caption = ":" && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTitik02 As Label
Top = 60 && posisi atas
Left = 60 && posisi kiri
Width = 12 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Alignment = 2 && di tengah
Caption = ":" && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTitik03 As Label
Top = 85 && posisi atas
Left = 60 && posisi kiri
Width = 12 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Alignment = 2 && di tengah
Caption = ":" && isi label
Visible = .T. && 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 = .F. && non-aktif
Format = "999" && bentuk tampilan
InputMask = "999" && bentuk masukan
ForeColor = RGB(0,0,255) && warna huruf
DisabledBackColor = RGB(128,255,255) && warna dasar
DisabledForeColor = RGB(255,0,0) && warna depan
Visible = .T. && 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 = .F. && non-aktif
Format = "999999" && bentuk tampilan
InputMask = "999999" && bentuk masukan
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,255) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
TabStop = .F. && tidak bisa di-tab
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTxtTotRecBapak As TextBox
Top = 60 && posisi atas
Left = 300 && posisi kiri
Width = 60 && lebar label
Height = 22 && tinggi label
Alignment = 2 && di kiri textbox
Enabled = .F. && non-aktif
Format = "999999" && bentuk tampilan
InputMask = "999999" && bentuk masukan
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,255) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
TabStop = .F. && tidak bisa di-tab
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTxtNamaBapak As TextBox
Top = 85 && posisi atas
Left = 70 && posisi kiri
Width = 290 && lebar text box
Height = 22 && tinggi text box
MaxLength = 30 && isian maksimum
Enabled = .F. && non-aktif
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,255) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
Visible = .T. && 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 = .F. && tidak bisa dihapus
ReadOnly = .T. && tidak bisa diedit
RecordSource = "Bapak" && sumber tabel Bapak
RecordSourceType = 1 && alias
SplitBar = .F. && tidak bisa displit
Column1.Name = "Column1" && nama kolom 1
Column2.Name = "Column2" && nama kolom 2
Visible = .T. && tampak di layar monitor
PROCEDURE AfterRowColChange && aktif jika ada perubahan
parameter ini harus ada, tidak digunakan
LPARAMETERS nColIndex
RefreshAnakTmp() && aktifkan RefreshAnakTmp()
TampilkanAnak() && aktifkan TampilkanAnak()
TampilkanBapak() && aktifkan TampilkanBapak()
ENDPROC
ENDDEFINE
Kelompok CommandButton Bapak
DEFINE CLASS myCmdTop As CommandButton
Top = 240 && posisi atas
Left = 20 && posisi kiri
Width = 25 && lebar button
Height = 25 && tinggi button
Caption = "|<" && isi button
ToolTipText = "Record Awal" && tips kecil
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
aktifkan prosedur NavigasiBapak
NavigasiBapak("FIRST")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdPrev As CommandButton
Top = _Screen.cmdTop.Top && posisi atas
Left = _Screen.cmdTop.Left + ;
_Screen.cmdTop.Width && posisi kiri
Height = _Screen.cmdTop.Height && tinggi button
Width = _Screen.cmdTop.Width && lebar button
Caption = "<" && isi button
ToolTipText = "Record Sebelumnya" && tips kecil
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
* aktifkan prosedur NavigasiBapak()
NavigasiBapak("PREV")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdNext As CommandButton
Top = _Screen.cmdPrev.Top && posisi atas
Left = _Screen.cmdPrev.Left + ;
_Screen.cmdPrev.Width && posisi kiri
Height = _Screen.cmdPrev.Height && tinggi button
Width = _Screen.cmdPrev.Width && lebar button
Caption = ">" && isi button
ToolTipText = "Record Berikutnya" && tips kecil
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
* aktifkan prosedur NavigasiBapak()
NavigasiBapak("NEXT")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdBottom As CommandButton
Top = _Screen.cmdNext.Top && posisi atas
Left = _Screen.cmdNext.Left + ;
_Screen.cmdNext.Width && posisi kiri
Height = _Screen.cmdNext.Height && tinggi button
Width = _Screen.cmdNext.Width && lebar button
Caption = ">|" && isi button
ToolTipText = "Record Akhir" && tips kecil
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
* aktifkan prosedur NavigasiBapak()
NavigasiBapak("LAST")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdAdd As CommandButton
Top = _Screen.cmdBottom.Top && posisi atas
Left = _Screen.cmdBottom.Left + ;
_Screen.cmdBottom.Width && posisi kiri
Width = _Screen.cmdBottom.Width + 25 && lebar button
Height = _Screen.cmdBottom.Height && tinggi button
Caption = "Add" && isi button
ToolTipText = "Tambah Data" && tips kecil
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
LOCAL nRecPos
SELECT Bapak && aktifkan tabel Bapak
jika jumlah record sudah maksimum, maka:
IF RECCOUNT() >= nMaxRec
TampilkanRecordMax() && tampilkan pesan
ELSE
WITH _Screen && menatur _SCREEN
DO CASE
CASE .cmdAdd.Caption = "Add" && button ADD
aktifkan prosedur ButtonBapak
ButtonBapak(.F.)
aktifkan prosedur ButtonAnak
ButtonAnak(.F.)
mengatur grid
.grdGridBapak.Enabled = .F. && non-aktif
.grdGridAnak.Enabled = .F. && non-aktif
mengatur button
.cmdAdd.Enabled = .T. && button non-aktif
.cmdEdit.Enabled = .T. && button non-aktif
mengatur button
.cmdAdd.Caption = "Save" && button Add
.cmdEdit.Caption = "Cancel" && button Edit
mengatur field
.txtKodeBapak.Value = "" && dikosongkan
.txtNamaBapak.Value = "" && dikosongkan
mengatur field
.txtKodeBapak.Enabled = .T. && non-aktif
.txtNamaBapak.Enabled = .T. && non-aktif
* kursor fokus di field txtKodeBapak
.txtKodeBapak.SETFOCUS
CASE .cmdAdd.Caption = "Save" && button SAVE
jika txtKodeBapak kosong
IF EMPTY(.txtKodeBapak.Value)
TampilkanKodeKosong() && tampil pesan
kursos fokus di field txtKodeBapak
.txtKodeBapak.SetFocus
ELSE && jika txtKodeBapak isi
nRecPos = RECNO() && posisi record
LOCATE FOR Kode = .txtKodeBapak.Value
IF FOUND()
TampilkanKodeSama() && pesan
GO nRecPos && record nRecPos
kursor fokus di txtKodeBapak
.txtKodeBapak.SetFocus
ELSE
APPEND BLANK && tambah satu record
simpan data
REPLACE Bapak.Kode ;
WITH .txtKodeBapak.Value
REPLACE Bapak.Nama ;
WITH .txtNamaBapak.Value
FLUSH && pastikan data disimpan
GO BOTTOM && menuju akhir record
aktifkan prosedur BapakRefresh
BapakRefresh()
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonAnak
ButtonAnak(.T.)
mengatur button
.cmdAdd.Caption = "Add"
.cmdEdit.Caption = "Edit"
mengatur textbox
.txtKodeBapak.Value = Bapak.Kode
.txtNamaBapak.Value = Bapak.Nama
mengatur textbox
.txtKodeBapak.Enabled = .F.
.txtNamaBapak.Enabled = .F.
.grdGridAnak.Enabled = .T.
.grdGridBapak.Enabled = .T.
.grdGridBapak.Refresh && direfresh
ENDIF
ENDIF
ENDCASE
ENDWITH
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdEdit As CommandButton
Top = _Screen.cmdAdd.Top && posisi atas
Left = _Screen.cmdAdd.Left + ;
_Screen.cmdAdd.Width && posisi kiri
Height = _Screen.cmdAdd.Height && tinggi button
Width = _Screen.cmdAdd.Width && lebar button
Caption = "Edit" && isi button
ToolTipText = "Ubah Data" && keterangan pendek
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
SELECT Bapak && aktifkan tabel Bapak
IF RECCOUNT() = 0 && jika file kosong, maka:
TampilkanFileKosong() && tampilkan pesan
ELSE && jika file isi
mengatur _SCREEN
WITH _Screen
DO CASE
CASE .cmdEdit.Caption = "Edit" && Edit
aktifkan prosedur ButtonBapak
ButtonBapak(.F.)
aktifkan prosedur ButtonAnak
ButtonAnak(.F.)
mengatur grid
.grdGridBapak.Enabled = .F. && non-aktif
.grdGridAnak.Enabled = .F. && non-aktif
mengatur button
.cmdEdit.Enabled = .T. && non-aktif
.cmdDel.Enabled = .T. && non-aktiif
mengatur button
.cmdEdit.Caption = "Save"
.cmdDel.Caption = "Cancel"
mengatur textbox
.txtKodeBapak.Value = Bapak.Kode
.txtNamaBapak.Value = Bapak.Nama
mengatur textbox
.txtKodeBapak.Enabled = .T. && non-aktif
.txtNamaBapak.Enabled = .T. && non-aktif
kursor fokus di field txtKodeBapak
.txtKodeBapak.SETFOCUS
CASE .cmdEdit.Caption = "Save" && button Save
simpan data
REPLACE Bapak.Kode WITH .txtKodeBapak.Value
REPLACE Bapak.Nama WITH .txtNamaBapak.Value
FLUSH && pastikan data disimpan
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonAnak
ButtonAnak(.T.)
mengatur button
.cmdEdit.Caption = "Edit"
.cmdDel.Caption = "Del"
mengatur textbox
.txtKodeBapak.Value = Bapak.Kode
.txtNamaBapak.Value = Bapak.Nama
mengatur textbot
.txtKodeBapak.Enabled = .F. && non-aktif
.txtNamaBapak.Enabled = .F. && non-aktif
mengatur grid
.grdGridAnak.Enabled = .T. && aktif
.grdGridBapak.Enabled = .T. && aktif
.grdGridBapak.Refresh && direfresh
OTHERWISE && lainnya
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonAnak
ButtonAnak(.T.)
mengatur button
.cmdAdd.Caption = "Add"
.cmdEdit.Caption = "Edit"
.cmdDel.Caption = "Del"
mengatur textbox
.txtKodeBapak.Value = Bapak.Kode
.txtNamaBapak.Value = Bapak.Nama
mengatur textbox
.txtKodeBapak.Enabled = .F. && non-aktif
.txtNamaBapak.Enabled = .F. && non-aktif
mengatur grid
.grdGridAnak.Enabled = .T. && aktif
.grdGridBapak.Enabled = .T. && aktif
.grdGridBapak.Refresh && direfresh
ENDCASE
ENDWITH
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdDel As CommandButton
Top = _Screen.cmdEdit.Top && posisi atas
Left = _Screen.cmdEdit.Left + ;
_Screen.cmdEdit.Width && posisi kiri
Height = _Screen.cmdEdit.Height && tinggi button
Width = _Screen.cmdEdit.Width && lebar button
Caption = "Del" && isi button
ToolTipText = "Hapus Data" && keterangan pendek
Visible = .T. && 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 .cmdDel.Caption = "Del" && button Del
tampilkan pilihan, YES atau NO
IF MESSAGEBOX("Anda ingin menghapus record?",;
4+32+256,"Konfirmasi")=6 && YES
SELECT Bapak && aktifkan tabel Bapak
xRecPos = RECNO() && posisi record
DELETE && hapus record
PACK && pastikan record dihapus
jika file kosong
IF RECCOUNT() = 0
TampilkanFileKosong() && pesan
ELSE
jika record posisi > jumlah record
IF xRecPos > RECCOUNT()
GO BOTTOM && record akhir
ELSE
GO xRecPos && record posisi
ENDIF
.grdGridBapak.RecordSource="Bapak"
.grdGridBapak.RecordSourceType = 1
.grdGridBapak.ColumnCount = 2
.grdGridBapak.Column1.Width = 50
.grdGridBapak.Column2.Width = 300
.grdGridBapak.Column1.Header1.Caption=;
"KODE"
.grdGridBapak.Column2.Header1.Caption=;
"NAMA"
mengatur textbox
.txtNoRecBapak.Value = RECNO()
.txtTotRecBapak.Value = RECCOUNT()
.txtKodeBapak.Value = Bapak.Kode
.txtNamaBapak.Value = Bapak.Nama
mengatur textbox
.txtKodeBapak.Enabled = .F.
.txtNamaBapak.Enabled = .F.
mengatur grid
.grdGridBapak.Enabled = .T.
* filter data tabel Anak ke dalam
* tabel AnakTmp
* perintah SQL
SELECT * FROM Anak ;
INTO TABLE AnakTmp ;
WHERE Kode = Bapak.Kode
mengatur grid
.grdGridAnak.RecordSource = "AnakTmp"
.grdGridAnak.RecordSourceType = 1
.grdGridAnak.ColumnCount = 3
.grdGridAnak.Column1.Width = 50
.grdGridAnak.Column2.Width = 70
.grdGridAnak.Column3.Width = 300
.grdGridAnak.Column1.Header1.Caption=;
"KODE"
.grdGridAnak.Column2.Header1.Caption=;
"KD.ANAK"
.grdGridAnak.Column3.Header1.Caption=;
"NAMA ANAK"
mengatur grid
.grdGridBapak.Refresh && direfresh
.grdGridAnak.Refresh && direfresh
mengatur textbox
.txtKodeAnak.Value = AnakTmp.Kode
.txtNomorAnak.Value = AnakTmp.KdAnak
.txtNamaAnak.Value = AnakTmp.NmAnak
ENDIF
ENDIF
OTHERWISE
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonBapak
ButtonAnak(.T.)
mengatur textbox
.txtKodeBapak.Value = Bapak.Kode
.txtNamaBapak.Value = Bapak.Nama
mengatur textbox
.txtKodeBapak.Enabled = .F. && non-aktif
.txtNamaBapak.Enabled = .F. && non-aktif
mengatur button
.cmdEdit.Caption = "Edit" && button Edit
.cmdDel.Caption = "Del" && button Del
mengatur grid
.grdGridAnak.Enabled = .T. && aktif
.grdGridBapak.Enabled = .T. && aktif
.grdGridBapak.Refresh && direfresh
ENDCASE
ENDWITH
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdAbout As CommandButton
Top = _Screen.cmdDel.Top && posisi atas
Left = _Screen.cmdDel.Left + ;
_Screen.cmdDel.Width && posisi kiri
Height = _Screen.cmdDel.Height && tinggi button
Width = _Screen.cmdDel.Width && lebar button
Caption = "About" && isi button
ToolTipText = "Tentang Program" && tips kecil
Visible = .T. && tampak di layar monitor
prosedur jika button diklik
PROCEDURE Click
tampilkan pesan
MESSAGEBOX("Program ini disumbangkan kepada"+;
CHR(13)+"komunitas programer di Indonesia."+;
CHR(13)+"Semoga bermanfaat.....",0,"About")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdClose As CommandButton
Top = _Screen.cmdAbout.Top && posisi atas
Left = _Screen.cmdAbout.Left + ;
_Screen.cmdAbout.Width && posisi kiri
Height = _Screen.cmdAbout.Height && tinggi button
Width = _Screen.cmdAbout.Width && lebar button
Caption = "Close" && isi button
Cancel = .T. && aktif jika tombol ESC ditekan
ToolTipText = "Selesai, kembali ke Windows" && tips
Visible = .T. && 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
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
ForeColor = RGB(255,0,0) && warna huruf
Caption = "CHILD TABLE" && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myKodeAnak As Label
Top = 305 && posisi atas
Left = 24 && posisi kiri
Width = 36 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Caption = "Kode" && isi label
Visible = .T. && 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 = .T. && huruf tebal
Caption = "Rec.No." && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myNomorAnak As Label
Top = 330 && posisi atas
Left = 24 && posisi kiri
Width = 36 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Caption = "No." && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTabelCucu As Label
Top = 330 && posisi atas
Left = 168 && posisi kiri
Width = 150 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Caption = "Pengelolaan Tabel Cucu" && isi label
Visible = .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. && huruf tebal
Caption = "MtKul." && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
Kelompok Titik Anak
DEFINE CLASS myTitik04 As Label
Top = 305 && posisi atas
126
Left = 60 && posisi kiri
Width = 12 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Alignment = 2 && isi di tengah label
Caption = ":" && isi label
Visible = .T. && 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. && huruf tebal
Alignment = 2 && isi di tengah label
Caption = ":" && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTitik06 As Label
Top = 330 && posisi atas
Left = 60 && posisi kiri
Width = 12 && lebar label
Height = 22 && tinggi label
FontBold = .T. && huruf tebal
Alignment = 2 && isi di tengah label
Caption = ":" && isi label
Visible = .T. && 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 = .T. && huruf tebal
Alignment = 2 && isi di tengah label
Caption = ":" && isi label
Visible = .T. && tampak di layar monitor
ENDDEFINE
Kelompok TextBox Anak
DEFINE CLASS myTxtKodeAnak As TextBox
Top = 305 && posisi atas
Left = 70 && posisi kiri
Width = 60 && lebar textbox
Height = 22 && tinggi textbox
Alignment = 0 && isi di kiri textbox
Enabled = .F. && di-non-aktifkan
Format = "999" && format tampilan
InputMask = "999" && input tampilan
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,128) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTxtNoRecAnak As TextBox
Top = 305 && posisi atas
Left = 230 && posisi kiri
Width = 60 && lebar textbox
Height = 22 && tinggi textbox
Alignment = 2 && isi di kanan textbox
Enabled = .F. && di-non-aktifkan
Format = "999999" && format tampilan
InputMask = "999999" && input tampilan
TabStop = .F. && tidak bisa ditab
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,128) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTxtTotRecAnak As TextBox
Top = 305 && posisi atas
Left = 300 && posisi kiri
Width = 60 && lebar textbox
Height = 22 && tinggi textbox
Alignment = 2 && isi di kanan textbox
Enabled = .F. && di-non-aktifkan
Format = "999999" && format tampilan
InputMask = "999999" && input tampilan
TabStop = .F. && tidak bisa ditab
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,128) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
Visible = .T. && tampak di layar monitor
ENDDEFINE
DEFINE CLASS myTxtNomorAnak As ComboBox
Top = 330 && posisi atas
Left = 70 && posisi kiri
Width = 60 && lebar textbox
Height = 22 && tinggi textbox
Alignment = 0 && isi di kiri textbox
Enabled = .F. && di-non-aktifkan
Format = "" && format tampilan
InputMask = "" && input tampilan
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,128) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
Visible = .T. && tampak di layar monitor
aktif jika terjadi perubahan
PROCEDURE InteractiveChange
isi field Nama tabel Cucu.dbf
_Screen.TxtNamaAnak.Value = 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 = .F. && di-non-aktifkan
Format = "" && format tampilan
InputMask = "" && input tampilan
MaxLength = 35 && panjang maksimum
ForeColor = RGB(0,0,255) && warna huruf
BackColor = RGB(255,255,255) && warna dasar
DisabledBackColor = RGB(128,255,128) && warna non-aktif
DisabledForeColor = RGB(255,0,0) && warna non-aktif
Visible = .T. && 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 = .F. && tidk bisa dihapus
ReadOnly = .T. && cuma bisa dibaca
RecordSource = "AnakTmp" && tabel AnakTmp.dbf
RecordSourceType = 1 && alias
SplitBar = .F. && tidak ada splitbar
TabStop = .F. && tidak ada tabstop
Column1.Name = "Column1" && nama kolom 1
Column2.Name = "Column2" && nama kolom 2
Column3.Name = "Column3" && nama kolom 3
Visible = .T. && tampak di layar monitor
PROCEDURE AfterRowColChange && jika terjadi perubahan
* parameter ini harus ada, 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 = "..." && isi button
ToolTipText = "Pengelolaan Tabel Cucu" && tip kecil
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
oKusForm = CREATEOBJECT("myFrmKusForm") && buat form
oKusForm.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 = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
aktifkan prosedur NavigasiAnak
NavigasiAnak("FIRST")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdPrevAnak As CommandButton
Top = _Screen.cmdTopAnak.Top && posisi atas
Left = _Screen.cmdTopAnak.Left + ;
_Screen.cmdTopAnak.Width && posisi kiri
Width = _Screen.cmdTopAnak.Width && lebar button
Height = _Screen.cmdTopAnak.Height && tinggi button
Caption = "<" && isi button
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
* aktifkan prosedur NavigasiAnak()
NavigasiAnak("PREV")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdNextAnak As CommandButton
Top = _Screen.cmdPrevAnak.Top && posisi atas
Left = _Screen.cmdPrevAnak.Left + ;
_Screen.cmdPrevAnak.Width && posisi kiri
Width = _Screen.cmdPrevAnak.Width && lebar button
Height = _Screen.cmdPrevAnak.Height && tinggi button
Caption = ">" && isi button
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
aktifkan prosedur NavigasiAnak
NavigasiAnak("NEXT")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdBottomAnak As CommandButton
Top = _Screen.cmdNextAnak.Top && posisi atas
Left = _Screen.cmdNextAnak.Left + ;
_Screen.cmdNextAnak.Width && posisi kiri
Width = _Screen.cmdNextAnak.Width && lebar button
Height = _Screen.cmdNextAnak.Height && tinggi button
Caption = ">|" && isi button
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
* aktifkan prosedur NavigasiAnak()
NavigasiAnak("LAST")
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdAddAnak As CommandButton
Top = _Screen.cmdBottomAnak.Top && posisi atas
Left = _Screen.cmdBottomAnak.Left + ;
_Screen.cmdBottomAnak.Width && posisi kiri
Width = _Screen.cmdBottomAnak.Width + 25 && lebar
Height = _Screen.cmdBottomAnak.Height && tinggi button
Caption = "Add" && isi button
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
variabel lokal
LOCAL xKodeAnak, xNomorAnak, xNamaAnak
SELECT AnakTmp && aktifkan tabel AnakTmp
jika jumlah record sudah maksimum, maka:
IF RECCOUNT() >= nMaxRec
Tampilkan pesan
TampilkanRecordMax()
ELSE
mengatur form _Screen
WITH _Screen
DO CASE
CASE .cmdAddAnak.Caption = "Add" && Add
aktifkan prosedur ButtonBapak
ButtonBapak(.F.)
aktifkan prosedur ButtonAnak
ButtonAnak(.F.)
.grdGridBapak.Enabled = .F. && non-aktif
.grdGridAnak.Enabled = .F. && non-aktif
.cmdAddAnak.Enabled = .T. && aktif
.cmdEditAnak.Enabled = .T. && aktif
.cmdAddAnak.Caption = "Save"
.cmdEditAnak.Caption = "Cancel"
.txtKodeAnak.Value = .txtKodeBapak.Value
.txtNomorAnak.Value = "" && textbox
.txtNamaAnak.Value = "" && textbox
.txtNomorAnak.Enabled = .T. && aktif
.txtNamaAnak.Enabled = .T. && aktif
kursor berada di filed Nomor
.txtNomorAnak.Setfocus
CASE .cmdAddAnak.Caption = "Save" && Save
variabel sementara
xKodeAnak = .txtKodeAnak.Value
xNomorAnak = .txtNomorAnak.Value
xNamaAnak = .txtNamaAnak.Value
perintah SQL-tambah data tabel Anak.dbf
INSERT INTO Anak (Kode, KdAnak, NmAnak) ;
VALUES (xKodeAnak, xNomorAnak, xNamaAnak)
SELECT AnakTmp && tabel AnakTmp.dbf
APPEND BLANK && tambahkan satu record
isi dengan variabel berikut ini
REPLACE AnakTmp.Kode ;
WITH .txtKodeAnak.Value && simpan data
REPLACE AnakTmp.KdAnak ;
WITH .txtNomorAnak.Value &&simpan data
REPLACE AnakTmp.NmAnak ;
WITH .txtNamaAnak.Value && simpan data
GO BOTTOM && menuju record akhir
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonAnak
ButtonAnak(.T.)
mengatur button dan textbox
.cmdAddAnak.Caption = "Add"
.cmdEditAnak.Caption = "Edit"
.txtKodeAnak.Value = AnakTmp.Kode
.txtNomorAnak.Value = AnakTmp.KdAnak
.txtNamaAnak.Value = AnakTmp.NmAnak
.txtNomorAnak.Enabled = .F. && non-aktif
.txtNamaAnak.Enabled = .F. && non-aktif
.grdGridBapak.Enabled = .T. && aktif
.grdGridAnak.Enabled = .T. && aktif
.grdGridAnak.Refresh && grid direfresh
ENDCASE
ENDWITH
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdEditAnak As CommandButton
Top = _Screen.cmdAddAnak.Top && posisi atas
Left = _Screen.cmdAddAnak.Left + ;
_Screen.cmdAddAnak.Width && posisi kiri
Width = _Screen.cmdAddAnak.Width && lebar button
Height = _Screen.cmdAddAnak.Height && tinggi button
Caption = "Edit" && isi button
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
variabel lokal
LOCAL xKodeAnak, xNomorAnak, xNamaAnak
SELECT AnakTmp && aktifkan tabel AnakTmp.dbf
IF RECCOUNT() = 0 && jika file kosong, maka:
TampilkanFileKosong() && tampilkan pesan
ELSE && jika file isi, maka:
mengatur form _Screen
WITH _Screen
DO CASE
CASE .cmdEditAnak.Caption = "Edit" && Edit
aktifkan prosedur ButtonBapak
ButtonBapak(.F.)
aktifkan prosedur ButtonAnak
ButtonAnak(.F.)
mengatur grid
.grdGridBapak.Enabled = .F. && non-aktif
.grdGridAnak.Enabled = .F. && non-aktif
.cmdEditAnak.Enabled = .T. && aktif
.cmdDelAnak.Enabled = .T. && aktif
.cmdEditAnak.Caption = "Save"
.cmdDelAnak.Caption = "Cancel"
.txtKodeAnak.Value = AnakTmp.Kode
.txtNomorAnak.Value = AnakTmp.KdAnak
.txtNamaAnak.Value = AnakTmp.NmAnak
.txtKodeAnak.Enabled = .F. && non-aktif
.txtNomorAnak.Enabled = .T. && aktif
.txtNamaAnak.Enabled = .F. && aktif
kursor berada di filed Nomor
.txtNomorAnak.Setfocus
CASE .cmdEditAnak.Caption = "Save" && Save
variabel sementara
xKodeAnak = .txtKodeAnak.Value
xNomorAnak = .txtNomorAnak.Value
xNamaAnak = .txtNamaAnak.Value
perintah SQL-update data tabel Anak.dbf
UPDATE Anak SET KdAnak = xNomorAnak, ;
NmAnak = xNamaAnak WHERE Kode = xKodeAnak
SELECT AnakTmp && tabel AnakTmp.dbf
REPLACE AnakTmp.KdAnak ;
WITH .txtNomorAnak.Value && simpan data
REPLACE AnakTmp.NmAnak ;
WITH .txtNamaAnak.Value && simpan data
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonAnak
ButtonAnak(.T.)
mengatur button dan textbox
.cmdEditAnak.Caption = "Edit"
.cmdDelAnak.Caption = "Del"
.txtKodeAnak.Value = AnakTmp.Kode
.txtNomorAnak.Value = AnakTmp.KdAnak
.txtNamaAnak.Value = AnakTmp.NmAnak
.txtKodeAnak.Enabled = .F. && non-aktif
.txtNomorAnak.Enabled = .F. && non-aktif
.txtNamaAnak.Enabled = .F. && non-aktif
.grdGridBapak.Enabled = .T. && grid aktif
.grdGridAnak.Enabled = .T. && grid aktif
.grdGridAnak.Refresh && grid direfresh
OTHERWISE
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonAnak
ButtonAnak(.T.)
mengatur button dan textbox
.cmdAddAnak.Caption = "Add"
.cmdEditAnak.Caption = "Edit"
.cmdDelAnak.Caption = "Del"
.txtKodeAnak.Value = AnakTmp.Kode
.txtNomorAnak.Value = AnakTmp.KdAnak
.txtNamaAnak.Value = AnakTmp.NmAnak
.txtKodeAnak.Enabled = .F. && non-aktif
.txtNomorAnak.Enabled = .F. && non-aktif
.txtNamaAnak.Enabled = .F. && non-aktif
.grdGridBapak.Enabled = .T. && grid aktif
.grdGridAnak.Enabled = .T. && grid aktif
.grdGridAnak.Refresh && grid direfresh
ENDCASE
ENDWITH
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdDelAnak As CommandButton
Top = _Screen.cmdEditAnak.Top && posisi atas
Left = _Screen.cmdEditAnak.Left + ;
_Screen.cmdEditAnak.Width && posisi kiri
Width = _Screen.cmdEditAnak.Width && lebar button
Height = _Screen.cmdEditAnak.Height && tinggi button
Caption = "Del" && isi button
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
SELECT AnakTmp && aktifkan tabel AnakTmp.dbf
IF RECCOUNT() = 0 && jika file kosong, maka:
TampilkanFileKosong() && tampilkan pesan
ELSE && jika file isi, maka:
mengatur form _Screen
WITH _Screen
DO CASE
CASE .cmdDelAnak.Caption = "Del" && button Del
tampilkan pilihan YES atau NO
IF MESSAGEBOX("Anda ingin menghapus record?",;
4+32+256,"Konfirmasi") = 6 && pilih YES
xRecPos = RECNO() && posisi record
SELECT AnakTmp && aktifkan tabel AnakTmp
DELETE && hapus record
PACK && pastikan record dihapus
jika file kosong, maka:
IF RECCOUNT() = 0
Tampilkan pesan
TampilkanFileKosong
ELSE && jika file isi, 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
.grdGridAnak.RecordSource = ;
"AnakTmp" && isi grid
.grdGridAnak.RecordSourceType=1
.grdGridAnak.ColumnCount = 3
.grdGridAnak.Column1.Width = 50
.grdGridAnak.Column2.Width = 50
.grdGridAnak.Column3.Width = 180
judul kolom 1, 2 dan 3
.grdGridAnak.Column1.Header1.Caption=;
"KODE"
.grdGridAnak.Column2.Header1.Caption=;
"KD.ANAK"
.grdGridAnak.Column3.Header1.Caption=;
"NAMA ANAK"
.grdGridAnak.Refresh && direfresh
ENDIF
OTHERWISE
aktifkan prosedur ButtonBapak
ButtonBapak(.T.)
aktifkan prosedur ButtonAnak
ButtonAnak(.T.)
mengatur button, textbox dan grid
.cmdEditAnak.Caption = "Edit"
.cmdDelAnak.Caption = "Del"
.txtKodeBapak.Value = Bapak.Kode
.txtNamaBapak.Value = Bapak.Nama
.txtNomorAnak.Enabled = .F. && non-aktif
.txtNamaAnak.Enabled = .F. && non-aktif
.grdGridBapak.Enabled = .T. && grid aktif
.grdGridAnak.Enabled = .T. && grid aktif
.grdGridAnak.Refresh && grid direfresh
ENDCASE
ENDWITH
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS myCmdAboutAnak As CommandButton
Top = _Screen.cmdDelAnak.Top && posisi atas
Left = _Screen.cmdDelAnak.Left + ;
_Screen.cmdDelAnak.Width && posisi kiri
Width = _Screen.cmdDelAnak.Width && lebar button
Height = _Screen.cmdDelAnak.Height && tinggi button
Caption = "About" && isi button
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
* tampilkan pesan
MESSAGEBOX("Program ini disumbangkan kepada"+;
CHR(13)+"komunitas programer di Indonesia."+;
CHR(13)+"Semoga bermanfaat.....",0,"About")
ENDPROC
ENDDEFINE
definisi sub-class dari myCmdClose
duplikasi dari cmdClose
DEFINE CLASS myCmdCloseAnak As myCmdClose
Top = _Screen.cmdAboutAnak.Top && posisi atas
Left = _Screen.cmdAboutAnak.Left + ;
_Screen.cmdAboutAnak.Width && posisi kiri
Width = _Screen.cmdAboutAnak.Width && lebar button
Height = _Screen.cmdAboutAnak.Height && tinggi button
Caption = "Close" && isi button
FontItalic = .T. && bentuk huruf miring
Visible = .T. && tampak di layar monitor
PROCEDURE Click && aktif jika button diklik
Scope Resolution Operator
aktifkan prosedur Click dari button myCmdClose
myCmdClose::Click
ENDPROC
ENDDEFINE
Kelompok Prosedur-prosedur
prosedur Start
PROCEDURE Start
CLOSE TABLES ALL && tutup semua tabel
periksa, jika file Bapak.dbf tidak ada, maka:
IF NOT FILE("Bapak.dbf")
buat file baru Bapak.dbf
CREATE TABLE Bapak( Kode C(3), Nama C(30) )
ENDIF
periksa, jika file Anak.dbf tidak ada, maka:
IF NOT FILE("Anak.dbf")
buat file baru Anak.dbf
CREATE TABLE Anak(Kode C(3),KdAnak C(3),NmAnak C(30))
ENDIF
periksa, jika file Cucu.dbf tidak ada, maka:
IF NOT FILE("Cucu.dbf")
buat file baru Cucu.dbf
CREATE TABLE Cucu( KdCucu C(3), NmCucu C(30))
ENDIF
CLOSE TABLES ALL && tutup semua tabel
USE Cucu ALIAS Cucu EXCLUSIVE IN 0 && tabel Cucu.dbf
USE Anak ALIAS Anak EXCLUSIVE IN 0 && tabel Anak.dbf
USE Bapak ALIAS Bapak EXCLUSIVE IN 0 && tabel Bapak.dbf
perintah SQL, mengambil data dari tabel Anak.dbf
SELECT FROM Anak INTO TABLE AnakTmp ;
WHERE Kode = Bapak.Kode && perintah SQL
mengatur from _Screen
WITH _Screen
.Tanggal.Caption = TampilkanTanggal() && tanggal
.grdGridBapak.RecordSource = "Bapak" && Bapak.dbf
.grdGridBapak.RecordSourceType = 1 && alias
.grdGridBapak.ColumnCount = 2 && jumlah kolom
.grdGridBapak.Column1.Width = 50 && lebar kolom 1
.grdGridBapak.Column2.Width = 260 && lebar kolom 2
.grdGridBapak.Column1.Header1.Caption = "KODE"
.grdGridBapak.Column2.Header1.Caption = "NAMA"
.grdGridAnak.RecordSource = "AnakTmp" && AnakTmp.dbf
.grdGridAnak.RecordSourceType = 1 && alias
.grdGridAnak.ColumnCount = 3 && jumlah kolom
.grdGridAnak.Column1.Width = 50 && lebar kolom 1
.grdGridAnak.Column2.Width = 50 && lebar kolom 2
.grdGridAnak.Column3.Width = 210 && lebar kolom 3
.grdGridAnak.Column1.Header1.Caption = "KODE"
.grdGridAnak.Column2.Header1.Caption = "KD.ANAK"
.grdGridAnak.Column3.Header1.Caption = "NAMA ANAK"
.txtNomorAnak.RowSource = "Cucu" && tabel Cucu.dbf
.txtNomorAnak.RowSourceType = 2 && alias
.txtNomorAnak.ColumnCount = 2 && jumlah kolom
.txtNomorAnak.ColumnWidths = "50,200" && lebar kolom
.txtNomorAnak.DisplayCount = 10 && jumlah ditampilkan
.grdGridBapak.Refresh && grid direfresh
.grdGridAnak.Refresh && grid direfresh
ENDWITH
TampilkanAnak() && aktifkan prosedur TampilkanAnak()
TampilkanBapak() && aktifkan prosedur TampilkanBapak()
ENDPROC
prosedur Stop
PROCEDURE Stop
RefreshAnakTmp() && aktifkan prosedur RefreshAnakTmp()
SELECT Bapak && aktifkan tabel Bapak
jika jumlah record maksimum, 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, 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
.grdGridBapak.RecordSource = "" && kosongkan
.grdGridAnak.RecordSource = "" && kosongkan
.txtNomorAnak.RowSource = "" && kosongkan
ENDWITH
CLOSE TABLES ALL && tutup semua tabel
DELETE FILE AnakTmp.DBF && hapus file AnakTmp.dbf
CLEAR EVENTS && hapus semua event
QUIT && selesai, keluar ke Windows
ENDPROC
prosedur NavigasiBapak
PROCEDURE NavigasiBapak
PARAMETERS xPar
SELECT Bapak && aktifkan tabel Bapak.dbf
IF RECCOUNT() = 0 && jika file kosong, maka:
TampilkanFileKosong() && tampilkan pesan
ELSE && jika file isi, maka:
DO CASE
CASE xPar = "FIRST"
jika posisi di awal record
IF RECNO() = 1
TampilkanTopOfFile() && tampilkan pesan
ELSE && jika tidak diposisi awal record
GoRecord(xPar) && menuju awal record
ENDIF
CASE xPar = "PREV"
jika posisi di awal record
IF RECNO() = 1
TampilkanTopOfFile() && tampilkan pesan
ELSE && jika tidak diposisi awal record
GoRecord(xPar) && menuju record sebelumnya
ENDIF
CASE xPar = "NEXT"
jika posisi di akhir record
IF RECNO() = RECCOUNT()
TampilkanEndOfFile() && tampilkan pesan
ELSE && jika tidak diposisi akhir record
GoRecord(xPar) && menuju record berikutnya
ENDIF
CASE xPar = "LAST"
jika posisi di akhir record
IF RECNO() = RECCOUNT()
TampilkanEndOfFile() && tampilkan pesan
ELSE && jika tidak diposisi akhir record
GoRecord(xPar) && menuju akhir record
ENDIF
ENDCASE
RefreshAnakTmp() && aktifkan RefreshAnakTmp()
TampilkanAnak() && aktifkan TampilkanAnak()
TampilkanBapak() && aktifkan TampilkanBapak()
ENDIF
ENDPROC
prosedur NavigasiAnak
PROCEDURE NavigasiAnak
PARAMETERS xPar && menerima kiriman
SELECT AnakTmp && aktifkan tabel AnakTmp.dbf
IF RECCOUNT() = 0 && jika file kosong, maka:
TampilkanFileKosong() && tampilkan pesan
ELSE && jika file isi, maka:
DO CASE
CASE xPar = "FIRST"
jika posisi di awal record
IF RECNO() = 1
TampilkanTopOfFile() && tampilkan pesan
ELSE && jika tidak diposisi awal record
GoRecord(xPar) && menuju awal record
ENDIF
CASE xPar = "PREV"
jika posisi di awal record
IF RECNO() = 1
TampilkanTopOfFile() && tampilkan pesan
ELSE && jika tidak diposisi awal record
GoRecord(xPar) && menuju record sebelumnya
ENDIF
CASE xPar = "NEXT"
jika posisi di akhir record
IF RECNO() = RECCOUNT()
TampilkanEndOfFile() && tampilkan pesan
ELSE && jika tidak diposisi akhir record
GoRecord(xPar) && menuju record berikutnya
ENDIF
CASE xPar = "LAST"
jika posisi di akhir record
IF RECNO() = RECCOUNT()
TampilkanEndOfFile() && tampilkan pesan
ELSE && jika tidak diposisi akhir record
GoRecord(xPar) && menuju akhir record
ENDIF
ENDCASE
aktifkan prosedur TampilkanAnak
TampilkanAnak
ENDIF
ENDPROC
prosedur TampilkanBapak
PROCEDURE TampilkanBapak
SELECT Bapak && aktifkan tabel Bapak.dbf
WITH _Screen
IF RECCOUNT() = 0
.txtNoRecBapak.Value = 0 && isi textbox NoRec
.txtTotRecBapak.Value = 0 && isi textbox TotRec
.txtKodeBapak.Value = "" && isi textbox Kode
.txtNamabapak.Value = "" && isi textbox Nama
ELSE
.txtNoRecBapak.Value = RECNO() && NoRec
.txtTotRecBapak.Value = RECCOUNT() && TotRec
.txtKodeBapak.Value = Bapak.Kode && Kode
.txtNamaBapak.Value = Bapak.Nama && Nama
ENDIF
.grdGridBapak.Refresh && grid direfresh
ENDWITH
ENDPROC
prosedur TampilkanAnak
PROCEDURE TampilkanAnak
SELECT AnakTmp && aktifkan tabel AnakTmp.dbf
mengatur form _Screen
WITH _Screen
IF RECCOUNT() = 0 && jika file kosong, maka:
.txtNoRecAnak.Value = 0 && isi textbox NoRec
.txtTotRecAnak.Value = 0 && isi textbox TotRec
.txtKodeAnak.Value = "" && isi textbox Kode
.txtNomorAnak.Value = "" && isi textbox Nomor
.txtNamaAnak.Value = "" && isi textbox Nama
ELSE
.txtNoRecAnak.Value = RECNO() && NoRec
.txtTotRecAnak.Value = RECCOUNT() && TotRec
.txtKodeAnak.Value = AnakTmp.Kode && Kode
.txtNomorAnak.Value = AnakTmp.KdAnak && Nomor
.txtNamaAnak.Value = AnakTmp.NmAnak && Nama
ENDIF
.grdGridAnak.Refresh && grid direfresh
ENDWITH
ENDPROC
prosedur BapakRefresh
PROCEDURE BapakRefresh
SELECT Bapak && aktifkan tabel Bapak.dbf
N = RECCOUNT() && jumlah record
xUrut = .F. && variabel penanda (switching)
proses pengurutan BUBBLE SORT
untuk jumlah record 1.000 = 00:01:00
DO WHILE xUrut = .F.
xUrut = .T.
FOR I = 1 TO ( N - 1 )
GO I && menuju record I
xKode = Bapak.Kode && ambil nilai Kode
xNama = Bapak.Nama && ambil nilai Nama
GO ( I + 1 ) && menuju record (I+1)
yKode = Bapak.Kode && ambil nilai Kode
yNama = Bapak.Nama && ambil nilai Nama
IF xKode > yKode
GO I && menuju record I
REPLACE Bapak.Kode WITH yKode && simpan yKode
REPLACE Bapak.Nama WITH yNama && simpan yNama
GO ( I + 1 ) && menuju record (I+1)
REPLACE Bapak.Kode WITH xKode && simpan xKode
REPLACE Bapak.Nama WITH xNama && simpan xNama
xUrut = .F.
ENDIF
NEXT
ENDDO
ENDPROC
prosedur RefreshAnakTmp
menghapus data dari tabel Anak
DELETE FROM Anak WHERE Kode=_Screen.txtKodeBapak.Value
mengisi data ke tabel Anak dari tabel AnakTmp
INSERT INTO Anak (Kode, KdAnak, NmAnak) ;
SELECT Kode, KdAnak, NmAnak ;
FROM AnakTmp && perintah SQL
SELECT Anak && aktifkan tabel Anak
PACK && pastikan data terhapus dari tabel Anak
memfilter tabel Anak ke dalam tabel AnakTmp
SELECT * FROM Anak INTO TABLE AnakTmp ;
WHERE Kode = Bapak.Kode ;
ORDER BY KdAnak && perintah SQL
SELECT AnakTmp && aktifkan tabel AnakTmp
mengatur form _Screen
WITH _Screen
.txtKodeAnak.Value = AnakTmp.Kode && textbox Kode
.txtNomorAnak.Value = AnakTmp.KdAnak && textbox Nomor
.txtNamaAnak.Value = AnakTmp.NmAnak && textbox Nama
memperbaiki grid grdGridAnak
.grdGridAnak.RecordSource = "AnakTmp" && AnakTmp
.grdGridAnak.RecordSourceType = 1 && alias
.grdGridAnak.ColumnCount = 3 && jumlah kolom
.grdGridAnak.Column1.Width = 50 && lebar kolom 1
.grdGridAnak.Column2.Width = 70 && lebar kolom 2
.grdGridAnak.Column3.Width = 300 && lebar kolom 3
.grdGridAnak.Column1.Header1.Caption = "KODE"
.grdGridAnak.Column2.Header1.Caption = "KD.ANAK"
.grdGridAnak.Column3.Header1.Caption = "NAMA ANAK"
.grdGridAnak.Refresh && grid direfresh
ENDWITH
TampilkanAnak() && aktifkan prosedur TampilkanAnak()
ENDPROC
prosedur ButtonBapak
PROCEDURE ButtonBapak
PARAMETERS xPar && menerima variabel True/False
mengatur Button True/False
WITH _Screen
.cmdTop.Enabled = xPar && button ON/OFF
.cmdPrev.Enabled = xPar && button ON/OFF
.cmdNext.Enabled = xPar && button ON/OFF
.cmdBottom.Enabled = xPar && button ON/OFF
.cmdAdd.Enabled = xPar && button ON/OFF
.cmdEdit.Enabled = xPar && button ON/OFF
.cmdDel.Enabled = xPar && button ON/OFF
.cmdAbout.Enabled = xPar && button ON/OFF
.cmdClose.Enabled = xPar && button ON/OFF
ENDWITH
ENDPROC
prosedur ButtonAnak
PROCEDURE ButtonAnak
PARAMETERS xPar && menerima variabel True/False
mengatur Button True/False
WITH _Screen
.cmdCucu.Enabled = xPar
.cmdTopAnak.Enabled = xPar && button ON/OFF
.cmdPrevAnak.Enabled = xPar && button ON/OFF
.cmdNextAnak.Enabled = xPar && button ON/OFF
.cmdBottomAnak.Enabled = xPar && button ON/OFF
.cmdAddAnak.Enabled = xPar && button ON/OFF
.cmdEditAnak.Enabled = xPar && button ON/OFF
.cmdDelAnak.Enabled = xPar && button ON/OFF
.cmdAboutAnak.Enabled = xPar && button ON/OFF
.cmdCloseAnak.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,233,216) && warna dasar
AutoCenter = .T. && form di tengah
ControlBox = .F. && button controbox dihilangkan
Closable = .F. && button close dihilangkan
Movable = .T. && bisa dipindahkan
MinButton = .F. && tombol minimum non-aktif
MaxButton = .F. && tombol maksimum non-aktif
ShowTips = .T. && tampilkan tips pendek
WindowType = 1 && window type
mengisi objek ke dalam form dengan cara yang lain
definisi timer myWaktu
ADD OBJECT myWaktu AS Timer WITH ;
Top = 0, ;
Left = 0, ;
Name = "Waktu", ;
Interval = 1000
tambahkan label myJudul
ADD OBJECT lblMyJudul AS Label WITH ;
Caption = "TABEL CUCU", ;
FontName = "Arial", ;
FontBold = .T., ;
FontSize = 10, ;
ForeColor = RGB(0,0,0), ;
Left = 10, ;
Top = 10, ;
Width = 100, ;
Height = 22, ;
Visible = .T.
definisi label myTanggal
ADD OBJECT myTanggal AS Label WITH ;
Top = 10, ;
Left = 100, ;
Width = 185, ;
Height = 20, ;
Caption = "", ;
FontName = "Arial", ;
Name = "Tanggal", ;
Alignment = 1, ;
Visible = .T.
definisi label myJam
ADD OBJECT myJam AS Label WITH ;
Top = 10, ;
Left = 290, ;
Width = 50, ;
Height = 20, ;
Caption = TIME(), ;
FontName = "Arial", ;
Name = "Jam", ;
Alignment = 1, ;
Visible = .T.
tambahkan label myNoRec
ADD OBJECT lblMyNoRec AS Label WITH ;
Caption = "No.Rec.:", ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = RGB(0,0,0), ;
Left = 175, ;
Top = 35, ;
Width = 70, ;
Height = 20, ;
Visible = .T.
tambahkan textbox myNoRec
ADD OBJECT txtMyNoRec AS TextBox WITH ;
Name = "txtNoRec", ;
Value = 0, ;
FontName = "Arial", ;
FontSize = 9, ;
DisabledForeColor = RGB(255,0,0), ;
DisabledBackColor = RGB(224,224,224), ;
Enabled = .F., ;
Left = 235, ;
Top = 35, ;
Width = 50, ;
Height = 24, ;
MaxLength = 5, ;
Visible = .T.
tambahkan textbox myTotRec
ADD OBJECT txtMyTotRec AS TextBox WITH ;
Name = "txtTotRec", ;
Value = 0, ;
FontName = "Arial", ;
FontSize = 9, ;
DisabledForeColor = RGB(255,0,0), ;
DisabledBackColor = RGB(224,224,224), ;
Enabled = .F., ;
Left = 290, ;
Top = 35, ;
Width = 50, ;
Height = 24, ;
MaxLength = 5, ;
Visible = .T.
tambahkan label myKodeCucu
ADD OBJECT lblMyKodeCucu AS Label WITH ;
Caption = "1. Kode", ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = RGB(0,0,0), ;
Left = 10, ;
Top = 35, ;
Width = 50, ;
Height = 20, ;
Visible = .T.
tambahkan label myNamaCucu
ADD OBJECT lblMyNamaCucu AS Label WITH ;
Caption = "2. Nama", ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = RGB(0,0,0), ;
Left = 10, ;
Top = 60, ;
Width = 50, ;
Height = 20
Visible = .T.
tambahkan label myTitik01
ADD OBJECT lblMyTitik01 AS Label WITH ;
Caption = ":", ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = RGB(0,0,0), ;
Left = 60, ;
Top = 35, ;
Width = 10, ;
Height = 20, ;
Visible = .T.
tambahkan label myTitik02
ADD OBJECT lblMyTitik02 AS Label WITH ;
Caption = ":", ;
FontName = "Arial", ;
FontSize = 10, ;
ForeColor = RGB(0,0,0), ;
Left = 60, ;
Top = 60, ;
Width = 10, ;
Height = 20, ;
Visible = .T.
tambahkan textbox txtMyKodeCucu
ADD OBJECT txtMyKodeCucu AS TextBox WITH ;
Name = "txtKodeCucu", ;
Value = "", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,255), ;
DisabledForeColor = RGB(0,0,255), ;
DisabledBackColor = RGB(224,224,224), ;
Left = 70, ;
Top = 35, ;
Width = 60, ;
Height = 24, ;
InputMask = "999", ;
Format = "999", ;
Visible = .T.
tambahkan textbox txtMyNamaCucu
ADD OBJECT txtMyNamaCucu AS TextBox WITH ;
Name = "txtNamaCucu", ;
Value = "", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,255), ;
DisabledForeColor = RGB(0,0,255), ;
DisabledBackColor = RGB(224,224,224), ;
Left = 70, ;
Top = 60, ;
Width = 270, ;
Height = 24, ;
MaxLength = 30, ;
Visible = .T.
tambahkan grid grdMyGrid
ADD OBJECT grdMyGrid AS grid WITH ;
Name = "grdGrid", ;
Top = 85, ;
Left = 10, ;
Width = 350, ;
Height = 130, ;
ColumnCount = 2, ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,255), ;
HighlightStyle = 2, ;
HighlightForeColor = RGB(0,0,255), ;
HighlightBackColor = RGB(224,224,224), ;
SelectedItemForeColor = RGB(0,0,0), ;
SelectedItemBackColor = RGB(128,255,128), ;
RecordSource = "Cucu", ;
RecordSourceType = 1, ;
AllowAutoColumnFit = 2, ;
AllowHeaderSizing = .F., ;
DeleteMark = .F., ;
ReadOnly = .T., ;
TabStop = .F., ;
SplitBar = .F., ;
Visible = .T.
tambahkan command button cmdMyFisrt
ADD OBJECT cmdMyFIRST AS COMMANDBUTTON WITH ;
Top = 215, ;
Left = 10, ;
Width = 25, ;
Height = 25, ;
Name = "cmdFIRST", ;
Caption = "|<", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Record Awal", ;
Visible = .T.
tambahkan command button cmdMyPrev
ADD OBJECT cmdMyPREV AS COMMANDBUTTON WITH ;
Top = 215, ;
Left = 35, ;
Width = 25, ;
Height = 25, ;
Name = "cmdPREV", ;
Caption = "<", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Record Sebelumnya", ;
Visible = .T.
tambahkan command button cmdMyNext
ADD OBJECT cmdMyNEXT AS COMMANDBUTTON WITH ;
Name = "cmdNEXT", ;
Caption = ">", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Record Berikutnya", ;
Top = 215, ;
Left = 60, ;
Width = 25, ;
Height = 25, ;
Visible = .T.
tambahkan command button cmdMyLast
ADD OBJECT cmdMyLAST AS COMMANDBUTTON WITH ;
Name = "cmdLAST", ;
Caption = ">|", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Record Akhir", ;
Top = 215, ;
Left = 85, ;
Width = 25, ;
Height = 25, ;
Visible = .T.
tambahkan command button cmdMyAdd
ADD OBJECT cmdMyADD AS COMMANDBUTTON WITH ;
Name = "cmdADD", ;
Caption = "Add", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Tambah Data", ;
Top = 215, ;
Left = 110, ;
Width = 60, ;
Height = 25, ;
Visible = .T.
tambahkan command button cmdMyEdit
ADD OBJECT cmdMyEDIT AS COMMANDBUTTON WITH ;
Name = "cmdEDIT", ;
Caption = "Edit", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Ubah Data", ;
Top = 215, ;
Left = 170, ;
Width = 60, ;
Height = 25, ;
Visible = .T.
tambahkan command button cmdMyDelete
ADD OBJECT cmdMyDELETE AS COMMANDBUTTON WITH ;
Name = "cmdDELETE", ;
Caption = "Del", ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Hapus Data", ;
Top = 215, ;
Left = 230, ;
Width = 60, ;
Height = 25, ;
Visible = .T.
tambahkan command button cmdMyClose
ADD OBJECT cmdMyCLOSE AS COMMANDBUTTON WITH ;
Name = "cmdCLOSE", ;
Caption = "CLOSE", ;
CANCEL = .T., ;
FontName = "Arial", ;
FontSize = 9, ;
ForeColor = RGB(0,0,0), ;
ToolTipText = "Tutup Form", ;
Top = 215, ;
Left = 290, ;
Width = 60, ;
Height = 25, ;
Visible = .T.
definisi prosedur-prosedur
prosedur Timer
PROCEDURE Waktu.Timer
label Jam diisi jam 00:00:00
ThisForm.Jam.Caption = TIME()
ENDPROC
prosedur Init
PROCEDURE Init && persiapan jika form akan diaktifkan
isi label Tanggal
ThisForm.Tanggal.Caption = TampilkanTanggal()
mengatur grid
WITH Thisform.grdGrid
.ReadOnly = .T. && isi grid tidak bisa diubah
.Column1.Width = 50 && lebar kolom 1
.Column2.Width = 260 && lebar kolom 2
.Column1.Header1.Caption = "KODE"
.Column2.Header1.Caption = "NAMA CUCU"
ENDWITH
ENDPROC
prosedur Activate
PROCEDURE Activate && jika form diaktifkan
WITH ThisForm
aktifkan prosedur SetField()
.SetField(.F.)
aktifkan prosedur TampilkanData()
.TampilkanData()
ENDWITH
ENDPROC
prosedur grsGrid.AfterRowColChange
PROCEDURE grdGrid.AfterRowColChange
parameter ini harus ada, tidak digunakan
LPARAMETERS nColIndex
aktifkan prosedur TampilkanData
ThisForm.TampilkanData()
ENDPROC
prosedur grdGrid.MouseMove
PROCEDURE grdGrid.MouseMove && jika ada pergerakan mouse
Paramater ini harus ada
LPARAMETERS nDirection, nShift, nXCoord, nYCoord
ThisForm.grdGrid.DoScroll && aktifkan fungsi scroll
ENDPROC
prosedur cmdFIRST.Click
PROCEDURE cmdFIRST.Click && jika button First diklik
ThisForm.NavigasiCucu("FIRST")
ENDPROC
prosedur cmdPREV.Click
PROCEDURE cmdPREV.Click && jika button Prev diklik
ThisForm.NavigasiCucu("PREV")
ENDPROC
prosedur cmdNEXT.Click
PROCEDURE cmdNEXT.Click && jika button Next diklik
ThisForm.NavigasiCucu("NEXT")
ENDPROC
prosedur cmdLAST.Click
PROCEDURE cmdLAST.Click && jika button Last diklik
ThisForm.NavigasiCucu("LAST")
ENDPROC
prosedur cmdADD.Click
PROCEDURE cmdADD.Click && jika button Add diklik
SELECT Cucu && aktifkan tabel Cucu.dbf
jika jumlah record sudah maksimal, maka:
IF RECCOUNT() >= 1000
TampilkanRecordMax() && tampilkan pesan
ELSE
mengatur form
WITH ThisForm
IF .cmdADD.Caption = "Add" && button "ADD"
.SetButton(.F.) && aktifkan SetButton()
.SetGrid(.F.) && aktifkan SetGrid()
.SetField(.T.) && aktifkan SetField()
.TampilkanField(.F.) && TampilkanField()
.grdGrid.Refresh && grid direfresh
.cmdADD.Enabled = .T. && cmdADD aktif
.cmdEDIT.Enabled = .T. && cmdEDIT aktif
.cmdADD.Caption = "Save" && cmdADD
.cmdEDIT.Caption = "Cancel" && cmdEDIT
.cmdADD.ToolTipText = "Simpan Data"
.cmdEDIT.ToolTipText = "Batal"
kursor berada di field Kode
.txtKodeCucu.SetFocus
ELSE && jika judul button "SAVE"
IF EMPTY(.txtKodeCucu.Value)
Tampilkan pesan
TampilkanKodeKosong()
kursor berada di field Kode
.txtKodeCucu.SetFocus
ELSE
nRecPos = RECNO() && record sekarang
cari Kode Cucu
LOCATE FOR KdCucu = .txtKodeCucu.Value
IF FOUND() && jika ditemukan, maka:
menuju posisi record sekarang
GO nRecPos
Tampilkan pesan
TampilkanKodeSama
kursor berada di field Kode
.txtKodeCucu.SetFocus
ELSE && jika tidak ditemukan, maka:
APPEND BLANK && tambahkan record
.SimpanData() && SimpanData()
.SetButton(.T.) && SetButton()
.SetGrid(.T.) && SetGrid()
.SetField(.F.) && SetField()
.grdGrid.Refresh && direfresh
.cmdADD.Caption = "Add"
.cmdEDIT.Caption = "Edit"
.cmdADD.ToolTipText="Tambah Data"
.cmdEDIT.ToolTipText="Ubah Data"
GO BOTTOM && menuju record akhir
aktifkan prosedur TampilkanData
.TampilkanData()
ENDIF
ENDIF
ENDIF
ENDWITH
ENDIF
ENDPROC
prosedur cmdEDIT.Click
PROCEDURE cmdEDIT.Click && jika button cmdEDIT diklik
SELECT Cucu && aktifkan tabel Cucu.dbf
IF RECCOUNT() = 0 && jika file kosong, maka:
Tampilkan pesan
TampilkanSorry("SORRY.....file kosong!")
aktifkan prosedur TampilkanData
ThisForm.TampilkanData()
ELSE && jika file isi, maka:
mengatur form
WITH ThisForm
DO CASE
CASE .cmdEDIT.Caption = "Edit" && "Edit"
.SetButton(.F.) && aktifkan SetButton()
.SetGrid(.F.) && aktifkan SetGrid()
.SetField(.T.) && aktifkan SetField()
aktifkan prosedur TampilkanField
.TampilkanField(.T.)
.grdGrid.Refresh && grid direfresh
.cmdEDIT.Enabled = .T. && button aktif
.cmdDELETE.Enabled = .T. && button aktif
.cmdEDIT.Caption = "Save" && cmdEDIT
.cmdDELETE.Caption = "Cancel" && cmdDELETE
.cmdEDIT.ToolTipText = "Ubah Data"
.cmdDELETE.ToolTipText = "Hapus Data"
.txtKodeCucu.SetFocus
CASE .cmdEDIT.Caption = "Save" && "Save"
.SimpanData()
.SetButton(.T.) && aktifkan SetButton()
.SetGrid(.F.) && aktifkan SetGrid()
.SetField(.T.) && aktifkan SetField()
.grdGrid.Refresh && grid direfresh
.cmdEDIT.Caption = "Edit"
.cmdDELETE.Caption = "Del"
.cmdEDIT.ToolTipText = "Ubah Data"
.cmdDELETE.ToolTipText = "Hapus Data"
aktifkan prosedur TampilkanData
.TampilkanData()
OTHERWISE && isi button "Cancel"
.SetButton(.T.) && aktifkan SetButton()
.SetGrid(.T.) && aktifkan SetGrid()
.SetField(.F.) && aktifkan SetField()
.grdGrid.Refresh && grid direfresh
.cmdADD.Caption = "Add"
.cmdEDIT.Caption = "Edit"
.cmdDELETE.Caption = "Del"
.cmdADD.ToolTipText = "Tambah Data"
.cmdEDIT.ToolTipText = "Ubah Data"
.cmdDELETE.ToolTipText = "Hapus Data"
aktifkan prosedur TampilkanData
.TampilkanData()
ENDCASE
ENDWITH
ENDIF
ENDPROC
prosedur cmdDELETE.Click
PROCEDURE cmdDELETE.Click
SELECT Cucu && aktifkan tabel Cucu
IF RECCOUNT() = 0 && jika file kosong
Tampilkan pesan
TampilkanSorry("SORRY.....file kosong!")
aktifkan prosedur TampilkanData
ThisForm.TampilkanData()
ELSE
simpan posisi record sekarang
xRecPosisi = RECNO()
IF ThisForm.cmdDELETE.Caption = "Del"
IF MESSAGEBOX("Anda ingin menghapus data ini?",;
4+32+256,"Konfirmasi") = 6 && pilih YES
DELETE && hapus record
PACK && pastikan record dihapus dari tabel
posisi record sekarang
xRecPosisi=IIF(xRecPosisi >= RECCOUNT(),;
RECCOUNT(),xRecPosisi) &&posisi record
ENDIF
ENDIF
IF RECCOUNT() = 0 && jika file kosong
Tampilkan pesan
TampilkanSorry("SORRY.....file kosong!")
ELSE && jika file isi
GO xRecPosisi && menuju record xrecPosisi
ENDIF
WITH ThisForm && mengatur _SCREEN
.SetButton(.T.) && aktifkan SetButton()
.SetGrid(.T.) && aktifkan SetGrid()
.SetField(.F.) && aktifkan SetField()
.GridRefresh() && aktifkan GridRefresh()
.grdGrid.Refresh && grdGrid direfresh
.cmdEDIT.Caption = "Edit" && button Edit
.cmdDELETE.Caption = "Del" && button Delete
.cmdEDIT.ToolTipText = "Ubah Data" && tips
.cmdDELETE.ToolTipText = "Hapus Data" && tips
.TampilkanData() && aktifkan TampilkanData()
ENDWITH
ENDIF
ENDPROC
prosedur cmdCLOSE.Click
PROCEDURE cmdCLOSE.Click && jika button cmdCLOSE diklik
variabel lokal
LOCAL I,N,xUrut,xKode,xNama,yKode,yNama
proses pengurutan BUBLE SORT
berdasarkan Kode - Ascending
SELECT Cucu && aktifkan tabel Cucu
N = RECCOUNT() && variabel jumlah record
xUrut = .F. && variabel tanda (flag/switch)
DO WHILE xUrut = .F. && lakukan selama belum urut
xUrut = .T. && sudah urut
FOR I = 1 TO (N-1)
GO I && menuju record I
xKode = Cucu.KdCucu && ambil nilai Kode
xNama = Cucu.NmCucu && ambil nilai Nama
GO (I+1) && menuju record (I+1)
yKode = Cucu.KdCucu && ambil nilai Kode
yNama = Cucu.NmCucu && ambil nilai Nama
IF xKode > yKode && jika dipenuhi, maka:
GO I && menuju record I
REPLACE Cucu.KdCucu WITH yKode && yKode
REPLACE Cucu.NmCucu WITH yNama && yNama
GO (I+1) && menuju record (I+1)
REPLACE Cucu.KdCucu WITH xKode && xKode
REPLACE Cucu.NmCucu WITH xNama && xNama
xUrut = .F. && belum urut
ENDIF
NEXT
ENDDO
thisform.grdGrid.RecordSource = "" && grid kosong
thisform.release && form dihapus
ENDPROC
prosedur GridRefresh
PROCEDURE GridRefresh
mengatur Grid
WITH ThisForm.grdGrid
.ReadOnly = .T. && isi grid tidak bisa diubah
.RecordSource = "Cucu" && tabel Cucu.dbf
.RecordSourceType = 1 && alias tabel
lebar kolom
.Column1.Width = 50 && lebar kolom 1
.Column2.Width = 260 && lebar kolom 2
judul kolom
.Column1.Header1.Caption = "KODE"
.Column2.Header1.Caption = "NAMA CUCU"
ENDWITH
ENDPROC
prosedur SetButton
PROCEDURE SetButton
PARAMETERS xPar && menerima kiriman variabel
mengatur button (ON/OFF)
WITH ThisForm
.cmdFIRST.Enabled = xPar && cmdFirst ON/OFF
.cmdPREV.Enabled = xPar && cmdPrev ON/OFF
.cmdNEXT.Enabled = xPar && cmdNext ON/OFF
.cmdLAST.Enabled = xPar && cmdLast ON/OFF
.cmdADD.Enabled = xPar && cmdAdd ON/OFF
.cmdEDIT.Enabled = xPar && cmdEdit ON/OFF
.cmdDELETE.Enabled = xPar && cmdDel ON/OFF
.cmdCLOSE.Enabled = xPar && cmdClose ON/OFF
ENDWITH
ENDPROC
prosedur SetField
PROCEDURE SetField
PARAMETERS xPar && menerima kiriman variabel
mengatur field
WITH ThisForm
.txtKodeCucu.Enabled = xPar && KodeCucu ON/OFF
.txtNamaCucu.Enabled = xPar && NamaCucu ON/OFF
ENDWITH
ENDPROC
prosedur SetGrid
PROCEDURE SetGrid
PARAMETERS xPar && menerima kiriman variabel
mengatur grid True/False
ThisForm.grdGrid.Enabled = xPar && grid ON/OFF
ENDPROC
prosedur TampilkanData
PROCEDURE TampilkanData
IF RECCOUNT() = 0 && jika file kosong, maka:
tampilkan field kosong
ThisForm.TampilkanField(.F.)
ELSE
tampilkan field isi
ThisForm.TampilkanField(.T.)
ENDIF
ThisForm.grdGrid.Refresh && grid di-refresh
ENDPROC
prosedur TampilkanField
PROCEDURE TampilkanField
PARAMETERS xPar && menerima kiriman variabel
SELECT Cucu && aktifkan tabel Cucu.dbf
mengatur form
WITH ThisForm
IF xPar = .T. && jika True, maka:
.txtNoRec.Value =RECNO() && isi textbox
.txtTotRec.Value=RECCOUNT() && isi textbox
.txtKodeCucu.Value=Cucu.KdCucu && isi textbox
.txtNamaCucu.Value=Cucu.NmCucu && isi textbox
ELSE && jika False, maka:
.txtNoRec.Value = RECCOUNT() && isi textbox
.txtTotRec.Value = RECCOUNT() && isi textbox
.txtKodeCucu.Value = "" && isi textbox kosong
.txtNamaCucu.Value = "" && isi textbox kosong
ENDIF
ENDWITH
ENDPROC
prosedur SimpanData
PROCEDURE SimpanData
SELECT Cucu && aktifkan tabel Cucu
simpan data ke dalam tabel Cucu.dbf
REPLACE Cucu.KdCucu WITH ThisForm.txtKodeCucu.Value
REPLACE Cucu.NmCucu WITH ThisForm.txtNamaCucu.Value
FLUSH && pastikan data tersimpan
ENDPROC
*--- prosedur NavigasiCucu ---
PROCEDURE NavigasiCucu
PARAMETERS xPar && menerima kiriman variabel
SELECT Cucu && aktifkan tabel Cucu.dbf
IF RECCOUNT() = 0 && jika file kosong, maka:
Tampilkan pesan
TampilkanSorry("SORRY.....file kosong!")
ELSE && jika file isi, maka:
DO CASE
CASE xPar = "FIRST"
jika posisi di awal record
IF RECNO() = 1
TampilkanTopOfFile() && tampilkan pesan
ELSE && jika tidak diposisi awal record
GoRecord(xPar) && menuju awal record
ENDIF
CASE xPar = "PREV"
jika posisi di awal record
IF RECNO() = 1
TampilkanTopOfFile() && tampilkan pesan
ELSE && jika tidak diposisi awal record
GoRecord(xPar) && menuju record sebelumnya
ENDIF
CASE xPar = "NEXT"
jika posisi di akhir record
IF RECNO() = RECCOUNT()
TampilkanEndOfFile() && tampilkan pesan
ELSE && jika tidak diposisi akhir record
GoRecord(xPar) && menuju record berikutnya
ENDIF
CASE xPar = "LAST"
jika posisi di akhir record
IF RECNO() = RECCOUNT()
TampilkanEndOfFile() && tampilkan pesan
ELSE && jika tidak diposisi akhir record
GoRecord(xPar) && menuju akhir record
ENDIF
ENDCASE
aktifkan prosedur TampilkanData
ThisForm.TampilkanData()
ENDIF
ENDPROC
ENDDEFINE
definisi prosedur di luar form
prosedur TampilkanSorry
PROCEDURE TampilkanSorry
PARAMETERS xPar && menerima kiriman variabel
MESSAGEBOX(xPar,0+64,"SORRY") && tampilkan pesan
ENDPROC
prosedur TampilkanFileKosong
PROCEDURE TampilkanFileKosong
Tampilkan pesan
TampilkanSorry("SORRY.....file kosong!")
ENDPROC
prosedur TampilkanTopOfFile
PROCEDURE TampilkanTopOfFile
Tampilkan pesan
TampilkanSorry("SORRY.....top of file!")
ENDPROC
prosedur TampilkanEndOfFile
PROCEDURE TampilkanEndOfFile
Tampilkan pesan
TampilkanSorry("SORRY.....end of file!")
ENDPROC
prosedur TampilkanKodeKosong
PROCEDURE TampilkanKodeKosong
Tampilkan pesan
TampilkanSorry("SORRY.....Kode kosong!")
ENDPROC
prosedur TampilkanKodeSama
PROCEDURE TampilkanKodeSama
Tampilkan pesan
TampilkanSorry("SORRY.....Kode sama!")
ENDPROC
prosedur TampilkanRecordMax
PROCEDURE TampilkanRecordMax
Tampilkan pesan
TampilkanSorry("SORRY.....maksimum record 1.000!")
ENDPROC
prosedur GoRecord
PROCEDURE GoRecord
PARAMETERS xPar && menerima kiriman variabel
DO CASE
CASE xPar = "FIRST" && button First
GO TOP && menuju record awal
CASE xPar = "PREV" && button Prev
SKIP -1 && menuju record sebelumnya
CASE xPar = "NEXT" && button Next
SKIP && menuju record berikutnya
CASE xPar = "LAST" && button Last
GO BOTTOM && menuju record akhir
OTHERWISE && button lainnya
GO xRecPosisi && menuju record sekarang
ENDCASE
ENDPROC
prosedur TampilkanTanggal
FUNCTION TampilkanTanggal
variabel lokal
LOCAL cRet,NamaHari(7),NamaPasar(5),NamaBulan(12)
Nama-nama hari
NamaHari(1) = "Minggu"
NamaHari(2) = "Senin"
NamaHari(3) = "Selasa"
NamaHari(4) = "Rabu"
NamaHari(5) = "Kamis"
NamaHari(6) = "Jum'at"
NamaHari(7) = "Sabtu"
Nama-nama pasaran
NamaPasar(1) = "Pahing"
NamaPasar(2) = "Pon"
NamaPasar(3) = "Wage"
NamaPasar(4) = "Kliwon"
NamaPasar(5) = "Legi"
Nama-nama bulan
NamaBulan(1) = "Januari"
NamaBulan(2) = "Februari"
NamaBulan(3) = "Maret"
NamaBulan(4) = "April"
NamaBulan(5) = "Mei"
NamaBulan(6) = "Juni"
NamaBulan(7) = "Juli"
NamaBulan(8) = "Agustus"
NamaBulan(9) = "September"
NamaBulan(10)= "Oktober"
NamaBulan(11)= "Nopember"
NamaBulan(12)= "Desember"
nama hari dan pasar, tanggal, bulan dan tahun
cRet = NamaHari(DOW(DATE()))+" - "+ ;
NamaPasar((MOD((DATE()-CTOD("01/01/1900")),5)+1))+ ;
", "+ALLTRIM(STR(DAY(DATE())))+" "+ ;
NamaBulan(MONTH(DATE()))+" "+ ;
STR(YEAR(DATE()),4)
RETURN (cRet) && mengembalikan nilai tanggal sekarang
ENDFUNC
End of procedure
Ketik program di atas dan simpan.