r4gl.doc Official Site of Dr. RUDI TRISNO YUWONO, SKOM, MM Gunadarma University r4gl

Bhs Generasi Ke-4. YC --- R4GL

Hal : 1

PEMROGRAMAN INFORMIX
Memulai informix-4gl
Ketik i4gl atau r4gl pada shell prompt
Informix-4gl RDS (Rapid Development System)
Informix-4gl C compiler
/u/komputer> r4gl 
maka akan tampil menu sbb :
INFORMIX-4GL : Module Form Program Query-language
Create , modify , or run individual 4gl program modules

Exit

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Module
Form
Program

Query language
Exit

:
:
:
:
:

bekerja pada program module Informix-4gl
bekerja pada screen form
spesifikasi komponen dari program multi-module
menggunakan SQL interaktif
kembali ke shell prompt

Menu MODIFY Dalam Module 4GL
Module ; Modify New Compile Program_Compile Run Debug
Exit
Change an existing 4gl program module


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Modify
New
Compile

: untuk memodifikasi module 4gl yang sudah ada
: untuk membuat module 4gl yang baru
: untuk mengkompile module 4gl yang stand_alone tanpa
melalui
pilihan modify.
Program_compile : mengijinkan kita mengkompile dan menggabung module.
Pilihan ini berguna jika kita mempunyai satu module dari
sekelompok program yang kompleks & ingin menguji dengan cara
mengkompilenya dengan module lain.
Run
: menjalankan module program
Debug
: menggunakan Informix-4gl interaktif debugger untuk
menganalisa

program.

MODIFY MODULE >>
Choose a module with Arrow Keys or enter a name, and press RETURN
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Prog_latihan1
Prog_latihan2

Bhs Generasi Ke-4. YC --- R4GL

Hal : 2

Prog_latihan3

USE-EDITOR >> vi
Enter editor name. (Return only for default editor)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Kemudian muncul program yang sudah pernah dibuat,sbb.:


MAIN
DISPLAY “ Selamat Belajar Informix-4gl” AT 5,10
DISPLAY “ Semoga Sukses” AT 6,15
END MAIN
:wq
MODIFY MODULE :
Compile
Save-and-exit
Compile the 4gl module specification

Discard-and-exit

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

COMPILE MODULE : Object Runable Exit
Create an object file (.4go suffix)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

COMPILE MODULE : Object Runable Exit

Create an runable program (.4gi suffix)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Setelah sukses mengkompile, tampilan berikutnya sbb.:
MODIFY MODULE :
Compile
Save-and-exit
Discard-and-exit
Save the 4GL module and return to MODULE Menu
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Menu NEW Dalam Module 4GL
Module ; Modify New Compile Program_Compile Run Debug
Exit
Create a new 4GL program module
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

NEW MODULE >>_
Enter the name you want to assign to the module, and press RETURN

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Bhs Generasi Ke-4. YC --- R4GL

~
~
~
~

Hal : 3

ketik program anda

Dalam setiap modul program 4GL harus terdapat main program,
yang ditandai dengan statement MAIN.
MAIN
………………………………..
………………………………..
…..statement…………
………………..

………………
END MAIN
MAIN  menyatakan awal blok program .
END MAIN  menyatakan akhir blok program.
Contoh :
MAIN
CREATE DATABASE filkom
CREATE TABLE t_matakuliah
(kd_mk
char(8),
nm_mk
char(30),
sks
smallint,
jenis
char(1))
INSERT INTO t_matakuliah
VALUES (“DU-14201”,”Agama”,2,”W”)
END MAIN
MAIN

DISPLAY ‘Universitas Gunadarma’ AT 6,7
DISPLAY ‘Jl. Akses UI Kelapa Dua’ AT 7,7
ATTRIBUTE(reverse,blink)
END MAIN
Output :

MAIN
DEFINE
Nm char(25),
Ket char(30)
LET ket = ‘mahasiswa Universitas Gunadarma’
PROMPT ‘Nama anda : ‘ FOR nm

Bhs Generasi Ke-4. YC --- R4GL

DISPLAY ‘Mhs. yang bernama ‘,nm,ket AT 10,5
DISPLAY ‘Mhs. yang bernama ‘,nm,’ adalah’,ket AT
12,5
END MAIN
Output :


MAIN
DEFINE nm char(25),
kls char(5)
PROMPT ‘Masukkan nama anda : ‘ FOR nm
PROMPT ‘Masukkan kelas anda : ‘ FOR kls
DISPLAY ‘Saya yang bernama : ‘,nm
DISPLAY ‘Sekarang duduk di kelas ‘,kls
DISPLAY ‘Sedang belajar Informix’
END MAIN
Output :

Program dengan menggunakan DATABASE
DATABASE filkom
#contoh program cari
data
MAIN
DEFINE
nm char(25), kls char(5)
SELECT nama,kelas INTO nm,kls

FROM t_master
WHERE npm=’10197477’
DISPLAY ‘Nama : ‘,nm AT 5,9
DISPLAY ‘Kelas : ‘,kls AT 6,9
END MAIN
DATABASE filkom
MAIN
DEFINE
nm
LIKE t_master.nama,
kls
LIKE t_master.kelas,
m_npm LIKE t_master.npm
PROMPT ‘Masukkan NPM yang dicari : ‘ FOR m_npm
SELECT nama,kelas INTO nm,kls

Hal : 4

Bhs Generasi Ke-4. YC --- R4GL


Hal : 5

FROM t_master WHERE npm=m_npm
DISPLAY nm CLIPPED,’/’,m_npm,’/’,kls AT 10,12
END MAIN
Contoh program INSERT
# Statement yg diawali tanda ‘#’ tidak diakses
# Ini adalah contoh untuk memasukkan data ke dalam tabel
# Program ini dibuat oleh : ROSNI
# Tanggal pembuatan : 01 /10/2001
#------------------------------------------------------------------DATABASE filkom
MAIN
INSERT INTO t_matakuliah (kd_mk,nm_mk,sks,jenis)
VALUES (‘DK-14202’,’Fisika’,2,’W’)
END MAIN
{ contoh kedua program insert data
dibuat oleh …………………
selain menggunakan tanda ‘#’ boleh juga menggunakan
tanda’{ }’
}
DATABASE filkom
MAIN
DEFINE kode_mk char(8),
nama_mk char(25),
jsks
smallint,
jns
char(1)
LET
LET
LET
LET

