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 Exit Create , modify , or run individual 4gl program modules - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - - |
|
Module : bekerja pada program module Informix-4gl
Form : bekerja pada screen form
Program : spesifikasi komponen dari program multi-module
Query language : menggunakan SQL interaktif
Exit : 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 : untuk memodifikasi module 4gl yang sudah ada
New : untuk membuat module 4gl yang baru
Compile : 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 sekelom-
pok program yang kompleks & ingin menguji dengan cara meng-
kompilenya 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 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 Discard-and-exit Compile the 4gl module specification - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - 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 - - - - |
|
~ ~ 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 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 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 kode_mk = ‘DK-14202’ #contoh penggunaan LET LET nama-mk = ‘fisika’ LET jsks = 2 LET jns =’W’ 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 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 filkomMAIN 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 |
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
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 jumFROM 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
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 & dimengerti didalam routine yg mendefinisikannya.
Skema lingkup data variabel
Globals Define var A modul 1 Main Define var B modul 2 End main Define var C Function x Define var D modul 3 Function y Define var E |
Lokasi | Nama variabel | Type | Scope |
Globals | Var A | Global | Main Function x Function y |
Main | Var B | Local | Main |
Module | Var C | Module | Function x Function y |
Function x | Var D | Local | Function x |
Function y | Var E | Local | Function y |
Contoh :
Globals Define a integer End globals Main Let a = 0 Call ganti( ) Display a End main Function ganti( ) Let a = 99 End function #outputnya = 99 | Globals Define a integer End globals Main Let a = 0 Call ganti( ) Display a End main Function ganti( ) Define a integer Let a = 99 End function # 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) #2 var bertype sama Let nama = ‘audi’ Let kota = ‘Bandung’ Call lihat(nama,kota) # passing value End main 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 |
RETURN VALUE
Mengembalikan nilai dari function kembali ke routine yang memanggilnya.
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 |
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.* 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 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 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 Pemrog.Gene.4 3 P |
TI-17204 Sistem Pakar 2 P |
TI-18201 Automata 2 P |
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.* |
Output dari statement di atas, sbb.
DK-14301 | Pemrog.Gene.4 | 3 | P cursor |
TI-17204 | Sistem Pakar | 2 | P |
TI-18201 | Automata | 2 | 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 | Pemrog.Gene.4 | 3 | P |
TI-17204 | Sistem Pakar | 2 | P |
TI-18201 | Automata | 2 | P |
Status = NOT FOUND 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 ‘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 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
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 FORSELECT * 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].* 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 Exit Modify , Generate,New, Compile a form - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - - |
|
FORM : Modify Generate New Compile Exit Change an existing form specification - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - Press CTRL-W for help - - - - |
|
Struktur umum form (sama dengan struktur form pada ISQL, hanya pada 4GL ada tambahan INSTRUCTION)
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 ] A l a m a t : [f002 ] K o t a : [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 ----------------------------------------- [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 |
{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 elemen-elemen 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 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 |
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.
J MENJALANKAN REPORT J
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
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 N a m a K o t a 1015002 Evita Aulia Jakarta …………… ………….. ……… Data pelanggan Hal : 1 |
#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 :
103 Dina Bandung105 Tio Bandung 107 Adi Bandung 104 Doni Bogor 108 Rini Bogor 101 Mira Jakarta 102 Lina Jakarta 106 Tania 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’, 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 TAGIHAN103 Dina Bandung Rp 60.000,00105 Tio Bandung Rp 15.000,00 107 Adi Bandung Rp 20.000,00 Total tagihan kota Bandung Rp 95.000,00 104 Doni Bogor Rp 30.000,00 108 Rini Bogor Rp 25.000,00 Total tagihan kota Bogor Rp 55.000,00 101 Mira Jakarta Rp 75.000.00 102 Lina Jakarta Rp 35.000,00 106 Tania Jakarta Rp 40.000,00 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
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 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 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 ‘##’ 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 ‘-----------------------------------------------------------------‘ 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.:
Contoh Laporan Pembayaran Hal : 1
N P M | Jumlah Bayar | Tanggal Bayar | Keterangan |
10699009 | Rp 3.991.500,00 | 15/07/99 | L |
10699017 | Rp 3.757.950,00 | 25/06/99 | L |
10699026 | Rp 3.618.450,00 | 01/07/99 | L |
10699028 | Rp 4.216.500,00 | 23/07/99 | L |
10699036 | Rp 4.216.500,00 | 09/06/99 | L |
10699049 | Rp 3.676.500,00 | 10/05/99 | L |
10699061 | Rp 3.753.450,00 | 22/06/99 | L |
10699086 | Rp 3.618.450,00 | 05/07/99 | L |
10699087 | Rp 3.618.450,00 | 16/08/99 | L |
10699104 | Rp 3.991.500,00 | 02/08/99 | L |
10699105 | Rp 3.753.450,00 | 21/06/99 | L |
10699142 | Rp 3.618.450,00 | 01/06/99 | L |
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
-----------------------------------------------------
0 komentar:
Posting Komentar