Sunday, July 6, 2008

Membangun aplikasi dengan VFP dgn database My Sql

Bagian I

-------------------------------------------------------------------------------------------------------------

# mulai copy disini

CREATE TABLE anggota (

kdangg int(11) NOT NULL auto_increment,

nama varchar(50) default NULL,

alamat mediumtext,

notelp varchar(50) default NULL,

PRIMARY KEY (kdangg)

) TYPE=MyISAM;


# Isi data tabel 'anggota'

INSERT INTO anggota (kdangg, nama, alamat, notelp) VALUES("1", "nobody", "diantara runput ilalang", "54654654654");

INSERT INTO anggota (kdangg, nama, alamat, notelp) VALUES("2", "somebody", "somewhere", "84555245");


CREATE TABLE fitur (

kdfitur int(11) NOT NULL auto_increment,

nama varchar(50) default NULL,

ket mediumtext,

kdangg int(11) default NULL,

PRIMARY KEY (kdfitur)

) TYPE=MyISAM;

#selesai script




--------------------------------------------------------------------------------------------------------------

Bagian II

--------------------------------------------------------------------------------------------------------------



Sebelumnya kita sudah membahas tentang bagaimana membuat database mySQL dengan menggunakan mySQL-Front dan tentang ODBC Diver. Kali ini akan saya bahas tentang pembuatan aplikasinya dengan Visual FoxPro (untuk referensinya saya menggunakan VFP 8.0 Pro, tetapi anda juga dapat mengaplikasikannya untuk versi 6 dan 7 !).


Visual FoxPro adalah salah satu software paling (kalau boleh saya bilang terbaik!) baik untuk pemrosesan data. Untuk keterangan selengkapnya, anda dapat membaca artikel dari Handi berjudul "10 Alasan menggunakan Visual FoxPro".


Komunikasi antara Visual FoxPro dengan mySQL Server

Komunikasi antara Visual FoxPro dengan mySQL dapat dibentuk dengan beberapa cara, seperti menggunakan ODBC (SQLSTRINGCONNECT( ), SQLCONNECT( )), menggunakan ActiveX objek, atau dengan menggunakan Library bawaan mySQL sendiri yaitu "Libmysql.dll". Kali ini akan saya bahas koneksi dengan menggunakan ODBC Driver saja.


- SQLCONNECT( )

Syntax : SQLCONNECT( 'nama_koneksi' , 'namadatakoneksiODBC' , 'usenameODBC' , 'passwordODBC' )

Keterangan :

- 'nama_koneksi' = Nama koneksi yang akan anda gunakan setiap anda akan memproses data. Sebaiknya variabel ini disimpan sebagai variabel PUBLIC

- 'namadatakoneksiODBC' = Nama koneksi ODBC, BUKAN nama database anda...!

- 'usenameODBC' = Nama user database

- 'passwordODBC' = Password database user tersebut

Kelebihan :

- Lebih cepat dalam pemrosesan data dari pada menggunakan SQLSTRINGCONNECT( )

- Lebih stabil karena koneksi sudah dibentuk sesaat setelah login ke sistem Windows anda

- Tidak adanya ketergantungan terhadap versi ODBC

Kekurangan :

- Anda harus membuat koneksinya disetiap mesin yang akan memproses data.

- Tidak Secure karena detail tentang koneksi ini (termasuk username dan passwordnya...!) dapat dilihat lewat Registry di "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC"


- SQLSTRINGCONNECT( )

Syntax : SQLCONNECT( m.stringkoneksi )

String koneksi : "DRIVER={MySQL ODBC 3.51 Driver};DESC=;DATABASE=";

+_lcDBname+";SERVER="+_lcserver+";UID="+_lcUsername+;

";PASSWORD="+_lcpswDB+";PORT=;OPTION=;STMT=;"

Keterangan :

- 'stringkoneksi = Alias (string) koneksi yang akan dieksekusi oleh SQLCONNECT( )

- _lcDBname = variable nama database mySQL, contoh : "databaseku"

- _lcserver = variable nama server atau IP server, contoh : "localhost" atau "90.0.0.1"

- _lcUsername = variable username database, contoh : "root"

- _lcpswDB = variable password database, contoh : "inikunci"