kode_mk = ‘DK-14202’
nama-mk = ‘fisika’
jsks = 2
jns =’W’

#contoh penggunaan LET

INSERT INTO t_matakuliah(kd_mk,nm_mk,sks,jenis)
VALUES (kode_mk,nama_mk,jsks,jns)
END MAIN
#contoh ketiga program insert data
# bandingkan format penulisan define
DATABASE filkom
MAIN
DEFINE kode_mk char(8),nama_mk char(25),jsks smallint,
jns char(1)
PROMPT ‘masukkan kode matakuliah = ‘ FOR kode_mk
PROMPT ‘masukkan nama matakuliah = ‘ FOR nama_mk
PROMPT ‘masukkan jumlah sks
= ‘ FOR jsks

Bhs Generasi Ke-4. YC --- R4GL

PROMPT ‘masukkan jenis matakuliah = ‘ FOR jns
#dibawah ini adalah statement ‘sql’
# penulisan statement sql-nya sama dengan contoh kedua
INSERT INTO t_matakuliah (kd_mk,nm_mk,sks,jenis)
VALUES (kode_mk,nama_mk,jsks,jns)
END MAIN
Contoh Program DELETE
DATABASE filkom
MAIN
DEFINE np LIKE t_master.npm
PROMPT ‘masukkan npm anda : ‘ FOR np
DELETE FROM t_master WHERE npm=np
END MAIN

DATABASE filkom
MAIN
DELETE FROM t_master WHERE kelas[1]=’4’ and
ket_lulus=’W’
END MAIN

Contoh Program UPDATE
DATABASE filkom
MAIN
DEFINE
np LIKE t_master.npm,
almt LIKE t_master.alamat
PROMPT ‘masukkan npm anda
: ‘ FOR np
PROMPT ‘masukkan alamat baru : ‘ FOR almt
#perintah sql
UPDATE t_master SET alamat = almt WHERE npm = np
END MAIN
DATABASE filkom
MAIN
UPDATE t_master SET kota=’Depok’ WHERE
kota=’Cimanggis’
END MAIN

Hal : 6

Bhs Generasi Ke-4. YC --- R4GL

Hal : 7

Contoh penggunaan FOR ….. END FOR
-- membuat program dengan menggunakan FOR … END
FOR
-- kegunaan tanda ‘--‘ sama dengan tanda ‘#’
DATABASE filkom
MAIN
DEFINE np char(8), nama char(25), kls char(5),i smallint
FOR i = 1 TO 5
PROMPT ‘ketik npm anda = ‘ FOR np
PROMPT ‘ketik nama anda = ‘ FOR nama
PROMPT ‘ketik kelas anda = ‘ FOR kls
INSERT INTO t_master (npm,nama_mhs,kelas)
VALUES (np,nama,kls)
DISPLAY ‘N P M
: ‘,np AT 6,5
DISPLAY ‘Nama
: ‘,nama AT 7,5 ATTRIBUTE(blink)
DISPLAY ‘Kelas
: ‘,kls AT 8,5
SLEEP 2
CLEAR SCREEN
END FOR
DISPLAY ‘Selesai dech ……bye…….’ AT 15,10
END MAIN
{contoh penggunaan WHILE …..END WHILE }
DATABASE filkom
MAIN
DEFINE np char(8), nama char(25), kls char(5), jawab
char(1)
LET jawab=’y’
WHILE jawab=’y’ OR jawab=’Y’ #dpt ditulis jawab
MATCHES’[Yy]’
PROMPT ‘ketik npm anda
= ‘ FOR np
PROMPT ‘ketik nama anda = ‘ FOR nama
PROMPT ‘ketik kelas anda = ‘ FOR kls
INSERT INTO t_master (npm,nama_mhs,kelas)
VALUES (np,nama,kls)
PROMPT ‘ingin tambah data lagi [y/t] ? ‘ FOR jawab
CLEAR SCREEN
END WHILE
END MAIN
PENGGUNAAN FUNCTION
Mendefinisikan function
Function adalah satu routine yang merupakan bagian dari modul
program 4GL. Function diletakkan diluar routine MAIN

Bhs Generasi Ke-4. YC --- R4GL

Hal : 8

MAIN
…..
..….
END mAIN
FUNCTION nama_function( )
…….
……
END FUNCTION
#contoh penggalan program yg menggunakan function
FUNCTION jum_mhs( )
DEFINE jum integer,
kls char(5)
PROMPT ‘menghitung jumlah mahasiswa kelas ‘ FOR kls
# perintah sql untuk menghitung
SELECT count(*) INTO jum
FROM t_master
WHERE kelas = kls
DISPLAY ‘Banyaknya mahasiswa kelas ‘,kls, ’=’ , jum
END FUNCTION
Memanggil FUNCTION
Untuk menggunakan function yang telah didefinisikan, dapat
dilakukan dengan memanggil function tersebut dari dalam MAIN atau
dari dalam FUNCTION lain.
Perintah yg diperlukan untuk memanggil function adalah ‘CALL’
MAIN
………
……….
CALL nama_function( )
…….
END MAIN
# contoh program untuk memanggil function
MAIN
CALL berita( )
END MAIN
FUNCTION berita( )
DISPLAY ‘lagi belajar function’
END FUNCTION
Pengertian variabel global, variabel module & variabel local

Bhs Generasi Ke-4. YC --- R4GL

Hal : 9

Routine adalah seperti MAIN, REPORT dan FUNCTION dapat
mempunyai tiga jenis tingkatan variabel terhadap data yaitu
global, module dan local.
Variabel global
Variabel yang dapat dikenal dan diterima diseluruh program
Variabel module
Variabel yg dikenal disemua routine yg terletak didalam program 4gl
yg sama
Variabel local
Variabel ini hanya berlaku
mendefinisikannya.

& dimengerti didalam routine yg

