You are on page 1of 60

LISP with Interface

& Connect to Database

26 January 2009, Lab AI3


9.30 am
Installation 1
Installation 2
Installation 3
Installation 4
Installation 5
Installation 6
Installation 7
Installation 8
Installation 9
Installation 10
Step 1

Create a database with


3 tables
Program – MS Access
Select Blank Database
Create A New Blank Database
Create Table1
Table 1: Album
Datasheet View – input data
Table 2: KategoriAlbum
Table 3: Pengeluar
Where is ODBC
Where is ODBC
Connection with ODBC 1
Connection with ODBC 2
Step 2

Create a new project in


Allegro 8.0 with IDE
Program – Allegro ANSI ACL Images
– Allegro CL8.0 (w IDEA, ANSI)
Start Lisp with Interface (Alg w IDE)
Create A New Project
Select Destination Folder
View Project Window
File – New Form – to create a new interface
Edit Window Name
Form1 Window
Inspector for Form1
First draft interface
Interface 1: Main Menu
Font for Static Text
Lisp Source File: Coding Form1
Interface 2: Add Record
Value for StaticText
Lisp Source File: Coding Form2
Extra 1

Creating A Functional
Interface in Lisp
Create An Interface
Code 1 -btntulis
• Selepas merekabentuk form tersebut, pilih event
on-click bagi :btntulis dan tulis kod seperti berikut:

• (defun form1-btntulis-on-click (dialog widget)
• (declare (ignore-if-unused dialog widget))

• (setf (value (find-sibling :text1 widget)) "Selamat
Mencuba!")

• t)
Code 2 - btnsalin
• Seterusnya, pilih event on-click bagi :btnsalin
dan tulis kod seperti berikut:
•  
• (defun form1-btnsalin-on-click (dialog widget)
• (declare (ignore-if-unused dialog widget))

• (setf (value (find-sibling :text2 widget)) (value
(find-sibling :text1 widget)))

• t)
Code 3 - btnpadam
• Dan akhir sekali, pilih event on-double-click bagi
:btnpadam dan tulis kod berikut:
•  
• (defun form1-btnpadam-on-double-click (dialog
widget)
• (declare (ignore-if-unused dialog widget))

• (setf (value (find-sibling :text1 widget)) "")
• (setf (value (find-sibling :text2 widget)) "")

• t)
Form 1 to Form 2
Code to Display Form 2
• ;; Code for the dialog :form1
•  
• (in-package :common-graphics-user)
•  
• (defun form1-btnform2-on-click (dialog widget)
• (declare (ignore-if-unused dialog widget))

• (make-form2)

• t)
Extra 2

Manipulating Database
Connect to Database
• Membina Sambungan Kepada Pangkalan Data

• Untuk memanipulasi pangkalan data dengan menggunakan LISP,


terdapat beberapa arahan yang penting iaitu:

• (require :aodbc-v2) ;
import package

• (setf maindb (dbi:connect :data-source-name “tt-db”)) ;


connect to database

• (dbi:disconnect maindb) ;
disconnect
Capai Rekod 1
•  ;;arahan untuk menyambung kepada pangkalan data
• (require :aodbc-v2)
•  
• ;;data-source-name yang digunakan ialah “projek”
• (setf maindb (dbi:connect :data-source-name "projek"))
•  
• (defun form3-cmdload-on-click (dialog widget)
• (declare (ignore-if-unused dialog widget))

• ;;Umpuk code dengan input yang dimasukkan di editable text :txtcode
• (setf code (value (find-sibling :txtcode widget)))

• ;;Cek sama ada terdapat input, jika tidak papar mesej kepada pengguna
• (cond ((equal "" code) nil
• (setf (value (find-sibling :txtstate2 widget)) "MAKLUMAT TIDAK CUKUP!"))
• (t (format t "~& Fetch data from database... ")
Capai Rekod 2
• ;;Arahan untuk menulis SQL untuk capai data dari table Album pangkalan data
• ;;Jika semua nilai yang dicapai adalah jenis rentetan, letak :String pada :types
• (let* ((tmp (dbi:sql (format nil "select * from Album where KodAlbum=~d" code) :types '(:String :String :String :String :String :String :String :String :String) :db maindb)))
•  
• ;;Umpuk nilai-nilai dicapai kepada pembolehubah-pembolehubah
• ;;Nilai yang didapat adalah dalam bentuk senarai, oleh itu guna arahan car untuk
• ;;memisahkan nilai-nilai tersebut
• (cond ((null tmp) nil
• (setf (value (find-sibling :txtstate2 widget))
• "REKOD TIDAK WUJUD.") )
• (t (let* ((kodalbum (first (car tmp)))
• (tajuk (second (car tmp)))
• (penyanyi (third (car tmp)))
• (bilcd (fourth (car tmp)))
• (kategori (fifth (car tmp)))
• (kodpengeluar (sixth (car tmp)))
• (tahun (seventh (car tmp)))
• (status (eighth (car tmp)))
• (harga (ninth (car tmp))))
• (format t "~& ~d ~d ~d ~d ~d ~d ~d ~d ~d" kodalbum tajuk penyanyi bilcd kategori kodpengeluar tahun status harga)

• ;;Setalah nilai-nilai telah dicapai, umpukkan nilai-nilai pembolehubah kepada komponen ;;editable text pada form anda.
• (setf (value (find-sibling :txt1 widget)) (values kodalbum))
• (setf (value (find-sibling :txt2 widget)) (values tajuk))
• (setf (value (find-sibling :txt3 widget)) (values penyanyi))
• (setf (value (find-sibling :txt4 widget)) (values bilcd))
• (setf (value (find-sibling :txt5 widget)) (values kategori))
• (setf (value (find-sibling :txt6 widget))
• (values kodpengeluar))
• (setf (value (find-sibling :txt7 widget)) (values tahun))
• (setf (value (find-sibling :txt8 widget)) (values status))
• (setf (value (find-sibling :txt9 widget)) (values harga))
• (setf (value (find-sibling :txtstate2 widget))
• "REKOD CD DICAPAI.")
•  
• (values kodalbum tajuk penyanyi bilcd kategori kodpengeluar tahun status harga)))))))

• t)
Tambah Rekod 1
• ;;arahan untuk menyambung kepada pangkalan data
• (require :aodbc-v2)
•  
• ;;data-source-name yang digunakan ialah “projek”
• (setf maindb (dbi:connect :data-source-name "projek"))
•  
• (defun form2-cmdadd-on-click (dialog widget)
• (declare (ignore-if-unused dialog widget))
•  
• ;;umpuk semua input yang dimasukkan kepada pembolehubah
• (setf title (value (find-sibling :txt21 widget)))
• (setf singer (value (find-sibling :txt22 widget)))
• (setf totalcd (value (find-sibling :txt23 widget)))
• (setf category (value (find-sibling :txt24 widget)))
• (setf pubcode (value (find-sibling :txt25 widget)))
• (setf year (value (find-sibling :txt26 widget)))
• (setf state (value (find-sibling :txt27 widget)))
• (setf price (value (find-sibling :txt28 widget)))
Tambah Rekod 2
• ;;cek sama ada semua input telah dimasukkan oleh pengguna, jika tidak paparkan mesej
• (cond ((or (equal "" title) (equal "" singer) (equal "" totalcd)
• (equal "" category) (equal "" pubcode) (equal "" year) (equal "" state) (equal "" price)) nil
• (setf (value (find-sibling :txtstate1 widget))
• "MAKLUMAT TIDAK CUKUP!" ) )
•  
• ;;Arahan untuk menulis SQL untuk tambah data kepada table Album pangkalan data
• (t (let* ((ins (dbi:sql (format nil "insert into album (Tajuk,
• Penyanyi, BilCd, Kategori, KodPengeluar, Tahun, Status, Harga)
• values ('~d', '~d', '~d', '~d', '~d', '~d', '~d', '~d')"
• title singer totalcd category pubcode year state price)
• :db maindb))))
• (setf (value (find-sibling :txtstate1 widget))
• "MAKLUMAT TELAH DITAMBAH.")))

• t)
Kemaskini Rekod 1
• ;;arahan untuk menyambung kepada pangkalan data
• (require :aodbc-v2)
•  
• ;;data-source-name yang digunakan ialah “projek”
• (setf maindb (dbi:connect :data-source-name "projek"))
•  
• (defun form3-cmdlupdate-on-click (dialog widget)
• (declare (ignore-if-unused dialog widget))

• ;;umpuk semua input yang dimasukkan kepada pembolehubah
• (setf code (value (find-sibling :txt1 widget)))
• (setf title (value (find-sibling :txt2 widget)))
• (setf singer (value (find-sibling :txt3 widget)))
• (setf totalcd (value (find-sibling :txt4 widget)))
• (setf category (value (find-sibling :txt5 widget)))
• (setf pubcode (value (find-sibling :txt6 widget)))
• (setf year (value (find-sibling :txt7 widget)))
• (setf state (value (find-sibling :txt8 widget)))
• (setf price (value (find-sibling :txt9 widget)))
Kemaskini Rekod 2
• ;;cek sama ada semua input telah dimasukkan oleh pengguna, jika tidak paparkan
mesej
• (cond ((or (equal "" title) (equal "" singer) (equal "" totalcd)
• (equal "" category) (equal "" pubcode) (equal "" year)
• (equal "" state) (equal "" price) (equal "" code)) nil

• (setf (value (find-sibling :txtstate2 widget)) "MAKLUMAT TIDAK CUKUP!"))
•  
• ;;Arahan untuk menulis SQL untuk kemaskini data kepada table Album pangkalan
data
• (t (let* ((upd (dbi:sql (format nil "update album set Tajuk='~d',
• Penyanyi='~d', BilCd='~d', Kategori='~d', KodPengeluar='~d', Tahun='~d',
Status='~d', Harga='~d' where KodAlbum=~d" title singer totalcd category
pubcode year state price code) :db maindb))))
• (setf (value (find-sibling :txtstate2 widget))
• "REKOD CD TELAH DIKEMASKINI.") ))
• t)
Hapus Rekod 1
• ;;arahan untuk menyambung kepada pangkalan data
• (require :aodbc-v2)
•  
• ;;data-source-name yang digunakan ialah “projek”
• (setf maindb (dbi:connect :data-source-name "projek"))
•  
• (defun form4-cmddelete-on-click (dialog widget)
• (declare (ignore-if-unused dialog widget))

• ;;Umpuk nilai input yang hendak dihapus kepada
pembolehubah
• (setf code (value (find-sibling :txtdelete widget)))
Hapus Rekod 2
• ;;cek sama ada semua input telah dimasukkan oleh pengguna, jika tidak
paparkan mesej
• (cond ((equal "" code) nil
• (setf (value (find-sibling :txtstate3 widget))
• "Maklumat Tidak Cukup!"))
•  
• ;;Arahan untuk menulis SQL untuk hapus rekod table Album pangkalan
data
• (t (let* ((del (dbi:sql (format nil "delete from album where
• KodAlbum=~d" code) :db maindb))))
• (setf (value (find-sibling :txtstate3 widget))
• "Rekod Telah Dihapuskan.") ))

• t)
The End….

Sila belajar sama2 ahli


kumpulan ye… tq..

You might also like