Atau anda dapat menuliskannya secara langsung :

"DRIVER={MySQL ODBC 3.51 Driver};DESC=;DATABASE=databaseku;SERVER=localhost;UID=root;PASSWORD=inikunci;PORT=;OPTION=;STMT=;"

Ingat...! mySQL pada dasarnya dikembangkan untuk lingkungan UNIX yang case sensitive dalam pembacaan karakter! Walaupun hal ini tidak berlaku untuk versi windowsnya, akan tetapi sebaiknya anda perhatikan besar kecilnya huruf tersebut!

Kelebihan :

- Tidak perlu membuat koneksi ODBC via Control Panel di tiap-tiap mesin yang akan memproses data

- Sangat Secure karena detail koneksi seperti nama database, username database dan passwordnya berada didalam source code aplikasi anda

- Menggunakan Resource yang lebih sedikit dibandingkan dengan SQLCONNECT( )

Kekurangan :

- Adanya ketergantungan versi ODBC Driver, yang berarti jika anda mengganti versi ODBC driver di mesin yang akan digunakan memproses data, maka anda harus mengubah source code-nya (walaupun dengan sedikit trik anda tidak perlu mengubah source code tersebut...;-p )


Anda dapat menggunakan salah satu dari fungsi koneksi diatas sesuai dengan kebutuhan anda. Sebagai catatan, perbedaan kecepatan proses data untuk jaringan LAN tidak signifikan. Bahkan anda tidak akan merasakan delaynya. Hal ini disebabkan bukan VFP yang memproses datanya, melainkan SQL Server yang memproses datanya. VFP hanya menampilkan data hasil proses server ke CURSOR


Bagian III

---------------------------------------------------------------------------------------------------------------



Sudah mencoba tutorial sebelumnya? Berikut adalah tutorial dalam pengkodean VFP. Tutorial ini bagian terahkir dari 4 bagian. Selamat mencoba...!

DASAR PROSES DATA
Pada dasarnya, query pada SQL Server (seperti mySQL, MSSQL, ORACLE dll) tidak selalu sama. Query yang diproses oleh fungsi SQLEXEC(namakoneksi,"query yang dilakukan","namacursor") ( lihat artikel SQL Pass-Trough (SPT) mempermudah hidup anda...!) tidak diproses oleh VFP. Jadi untuk query-query yang lebih lengkap dapat anda dapatkan di Help masing-masing SQL server. Untuk mySQL Server dapat anda dapatkan di http://www.mysql.com/documentation
Berikut sebagian kecil query yang dapat digunakan secara umum (berlaku untuk masing-masing SQL Server diatas):

1. SELECT namafield FROM namatabel
Syntax ini berfungsi untuk mengambil data dari server dan disimpan kedalam CURSOR FoxPro. Contoh dalam VFP:

SQLEXEC(namakoneksi,"SELECT field1, field2, field3 FROM tabel1","namacursor")

Kalo kamu bermaksud menampilkan data dari tabel (pada kasus diatas bernama "tabel1") kedalam grid atau listbox misalnya, maka sumber data dari grid atau listbox tersebut adalah "namacursor". Lihat listing contoh dibawah:

* menampilkan data dari tabel tabel1 kedalam grid
* Procedure cmdTampil.CLICK()
xnama=ALLTRIM(THISFORM.txtnama.VALUE)
THISFORM.grid1.RECORDSOURCE=""
SQLEXEC(kon,"SELECT field1, field2, field3 FROM tabel1 WHERE field1=?xnama","cursor1")
THISFORM.grid1.RECORDSOURCE="cursor1"

Dalam contoh diatas, data dari tabel1 diambil dan disimpan kedalam tabel sementara atau CURSOR bernama cursor1. Pengambilan data tersebut di "FILTER" oleh field1 dimana isi field1 tersebut sesuai dengan textbox yang bernama txtnama.

... FROM tabel1 WHERE field1=?xnama","cursor1")

Jika ingin menampilkan semua datanya, syntax WHERE dihilangkan saja.

2. INSERT INTO namatabel(field1, field2, field3...) VALUES(xnama1, xnama2, xnama3...)
Syntax ini berfungsi untuk menyimpan (menyisipkan) data ke server. Contoh dalam VFP:

SQLEXEC(namakoneksi,"INSERT INTO namatabel(field1,field2) VALUES(?xnama1,?xnama2)")

Kamu dapat menghilangkan syntax ...(field1,field2)... HANYA jika ...(?xnama1,?xnama2)... sesuai dengan urutan struktur dalam tabel tersebut! Sebagai contoh:

SQLEXEC(namakoneksi,"INSERT INTO namatabel VALUES(?xnama1,?xnama2)")

Contoh dalam pemakaian di VFP dapat kamu lihat di listing kode berikut:

*menyimpan data ke tabel server
* Procedure cmdSimpan.CLICK()
xnamabaru=ALLTRIM(THISFORM.txtnama.VALUE)
xalamat=ALLTRIM(THISFORM.txtalamat.VALUE)
IF MESSAGEBOX('SIMPAN DATA INI?',36,'COBA SIMPAN DATA')=6 &&konfirmasi penyimpanan data
SQLEXEC(kon,"INSERT INTO tabel1(field1,field3) VALUES(?xnamabaru,?xalamat)")
ENDIF

Perhatikan bahwa data yang disimpan kedalam tabel1 HANYA dari field1 dan field3 saja! Untuk itu setelah perintah INSERT INTO tabel1, nama field1 dan field3 ikut dituliskan.

3. UPDATE namatabel SET field1 = xnama1, field2 = xnama2, field3 = xnama3
Seperti namanya, syntax ini berfungsi untuk melakukan perubahan terhadap data yang sudah ada didalam tabel (update data). Contoh penggunakan dalam VFP:

*mengubah data dalam tabel
* Procedure cmdsave.CLICK()
xkdcust=ALLTRIM(THISFORM.txtkdcust.VALUE)
xnama=ALLTRIM(THISFORM.txtnama.VALUE)
IF MESSAGEBOX("Simpan perubahan data pada KODE CUSTOMER "+xkdcust+" ini?",36,"COBA UPDATE DATA")=6
SQLEXEC(kon,"UPDATE customer SET nama=?xnama WHERE kdcust=?xkdcust")
ENDIF

Perhatikan pada statement ...WHERE kdcust =... tersebut! Syntax diatas berarti : "UBAH NILAI DARI TABEL customer DIMANA FIELD nama MENJADI VARIABEL xnama DIMANA kdcust ADALAH VARIABEL xkdcust". Jika tidak menambahkan klausa ...WHERE..., maka SEMUA data dari tabel customer akan berubah nilai field nama menjadi nilai yang tersimpan dalam variabel xnama!

4. DELETE FROM namatabel
Syntax ini berfungsi untuk menghapus data dari tabel dala m sebuah database. Penggunaan dalam VFP:

*menghapus data dari tabel
*Procedure cmdHapus.CLICK()
xkdcust=ALLTRIM(THISFORM.txtkdcust.VALUE)
IF MESSAGEBOX("Hapus data dengan KODE CUSTOMER "+xkdcust+" ini?",36,"COBA HAPUS DATA")=6
SQLEXEC(kon,"DELETE FROM customer WHERE kdcust=?xkdcust") && hapus data tertentu saja
ENDIF

Perhatikan bahwa klausa ...WHERE kdcust=?xkdcust... ditambahkan setelah ...DELETE FROM customer... Hal ini berarti data yang akan dihapus dari tabel customer HANYA yang mempunyai data dari field kdcust yang bernilai dari variabel xkdcust saja! Jika kamu ingin menghapus SEMUA data dari tabel tertentu, kamu tidak perlu menambahkan klausa ...WHERE... kedalam kode kamu, contoh:

SQLEXEC(kon,"DELETE FROM customer") && hapus semua data


3 comments:

Anonymous said...

Hmmmmm *garuk2 kepala sambil mikir* ... kalau soal ini ga ikutan komeng deh

Dita said...

waaaaHhh...
Terima Kasih atas Bantuanny ya Pak.
Post ini sangat bermanfaat.
masalah saya jadi teratasi

God Bless You, Sir..
^^,

harry fall said...

nice and interesting blog....we24support
nice and interesting blog....we24support|computer support
nice and interesting blog....we24support contact us