Skema lingkup data variabel
Globals
Define var A
Main
Define var B
End main
Define var C
Function x
Define var D
Function y
Define var E

Lokasi
Globals

Nama
varia
bel
Var A

modul 1
modul 2

modul 3

Type
Global

Main
Module

Var B
Var C

Local
Module

Function x
Function y

Var D
Var E

Local
Local

Scope
Main
Function
Function
Main
Function
Function
Function
Function

Contoh :
Globals
Define a integer
End globals
Main
Let a = 0
Call ganti( )
Display a

Globals
Define a integer
End globals
Main
Let a = 0
Call ganti( )
Display a

x
y
x
y
x
y

Bhs Generasi Ke-4. YC --- R4GL

Hal : 10

End main
Function ganti( )
Let a = 99
End function

End main
Function ganti( )
Define a integer
Let a = 99
End function

#outputnya = 99

# outputnya = 0

Parameter
Jenis variabel atau nilai yang terletak antara tanda kurung ( ) pada
perintah FUNCTION dan berhubungan dengan perintah CALL.
Parameter ini digunakan untuk melewatkan / mengirim nilai/informasi
darii MAIN ke FUNCTION tanpa mempengaruhi nilainya.
PASSING VALUE (melewatkan/mengirim nilai melalui function)
Untuk mengirim/melewatkan nilai melalui function, digunakan
parameter pada function yang terletak antara tanda kurung ( ).
Variabel yang menerima nilai/informasi disebut variabel argument.
Parameter harus didefinisikan juga dengan define.
Function tampil (nama,alamat)
Define nama char(25), alamat char(30)
……………………….
………………………….
End function
Function lihat (rec_mhs)
#baca catatan ttg
record
Define rec_mhs record like t_master.*
………………..
……………….
End function
Main
Define nama,kota char(30)
Let nama = ‘audi’
Let kota = ‘Bandung’
Call lihat(nama,kota)
End main

#2 var bertype sama
# passing value

Function lihat(nm,kt)
# argument value
Define nm,kt char(30)
Display ‘nama = ‘,nm at 7,10
Display ‘kota = ‘,kt at 8,10
End function

Bhs Generasi Ke-4. YC --- R4GL

RETURN VALUE
Mengembalikan nilai
memanggilnya.

Hal : 11

dari

function

kembali

ke

routine

Main
Define juml integer
Call hitung( ) RETURNING juml
Display ‘jumlah = ‘,juml at 10,10
End main
Function hitung( )
Define jml integer
Select count(*) into jml from t_master
RETURN jml
End function
Penggunaan PASSING VALUE & RETURN VALUE
Database filkom
Main
Define npm char(8), nama char(25),
Alamat char(30), kota char(15)
Prompt ‘tampilkan data mahasiswa , npm = ‘ for npm
Call cari(npm) returning nama,alamat,kota
Display ‘N P M
= ‘,npm at 15,5
Display ‘Nama
= ‘,nama at 16,5
Display ‘Alamat = ‘,alamat at 17,5
Display ‘Kota
= ‘,kota at 18,5
End main
Function cari(np)
Define np char(8), nm char(25),
alm char(30), kt char(15)
select nama,alamat,kota
into nm , alm, kt
from t_master
where npm = np
#perintah sql diatas bisa ditulis dalam satu baris seperti dibawah ini
#select nama,alamat,kota into nm,alm,kt from t_master where
npm=np

return nm, alm, kt
end function

yang

Bhs Generasi Ke-4. YC --- R4GL

Hal : 12

Latihan :
Buat program untuk menghitung luas segitiga dengan input alas
dan tinggi di main section, sedangakan perhitungan luas di
function hitung.

RECORD
Record merupakan kumpulan dari program variable yang
kemungkinannya berbeda tipe data yang satu dengan lainnya.
Sebelum memakai suatu record, kita harus mendefinisikan terlebih
dahulu pada DEFINE.
record_name
RECORD
Var_list data_type [,…….]
END RECORD
Define
rec_mk RECORD
kd_mk char(8),
nm_mk char(25),
sks smallint,
jenis char(1)
END RECORD
Main
Select kd_mk,nm_mk,sks,jenis INTO rec_mk.*
from t_matakuliah where kd_mk = ‘TI-17203’
#-------------------------------------------------------------#sql diatas bisa ditulis seperti dibawah ini
{ Select kd_mk,nm_mk,sks into rec_mk.kd_mk THRU rec_mk.sks
From t_matakuliah where kd_mk=’TI-17203’ }
#-------------------------------------------------------------display ‘Nama Matakuliah : ‘,rec_mk.nm_mk
display ‘Kode Matakuliah : ‘,rec_mk.kd_mk
end main
Jika kita mendefinisikan record sama seperti pada suatu table
(seperti contoh diatas), maka penulisannya dapat disederhanakan
menjadi :
record_name RECORD LIKE table_name.*
Define
rec_mk RECORD LIKE t_mk.*

Bhs Generasi Ke-4. YC --- R4GL

Hal : 13

main
………………….
end main
PERINTAH SELECT DENGAN CURSOR
 Mendeklarasikan cursor untuk mewakili perintah SELECT
 Mendapatkan row dengan FOREACH
 Mendapatkan row dengan OPEN , FETCH dan CLOSE
Mendeklarasikan cursor untuk select
sintaks : DECLARE nama_cursor [scroll] CURSOR FOR
SELECT statement
DECLARE k1 CURSOR FOR
Select * from t_master
Where kelas[1,2] = ‘4K’
DECLARE kur CURSOR FOR
Select npm,nama from t_master
Where nama[1]=’R’
Mendapatkan row dengan FOREACH
Statement ‘foreach’ menyebabkan urut-urutan statement dikerjakan
satu persatu.
sintaks :

FOREACH nama_kursor [INTO var]
………statement………
……………………………….
[CONTINUE FOREACH]
…………………………….
[EXIT FOREACH]
………………………
END FOREACH

 Nama kursor di FOREACH harus sudah pernah didefinisikan pada
statement DECLARE
 INTO digunakan untuk menampung hasil query setiap row
 CONTINUE FOREACH atau EXIT FOREACH digunakan untuk
interupsi pada kondisi tertentu
 Diakhiri dengan END FOREACH

# contoh penggunaan FOREACH
database filkom
main

Bhs Generasi Ke-4. YC --- R4GL

Hal : 14

define rec_mk RECORD LIKE t_matakuliah.*
declare k1 cursor for
select * from t_matakuliah where kd_mk[1,2]=’DU”
foreach k1 INTO rec_mk.*
display ‘Kode Matakuliah : ‘,rec_mk.kd_mk
display ‘Nama Matakuliah : ‘,rec_mk.nm_mk
display ‘Sks
: ‘,rec_mk.sks
end foreach
end main
CONTINUE FOREACH
Statement IF dapat digunakan bersama statement CONTINUE
FOREACH untuk menghentikan urutan statement yang ada pada
FOREACH loop, dan melanjutkan pembacaan baris berikutnya.
#contoh penggunaan statement ‘continue foreach’
database filkom
main
define rec_mhs RECORD LIKE t_master.*
declare k2 cursor for
select * from t_master
foreach k2 into rec_mhs.*
if rec_mhs.kota = ‘Jakarta’ then
continue foreach
end if
display ‘N P M : ‘,rec_mhs.npm
display ‘Nama : ‘,rec_mhs.nama
display ‘Kota
: ‘,rec_mhs.kota
display ‘ ‘
end foreach
end main
EXIT FOREACH
Statement IF dapat digunakan bersama statement EXIT FOREACH
untuk menghentikan urutan statement yang ada pada ‘foreach loop’ ,
serta keluar dari ‘foreach loop’
# contoh penggunaan ‘exit foreach’
database filkom
main
define rec_mhs RECORD LIKE t_master.*,jw char(1)
declare k3 cursor for
select * from t_master

Bhs Generasi Ke-4. YC --- R4GL

Hal : 15

foreach k3 into rec_mhs.*
display ‘N P M : ‘,rec_mhs.npm
display ‘Nama
: ‘,rec_mhs.nama
display ‘Alamat : ‘,rec_mhs.alamat
prompt ‘Ingin lihat data berikutnya ?[y/t] : ‘ for jw
if jw matches’[Tt]’ then
exit foreach
end if
end foreach
end main
Mendapatkan row dengan OPEN , FETCH dan CLOSE
Statement foreach diatas, sebenarnya mengkombinasikan beberapa
fungsi statement tunggal :
 melakukan OPEN cursor yang terkait dengan statement SELECT
 Secara berulang melakukan FETCH (mengambil) baris, dan
menjalankan sejumlah statement yang ada pada FOREACH
loop.
 Melakukan CLOSE cursor, setelah seluruh baris terbaca
seluruhnya.
OPEN
Untuk melakukan aktif set dari statement SELECT yang dikaitkan
dengan suatu cursor.
DECLARE kur CURSOR FOR
SELECT * FROM t_matakuliah
WHERE jenis = ‘P’
OPEN kur
Informix-4GL akan mencari baris sesuai statement diatas dan
meletakkan cursor pada posisi awal, sebelum baris pertama.
DK-14301
P
TI-17204
P
TI-18201
P

Pemrog.Gene.4

3

Sistem Pakar

2

Automata

2

FETCH
Untuk menggerakkan cursor pada baris berikutnya dalam suatu aktif
set, dan mengambil informasi pada baris tersebut.
#contoh penggunaan statement fetch
FETCH kur INTO rec_mk.*

Bhs Generasi Ke-4. YC --- R4GL

Hal : 16

Output dari statement di atas, sbb.

DK-14301

Pemrog.Gene.4 3

TI-17204
TI-18201

Sistem Pakar
Automata

2
2

P
cursor
P
P

Jika FETCH dijalankan sekali lagi, maka cursor akan berpindah ke
baris kedua. Bila cursor berada setelah baris terakhir, maka tidak ada
lagi informasi yang akan diambil. Pada saat yang sama Informix akan
mengisi variabel status dengan informasi NOT FOUND, sebagai tanda
bahwa cursor sudah berada di ‘luar batas’.
DK-14301
TI-17204
TI-18201

Pemrog.Gene.4 3
Sistem Pakar
2
Automata
2
Status = NOT FOUND

P
P
P
cursor

Karena kita tidak dapat memperkirakan berapa jumlah baris dalam
aktif set, maka kita harus selalu memeriksa isi variabel status,
segera setelah statement FETCH.
Contoh :
FETCH kur INTO rec_mk.*
IF status = notfound then
Message ‘Tidak ada data’
ELSE
display ‘Kode Matakuliah :,rec_mk.kd_mk
Display ‘Nama Matakuliah :,rec_mk.nm_mk
END IF
CLOSE
Jika sudah tidak membutuhkan informasi atas baris-baris yang
diperoleh dari statement SELECT, maka gunakan statement CLOSE
atas kursor yang terkait.
#contoh penggunaan statement
Close
CLOSE kur
Dapat menggunakan WHILE loop untuk pengulangan pembacaan
(FETCH) suatu baris dan memeriksa variabel status selama seluruh
baris yang ada dalam aktif set diproses.
Sintaks :
WHILE ekspresi Boolean
…………………………….
…………………………….
[ CONTINUE WHILE ]
…………………………….
…………………………….
[ EXIT WHILE ]
END WHILE
#contoh 1
Database filkom

Bhs Generasi Ke-4. YC --- R4GL

Hal : 17

Define r_mk RECORD LIKE t_mk.*,jawab char(1)
Main
DECLARE kurs CURSOR FOR
Select * from t_mk where nm_mk[1]=’A’
OPEN kurs
Let jawab=’y’
WHILE jawab matches’[Yy]’
FETCH kurs INTO r_mk.*
IF status = notfound then
Message ‘Data tidak ada’
EXIT WHILE
END IF
Display ‘Nama Matakuliah : ‘,r_mk.nm_mk
Display ‘Kode Matakuliah : ‘,r_mk.kd_mk
Prompt ‘Lihat data selanjutnya ? [y/t]’ for jawab
ENDWHILE
CLOSE kurs
End main
#contoh 2, untuk memastikan suatu aktif set itu kosong
Database filkom
Define r_mk RECORD LIKE t_mk.*,jawab char(1)
Main
DECLARE kurs SCROLL CURSOR FOR
Select * from t_mk where nm_mk[1]=’B’
OPEN kurs
FETCH FIRST kurs INTO r_mk.*
If status = notfound then
Message ‘Tidak ada data pada aktif set’
Else
Message ‘Minimal ada satu data pada aktif set’
End if
CLOSE kurs
End main
NEXT
:menandakan baris berikutnya setelah baris aktif (active set)
PREVIOUS
:menandakan baris sebelumnya dari baris aktif
PRIOR
FIRST
: menandakan baris pertama pada baris aktif
LAST
: menandakan baris terakhir pada baris aktif
CURRENT
: menandakan pada baris yg aktif pada active list
RELATIVE m : menandakan baris ke-m relatif pada kursor yg aktif
ABSOLUTE n : menandakan baris ke-n, n bias integer atau variabel dari
program

Bhs Generasi Ke-4. YC --- R4GL

Hal : 18

ARRAY
Array merupakan kumpulan record dengan tipe yang sama
Sintaks

:

array_name ARRAY[n] OF RECORD
Var_list data_type[..,…..]
END RECORD

n = bilangan integer, merupakan jumlah record yg dapat ditampung
oleh array tersebut.
#contoh
ar_krs ARRAY[12] OF RECORD
npm1
like t_nilai.npm,
nama1 like t_nilai.nama,
kd_mk1 like t_nilai.kd_mk,
nm_mk1 like t_nilai.nm_mk
END RECORD

#contoh
ar_mhs ARRAY[150] OF RECORD LIKE t_master.*
#contoh program lengkap tentang ARRAY
Database filkom
Main
Define ar_mhs ARRAY[150] OF RECORD LIKE t_master.*,
i,j smallint
DECLARE k1 CURSOR FOR
SELECT * from t_master where kelas[1]=’4’
Let i=1
FOREACH k1 INTO ar_mhs[i].*
Let i = i + 1
END FOREACH
Let j = i – 1
FOR i = 1 to j
Display ‘Data ke-‘,i,’ ‘,ar_mhs[i].*

Bhs Generasi Ke-4. YC --- R4GL

Hal : 19

END FOR
End main

Pembuatan FORM dengan 4GL
Screen FORM adalah media yg digunakan untuk input & output
variabel pada program 4GL , juga digunakan sebagai penghubung
data secara interaktif untuk menghapus , mencari & memodifikasi
data .
Sebelum digunakan pada program, screen form harus dibuat &
dicompile terlebih dahulu.
Spesifikasi file FORM
File FORM pada Informix-4GL terdiri atas 5 bagian (section) yaitu :
 DATABASE
Untuk mengidentifikasi database (jika digunakan)
 SCREEN
Untuk mengidentifikasi ukuran (dimensi), field tags, & tampilan
dari form
 TABLE (bersifat optional)
Untuk mengidentifikasi table (jika digunakan) yg berhubungan
dengan field yg digunakan dalam form
 ATTRIBUTE
Untuk mengidentifikasi spesifikasi & kegunaan setiap field pada
setiap form seperti tampilan pada layar, komentar dsb.
 INSTRUCTION (bersifat optional)
Mengidentifikasi field delimiter, screen record & screen
array.
Tampilan menu FORM pada 4GL
INFORMIX-4GL : Module Form Program Query-language
Modify , Generate,New, Compile a form

Exit

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

FORM :
Modify
Generate
New
Change an existing form specification

Compile

Exit

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - -

Struktur umum form (sama dengan struktur form pada ISQL,
hanya pada 4GL ada tambahan INSTRUCTION)

Bhs Generasi Ke-4. YC --- R4GL

Hal : 20

Database {nama database| formonly}
Screen section
{
[text] [field_tag] [char_graphics]
}
end
Tables [nama table]
Attributes
Field_tag = table.column [,type]
End
[Instruction
[delimiter ‘[]’ ]
[screen record nama_record [n]
({table.*
| table.column1 THRU table.column2})
…..]
[end]

Pembuatan form dapat dilakukan dari ‘isql’ atau ‘r4gl’, khusus jika
ada instruction, peng-compile-an harus dilakukan melalui r4gl.
#contoh form yg menggunakan instruction
database pelanggan
screen size 24 by 80
{\g--------------------------------------------------------\g
FORM PELANGGAN
Nomor pelanggan : [f000 ]
Nama pelanggan : [f001
]
Alamat
: [f002
]
Kota
: [f003
]
Jumlah tagihan : [f004
]
\g-------------------------------------------------------\g
}
end
table customer
attributes
f000 = customer.no;
f001 = customer.nama;
f002 = customer.alamat;
f003 = customer.kota;
f004 = customer.tagihan;
end
INSTRUCTION
SCREEN RECORD rec_cust (customer.nama THRU customer.tagihan)
End

Statement pada INSTRUCTION section, antara lain :
 Statement untuk menampilkan ARRAY
Digunakan perintah SCREEN RECORD

Screen record nama_record [n]
({table.* |table.column1 THRU table.column2|table.column3})

Pada screen section dibentuk sbb:
Database mahasiswa
Screen
{N P M
Nama

kelas

Bhs Generasi Ke-4. YC --- R4GL

Hal : 21

----------------------------------------[p
] [q
] [r
]
[p
] [q
] [r
]
[p
] [q
] [r
]
}
end
table t_master
attributes
p = t_master.npm;
q = t_master.nama;
r = t_master.kelas;
end
Instruction
Screen record sc_mhs[3]
(t_master.npm,t_master.nama,t_master.kelas)
end

Untuk menampilkan screen form pada program, maka harus ditulis
statement pembuka & penutup, yaitu : OPEN FORM & CLOSE FORM
Sintaks : OPEN FORM var_nm_form FROM “form_file”
DISPLAY FORM var_nm_form
CLOSE FORM var_nm_form
form yg sdh dicompile
#contoh
OPEN FORM form_cust FROM “f_cust”
Display FORM form_cust
CLOSE FORM form_cust
INPUT statement
Digunakan untuk mengisi nilaipd prog.variabel dgn data dimasukkan
melalui screen field
Sintaks : INPUT var_list FROM field_list
Contoh:
 Define rec_cust RECORD LIKE customer.*
INPUT rec_cust.nama,rec_cust.kota FROM nama,kota
 Input rec_cust.nama THRU rec_cust.tagihan
From nama,alamat,kota,tagihan
 Input rec_cust.nama THRU rec_cust.tagihan from r_cust.*
 Kalau semua nama var sama dgn nama field, dpt digunakan :
INPUT BY NAME rec_cust.nama THRU rec_cust.tagihan
DISPLAY statement
Untuk menampilkan nilai variabel melalui screen field
Sintaks : DISPLAY display_list TO field_list
Contoh :
Let rec_cust.nama =’Didi’
Let rec_cust.kota = ‘Jakarta’
Display rec_cust.nama,rec_cust.kota TO nama,kota

Bhs Generasi Ke-4. YC --- R4GL

Hal : 22

{program ini utk melihat data customer berdasarkan nomor
customer dgn menggunakan screen form}
database pelanggan
define rec_cust RECORD LIKE customer.*,
in_no LIKE customer.no
main
OPEN FORM form_cust from ‘f_cust’
Display FORM form_cust
Prompt ‘masukkan nomor customer yg dicari :’ form in_no
Select * into rec_cust.*
from customer
where no=in_no
Display by name rec_cust.*
CLOSE FORM form_cust
End main

REPORT Pada R4GL
Cara membuat REPORT
 Routine report berada diluar main routine.
Dengan menggunakan routine report, kita dapat mengatur
informasi sebagai suatu laporan dengan menentukan judul
laporan, perhitungan, margin, ukuran kertas dan elemenelemen lainnya.
 Data yg akan ditampilkan dalam report diperoleh dari main
routine atau dari function routine.
 Gunakan looping (seperti FOREACH atau WHILE) bersama
dengan START REPORT, OUTPUT TO REPORT dan FINISH REPORT,
untuk mengirim data ke report.
STRUKTUR REPORT
MAIN
START REPORT report_name
begin loop
statement yg memberikan nilai a,b,c
OUTPUT TO REPORT report_name
……….
End loop
FINISH REPORT report_name
END MAIN

Bhs Generasi Ke-4. YC --- R4GL

Hal : 23

REPORT report_name(x,y,z)
…………….
END REPORT
FORMAT REPORT ROUTINE
REPORT report_name (argument list)
[DEFINEdefine statement]
[OUTPUT output statement]
[ORDER BY sort list]
FORMAT
control block
……….statement…….
………………………………
END REPORT
STATEMENT REPORT
 Report didefinisikan diluar blok MAIN program (main routine)
 Semua variabel yg dikirim ke report diletakkan pada
argument_list
 Argument_list tidak boleh terdiri dari array atau record yg
mengandung nilai array. (satu argument hanya boleh
mempunyai satu nilau yg unik)
DEFINE SECTION
Semua argument_list pada report harus didefinisikan
Report cust_report (no,nama,kota)
Define no smallint,
nama char(25),
kota char(15)
Report cust_daf (r_cust)
Define r_cust record like cust.*
OUTPUT SECTION
 Untuk mengubah margin
 Untuk menentukan panjang kertas
 Mengirim output ke printer atau ke file
 Default margin :
Left margin 5 spaces
Top margin 3 lines
Bottom margin 3 lines
Page length 66 lines
ORDER BY SECTION
 Untuk mengurutkan data melalui report
 Dapat dilakukan berdasarkan argument_list
Report cust_daf (no,nama,kota)
Define no smallint, nama char(25), kota char(15)
order by nama

Bhs Generasi Ke-4. YC --- R4GL

Hal : 24

FORMAT SECTION
Pada bagian ini ditulis control block dan statement² untuk :
 Membuat page header and trailers
 Mencetak informasi dengan format tertentu
 Mengelompokkan informasi
 Perhitungan seperti total atau rata².
END REPORT
Ditulis untuk mengakhiri suatu report, setelah format section.
 MENJALANKAN REPORT 
Data dikirim ke report dari MAIN routine atau function dengan
menggunakan loop seperti : WHILE atau FOREACH dgn statement
START REPORT report_name
OUTPUT TO REPORT report_name (variable_list)
FINISH REPORT report_name
#contoh penggunaan looping foreach utk mengirim data ke
report
database pelanggan
main
define rec_cust record like cust.*
declare kur cursor for
select * from cust
start report cust_daf
foreach kur into rec_cust.*
output to report cust_daf (rec_cust.*)
end foreach
finish report cust_daf
end main
report cust_daf(r_cust)
define r_cust record like cust.*
format
on every row
end report
Space/spaces
Untuk menyisipkan space diantara 2 ekspresi pada statement
Contoh : print nomor clipped,”,”,2 spaces,nama
Skip
Untuk menyisipkan baris kosong
Contoh : skip 2 lines
Pageno

Bhs Generasi Ke-4. YC --- R4GL

Hal : 25

Penomoran halaman secara otomatis
Cth : Print ‘Laporan Keuangan’,column 50,’Hal : ‘,pageno using ‘##”
#contoh penulisan format section
format
page header
print column 25,”Daftar Pelanggan”
skip 2 lines
print ‘Nomor Pelanggan’,
column 25,’N a m a’,
column 50,’K o t a’
print ‘-------------------------------------------------------‘
skip 1 line
on every row
print no,column 25,nama,column 50,kota
page trailer
print ‘Data pelanggan’,column 60,’hal :’,pageno using ‘##’
output :

Daftar Pelanggan
Nomor Pelanggan
1015002
……………
………
Data pelanggan
:1

Nama
Evita Aulia
…………..

Kota
Jakarta

Hal

#contoh pembuatan report
database pelanggan
main
define rec_cust record like cust.*
declare kur cursor for
select no,nama,kota from t_cust
order by kota
start report cust-daf
foreach kur into rec_cust.no,rec_cust.nama,rec_cust.kota
output to report cust_daf(rec_cust.no,rec_cust.nama,
rec_cust.kota)
end foreach
finish report cust_daf
end main
report cust_daf(nomor,nm,kt)
define nomor smallint,nm char(25),kt char(15)
format
on every row
print nomor,column 25,nm,column50,kt
after group of kt
skip 2 lines
end report
output :

Bhs Generasi Ke-4. YC --- R4GL

Hal : 26

103
105
107

Dina
Tio
Adi

Bandung
Bandung
Bandung

104
108

Doni
Rini

Bogor
Bogor

101
102
106

Mira
Lina
Tania

Jakarta
Jakarta
Jakarta

#contoh penggunaan operasi aritmatika
on every row
print nomor,
column 25,nama,
column 50,tagih*0.8 using “Rp ###,###.##”
#contoh penggunaan function
on last row
print ‘Total Tagihan’,
column 20,SUM(tagih) using ‘Rp ###,###.##’
skip 1 line
print ‘jumlah pelanggan’,
column 20,COUNT(*) using ‘###’
Group function
Yaitu agregate function yg dapat digunakan untuk perhitungan suatu
group informasi pada report
 Group sum(eksp)
 Group count(*)
 Group min(eksp)
 Group max(eksp)
 Group avg(eksp)

#contoh menghitung jumlah tagihan setiap kota
…………………
Report hit_tag(nomor,nm,kt,tagih)
Define nomor smallint
nm char(25), kt char(15),
tagih like cust.tagihan
order by kt
format
page header
print ‘NOMOR’,
column 15,’NAMA’,
column 40,’KOTA’,

Bhs Generasi Ke-4. YC --- R4GL

Hal : 27

column 60,’TAGIHAN’
skip 2 lines
on every row
print nomor,column 15,nm,column 40,kt,
column 60,tagih using ‘Rp ###,###.##’
after group of kt
skip 1 line
print column 20,’Total tagihan kota ‘,kt,
column 55,GROUP SUM(tagih) using ‘Rp ###.###.##’
skip 2 lines
page trailer
print column 20,'TOTAL TAGIHAN',
column 55, SUM(tagih) using 'Rp ###.###.##'
end report
………….
Outputnya :

NOMOR

NAMA

KOTA

TAGIHAN

103
60.000,00
105
15.000,00
107
20.000,00

Dina

Bandung

Rp

Tio

Bandung

Rp

Adi

Bandung

Rp

Total tagihan kota Bandung

Rp

95.000,00
104
30.000,00
108
25.000,00

Doni

Bogor

Rp

Rini

Bogor

Rp

Total tagihan kota Bogor

Rp

55.000,00
101
75.000.00
102
35.000,00
106
40.000,00

Mira

Jakarta

Rp

Lina

Jakarta

Rp

Tania

Jakarta

Rp

Total tagihan kota Jakarta

Rp

150.000,00
TOTAL TAGIHAN

Rp

300.000.00

Menampilkan REPORT
Report dapat ditampilkan ke layar, printer atau ke file.
Report didefinisikan pada output section
OUTPUT
Left margin 10
Page length 50
Report to “/dev/lp0”

#cetak ke printer

Bhs Generasi Ke-4. YC --- R4GL

Hal : 28

OUTPUT
Report to “hasil’

#cetak ke file ‘hasil’

OUTPUT
# Report to “hasil’

#cetak ke layar monitor

#contoh pembuatan report tanpa pengiriman parameter
# buat blanko KRS hilang
main
define i,jum smallint
prompt ‘Mau cetak berapa kali : ‘ for jum
for I = 1 to jum
start report cetakan
output to report cetakan( )
finish report cetakan
end for
end main
report cetakan( )
output report to ‘dev/lp1’
format
page header
print ‘Setoran Universitas Gunadarma’
print ‘N P M = ………………’
print ‘Nama = …………………………………………………’
print ‘Kelas = …………’
skip 2 lines
print ‘Biaya pencetakan KRS pengganti
Rp
5000’
end report

#prog. pencetakan report npm dan nama mhs per kelas dgn
m’gunakan array
database filkom
main
define a_mhs ARRAY[150] of record
npm like t_master.npm,
nama like t_master.nama
end record,
kls char(5),
i,j,k
smallint
prompt ‘Masukkan kelas yg akan dicetak : ‘ for kls
declare kur cursor for
select npm,nama from t_master where kelas=kls
order by npm
let i = 1
foreach kur into a_mhs[i].*
let i = i + 1
end foreach
let j = i –1
start report cetak

Bhs Generasi Ke-4. YC --- R4GL

for k = 1 to j
output to report cetak(a_mhs[k].npm,a_mhs[k].nama,kls,k]
end for
finish report cetak
end main
report cetak(np,nm,kl,m)
define np like t_master.npm,
nm like t_master.nama,
kl like t_master.kelas,
m smallint
output
report to ‘/dev/lp0’
top margin
5
bottom margin 6
left margin
5
page length 66
format
page header
print ‘Universitas Gunadarma’
print ‘Kelas : ‘,kl,column 40,’Hal : ‘,pageno using’##’
print ‘-------------------------------------------------------------------------‘
print column 3,’No’,column 10,’N P M’,column 25,’N A M A’
print ‘-------------------------------------------------------------------------‘
on every row
print column 3, m using ‘###’,column 10,np,column 25,nm
page trailer
print ‘-------------------------------------------------------------------------‘
on last row
print ‘-------------------------------------------------------------------------‘
end report

Tiga (3) contoh program dengan ouput yang sama
#contoh 1
database filkom
globals
define
rec_byr record like t_uang_klh.*
end globals
main
declare kur cursor for
select * from t_uang_klh
where npm[4,5]=’97’ and ket=’L’
start report cetak
foreach kur into rec_byr.*
output to report cetak( )
end foreach
finish report cetak
end main
report cetak( )
output
top margin 5
bottom margin 4
page length 66

Hal : 29

Bhs Generasi Ke-4. YC --- R4GL

report to ‘/dev/lp2’
format
page header
print column 25,’Contoh Laporan Pembayaran’,
column 55,’Hal : ‘,pageno using ‘##’
print ‘-----------------------------------------------------------------‘
print ‘N P M
Jumlah Bayar
Tanggal Bayar
Keterangan’
print ‘-----------------------------------------------------------------‘
on every row
print rec_byr.npm,
column 13,rec_byr.jml_bayar using ‘Rp
##,###,###.##’,
column 34,rec_byr.tgl_bayar using ‘dd/mm/yy’,
column 55,rec_byr.ket
print ‘-----------------------------------------------------------------‘
page trailer
print column 34,’Pem.Generasi 4 ‘,today using
‘ddd,dd/mmm/yyyy’
end report
#contoh 2 : menggunakan parameter
database filkom
main
define
rec_byr record like t_uang_klh.*
declare kur cursor for
select * from t_uang_klh
where npm[4,5]=’97’ and ket=’L’
start report cetak
foreach kur into rec_byr.*
output to report cetak(rec_byr.* ) #contoh kirim
parameter
end foreach
finish report cetak
end main
report cetak( rec_byr)

#contoh menggunakan parameter
#parameter ini didefenisikan ulang,krn rec_byr tdk didef. secara
global

define rec_byr record like t_uang_klh.*

output
top margin 5
bottom margin 4
page length 66
report to ‘/dev/lp2’
format
page header
print column 25,’Contoh Laporan Pembayaran’,
column 55,’Hal : ‘,pageno using ‘##’

Hal : 30

Bhs Generasi Ke-4. YC --- R4GL

print ‘-----------------------------------------------------------------‘
print ‘N P M
Jumlah Bayar
Tanggal Bayar
Keterangan’
print ‘-----------------------------------------------------------------‘
on every row
print rec_byr.npm,
column 13,rec_byr.jml_bayar using ‘Rp
##,###,###.##’,
column 34,rec_byr.tgl_bayar using ‘dd/mm/yy’,
column 55,rec_byr.ket
print ‘-----------------------------------------------------------------‘
page trailer
print column 34,’Pem.Generasi 4 ‘,today using
‘ddd,dd/mmm/yyyy’
end report

#contoh 3 : menggunakan ARRAY
database filkom
globals
define rec_byr array[500] of record like t_uang_klh.*,
i,j smallint
end globals
main
declare kur cursor for
select * from t_uang_klh
where npm[4,5]=’97’ and ket=’L’
let i=1
foreach kur into rec_byr[i].*
let i = i + 1
end foreach
start report cetak
for j = 1 to i-1
output to report cetak( )
end for
finish report cetak
end main
report cetak( )
output
top margin 5
bottom margin 4
page length 66
report to ‘/dev/lp2’
format
page header
print column 25,’Contoh Laporan Pembayaran’,
column 55,’Hal : ‘,pageno using ‘##’
print ‘-----------------------------------------------------------------‘
print ‘N P M
Jumlah Bayar
Tanggal Bayar
Keterangan’
print ‘-----------------------------------------------------------------‘

Hal : 31

Bhs Generasi Ke-4. YC --- R4GL

Hal : 32

on every row
print rec_byr[j].npm,
column 13,rec_byr[j].jml_bayar using ‘Rp
##,###,###.##’,
column 34,rec_byr[j].tgl_bayar using ‘dd/mm/yy’,
column 55,rec_byr[j].ket
print ‘-----------------------------------------------------------------‘
page trailer
print column 34,’Pem.Generasi 4 ‘,today using
‘ddd,dd/mmm/yyyy’
end report
Output ketiga program di atas sbb.:

N P M

10699009
10699017
10699026
10699028
10699036
10699049
10699061
10699086
10699087
10699104
10699105
10699142

Contoh Laporan Pembayaran
Jumlah Bayar
Tanggal
Keterangan
Ba
ya
r
Rp 3.991.500,00
15/07/99
L
Rp 3.757.950,00
25/06/99
L
Rp 3.618.450,00
01/07/99
L
Rp 4.216.500,00
23/07/99
L
Rp 4.216.500,00
09/06/99
L
Rp 3.676.500,00
10/05/99
L
Rp 3.753.450,00
22/06/99
L
Rp 3.618.450,00
05/07/99
L
Rp 3.618.450,00
16/08/99
L
Rp 3.991.500,00
02/08/99
L
Rp 3.753.450,00
21/06/99
L
Rp 3.618.450,00
01/06/99
L

Hal : 1

Bhs Generasi Ke-4. YC --- R4GL

Hal : 33

LATIHAN
Diketahui :
nama database yang digunakan -> pegawai
nama table yang digunakan
-> t_barang
struktur file sbb :
kd_brg
char(4)
nm_brg
char(25)
hrg_brg
money
stock_min
smallint
jml_brg
smallint
ket_brg
char(1)
Ketentuan untuk field tag yang didiskripsikan dalam attribute :
- kd_brg harus diisi 2x
- nm_brg harus huruf besar dan jika pengisian nm_brg sudah penuh maka
kursor otomatis akan pindah pada field berikutnya
- ket_brg hanya boleh diisi angka '1','2','3' atau '4'
Syarat perintah query yang digunakan pada report yaitu :
"tampilkan semua data barang yang ket_brg adalah '1' atau '2' saja !"
SOAL :
1. Buatkan program untuk menampilkan FORM
2. Buatkan program untuk membuat REPORT dengan ketentuan sbb :
- batas atas 5
- batas bawah 5
- batas kiri 5
- batas kanan 5
- panjang kertas 60
- dicetak dikertas dengan nama printer '/dev/lp3'
OUTPUT :
LAPORAN PERSEDIAAN BARANG
Hal : ....
----------------------------------------------------Kode Brg
Nama Brg
Harga
Jumlah
----------------------------------------------------A012
Kertas Folio Rp. 12.000
30
xxxx
xxxxxx
Rp.999.999
99
xxxx
xxxxxx
Rp.999.999
99
xxxx
xxxxxx
Rp.999.999
99
xxxx
xxxxxx
Rp.999.999
99
----------------------------------------------------*** SELAMAT MENGERJAKAN ***

Bhs Generasi Ke-4. YC --- R4GL

Hal : 34